diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,13 @@
 # Changelog for Calamity
 
+## 0.1.14.2
+
+*2020-06-09*
+
+* Fix broken json decoding for DMs
+
+* Add `mentionChannels` to `Message`
+
 ## 0.1.14.1
 
 *2020-06-08*
diff --git a/calamity.cabal b/calamity.cabal
--- a/calamity.cabal
+++ b/calamity.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 17e82ecf5c56e8f6cd338935a102965df59d7bdfffee1d9c0461ac66c9089a7c
+-- hash: 2a89c6e83c7636ffaf0e0f4474f87664467293685a6a21eea8fc9cc332e6e39b
 
 name:           calamity
-version:        0.1.14.1
+version:        0.1.14.2
 synopsis:       A library for writing discord bots
 description:    Please see the README on GitHub at <https://github.com/nitros12/calamity#readme>
 category:       Network, Web
diff --git a/src/Calamity/HTTP/Internal/Ratelimit.hs b/src/Calamity/HTTP/Internal/Ratelimit.hs
--- a/src/Calamity/HTTP/Internal/Ratelimit.hs
+++ b/src/Calamity/HTTP/Internal/Ratelimit.hs
@@ -72,7 +72,7 @@
         Nothing -> pure $ ClientError (status ^. statusCode) "429 with invalid json???"
     | statusIsClientError status -> do
       let err = r' ^. responseBody
-      error $ "You fucked up: " +|| err ||+ " response: " +|| r' ||+ ""
+      error $ "Something went wrong: " +|| err ||+ " response: " +|| r' ||+ ""
       pure $ ClientError (status ^. statusCode) err
     | otherwise -> do
       debug $ "Got server error from discord: " +| status ^. statusCode |+ ""
diff --git a/src/Calamity/Internal/AesonThings.hs b/src/Calamity/Internal/AesonThings.hs
--- a/src/Calamity/Internal/AesonThings.hs
+++ b/src/Calamity/Internal/AesonThings.hs
@@ -60,9 +60,12 @@
 
 instance (KnownSymbol label, KnownSymbol field) => PerformAction (ExtractArrayField label field) where
   runAction _ o = do
-    a :: Array <- o .: textSymbolVal @label
-    a' <- Array <$> traverse (withObject "extracting field" (.: textSymbolVal @field)) a
-    pure $ o & at (textSymbolVal @label) ?~ a'
+    a :: Maybe Array <- o .:? textSymbolVal @label
+    case a of
+      Just a' -> do
+        a'' <- Array <$> traverse (withObject "extracting field" (.: textSymbolVal @field)) a'
+        pure $ o & at (textSymbolVal @label) ?~ a''
+      Nothing -> pure o
 
 newtype WithSpecialCases (rules :: [Type]) a = WithSpecialCases a
 
diff --git a/src/Calamity/Internal/Updateable.hs b/src/Calamity/Internal/Updateable.hs
--- a/src/Calamity/Internal/Updateable.hs
+++ b/src/Calamity/Internal/Updateable.hs
@@ -43,6 +43,7 @@
     & mergeF @"mentionEveryone" o n
     & mergeF @"mentions" o n
     & mergeF @"mentionRoles" o n
+    & mergeF' @"mentionChannels" o n
     & mergeF @"attachments" o n
     & mergeF @"embeds" o n
     & mergeF @"reactions" o n
diff --git a/src/Calamity/Types/Model/Channel/DM.hs b/src/Calamity/Types/Model/Channel/DM.hs
--- a/src/Calamity/Types/Model/Channel/DM.hs
+++ b/src/Calamity/Types/Model/Channel/DM.hs
@@ -26,6 +26,7 @@
   }
   deriving ( Show, Eq, Generic )
   deriving ( TextShow ) via TSG.FromGeneric DMChannel
-  deriving ( FromJSON, ToJSON ) via CalamityJSON DMChannel
+  deriving ( FromJSON ) via WithSpecialCases
+      '["recipients" `ExtractArrayField` "id"] DMChannel
   deriving ( HasID DMChannel ) via HasIDField "id" DMChannel
   deriving ( HasID Channel ) via HasIDFieldCoerce' "id" DMChannel
diff --git a/src/Calamity/Types/Model/Channel/Message.hs b/src/Calamity/Types/Model/Channel/Message.hs
--- a/src/Calamity/Types/Model/Channel/Message.hs
+++ b/src/Calamity/Types/Model/Channel/Message.hs
@@ -35,6 +35,7 @@
   , mentionEveryone :: Bool
   , mentions        :: UV.Vector (Snowflake User)
   , mentionRoles    :: UV.Vector (Snowflake Role)
+  , mentionChannels :: Maybe (UV.Vector (Snowflake Channel))
   , attachments     :: [Attachment]
   , embeds          :: [Embed]
   , reactions       :: [Reaction]
@@ -45,9 +46,9 @@
   }
   deriving ( Eq, Show, Generic )
   deriving ( TextShow ) via TSG.FromGeneric Message
-  deriving ( ToJSON ) via CalamityJSON Message
   deriving ( FromJSON ) via WithSpecialCases
       '["author" `ExtractFieldFrom` "id", "mentions" `ExtractArrayField` "id",
+        "mention_channels" `ExtractArrayField` "id",
         "reactions" `IfNoneThen` DefaultToEmptyArray]
       Message
   deriving ( HasID Message ) via HasIDField "id" Message
@@ -66,9 +67,6 @@
   | GuildMemberJoin
   deriving ( Eq, Show, Enum, Generic )
   deriving ( TextShow ) via TSG.FromGeneric MessageType
-
-instance ToJSON MessageType where
-  toJSON t = Number $ fromIntegral (fromEnum t)
 
 instance FromJSON MessageType where
   parseJSON = withScientific "MessageType" $ \n -> case toBoundedInteger n of
diff --git a/src/Calamity/Types/Model/Channel/UpdatedMessage.hs b/src/Calamity/Types/Model/Channel/UpdatedMessage.hs
--- a/src/Calamity/Types/Model/Channel/UpdatedMessage.hs
+++ b/src/Calamity/Types/Model/Channel/UpdatedMessage.hs
@@ -29,6 +29,7 @@
   , mentionEveryone :: Maybe Bool
   , mentions        :: Maybe (UV.Vector (Snowflake User))
   , mentionRoles    :: Maybe (UV.Vector (Snowflake Role))
+  , mentionChannels :: Maybe (UV.Vector (Snowflake Channel))
   , attachments     :: Maybe [Attachment]
   , embeds          :: Maybe [Embed]
   , reactions       :: Maybe [Reaction]
@@ -37,7 +38,8 @@
   deriving ( Eq, Show, Generic )
   deriving ( TextShow ) via TSG.FromGeneric UpdatedMessage
   deriving ( FromJSON ) via WithSpecialCases
-      '["author" `ExtractFieldFrom` "id", "mentions" `ExtractArrayField` "id"]
+      '["author" `ExtractFieldFrom` "id", "mentions" `ExtractArrayField` "id",
+        "mention_channels" `ExtractArrayField` "id"]
       UpdatedMessage
   deriving ( HasID Message ) via HasIDField "id" UpdatedMessage
   deriving ( HasID Channel ) via HasIDField "channelID" UpdatedMessage
