calamity-0.12.1.0: Calamity/Types/Model/Channel/UpdatedMessage.hs
{-# LANGUAGE TemplateHaskell #-}
-- | Updated messages
module Calamity.Types.Model.Channel.UpdatedMessage (
UpdatedMessage (..),
) where
import Calamity.Internal.Utils
import Calamity.Types.Model.Channel
import Calamity.Types.Model.Guild.Role
import Calamity.Types.Model.User
import Calamity.Types.Snowflake
import Data.Aeson ((.:), (.:!), (.:?))
import Data.Aeson qualified as Aeson
import Data.Text (Text)
import Data.Time
import Data.Vector.Unboxing qualified as UV
import Data.Word
import Optics.TH
import TextShow qualified
data UpdatedMessage = UpdatedMessage
{ id :: Snowflake Message
, channelID :: Snowflake Channel
, content :: Maybe Text
, editedTimestamp :: Maybe (MaybeNull UTCTime)
, tts :: Maybe Bool
, mentionEveryone :: Maybe Bool
, mentions :: Maybe [User]
, mentionRoles :: Maybe (UV.Vector (Snowflake Role))
, mentionChannels :: Maybe [ChannelMention]
, attachments :: Maybe [Attachment]
, embeds :: Maybe [Embed]
, reactions :: Maybe [Reaction]
, pinned :: Maybe Bool
, type_ :: Maybe MessageType
, activity :: Maybe (MaybeNull Aeson.Object)
, application :: Maybe (MaybeNull Aeson.Object)
, messageReference :: Maybe (MaybeNull MessageReference)
, flags :: Maybe Word64
, referencedMessage :: Maybe (MaybeNull Message)
, interaction :: Maybe (MaybeNull Aeson.Object)
, components :: Maybe [Component]
}
deriving (Show)
deriving (TextShow.TextShow) via TextShow.FromStringShow UpdatedMessage
deriving (HasID Message) via HasIDField "id" UpdatedMessage
deriving (HasID Channel) via HasIDField "channelID" UpdatedMessage
instance Aeson.FromJSON UpdatedMessage where
parseJSON = Aeson.withObject "UpdatedMessage" $ \v ->
UpdatedMessage
<$> v .: "id"
<*> v .: "channel_id"
<*> v .:? "content"
<*> v .:! "edited_timestamp"
<*> v .:? "tts"
<*> v .:? "mention_everyone"
<*> v .:? "mentions"
<*> (fmap unAesonVector <$> v .:? "mention_roles")
<*> v .:? "mention_channels"
<*> v .:? "attachments"
<*> v .:? "embeds"
<*> v .:? "reactions"
<*> v .:? "pinned"
<*> v .:? "type"
<*> v .:! "activity"
<*> v .:! "application"
<*> v .:! "message_reference"
<*> v .:? "flags"
<*> v .:! "referenced_message"
<*> v .:! "interaction"
<*> v .:? "components"
$(makeFieldLabelsNoPrefix ''UpdatedMessage)