{-# LANGUAGE TemplateHaskell #-}
module Calamity.Types.Model.Channel.Message (
Message (..),
MessageAuthor (..),
MessageAuthorWebhook (..),
ChannelMention (..),
MessageType (..),
MessageReference (..),
Partial (PartialMessage),
) where
import Calamity.Internal.Utils (AesonVector (..), CalamityToJSON (..), CalamityToJSON' (..), (.=), (.?=))
import {-# SOURCE #-} Calamity.Types.Model.Channel
import Calamity.Types.Model.Channel.Attachment
import Calamity.Types.Model.Channel.ChannelType (ChannelType)
import Calamity.Types.Model.Channel.Component
import Calamity.Types.Model.Channel.Embed
import Calamity.Types.Model.Channel.Reaction
import Calamity.Types.Model.Channel.Webhook
import {-# SOURCE #-} Calamity.Types.Model.Guild.Guild
import Calamity.Types.Model.Guild.Role
import Calamity.Types.Model.User
import Calamity.Types.Snowflake
import Data.Aeson ((.!=), (.:), (.:?))
import qualified Data.Aeson as Aeson
import Data.Maybe (isJust)
import Data.Scientific
import Data.Text (Text)
import Data.Time
import qualified Data.Vector.Unboxing as UV
import Data.Word (Word64)
import Optics.TH
import qualified TextShow
import TextShow.TH
data MessageAuthorWebhook = MessageAuthorWebhook
{ MessageAuthorWebhook -> Snowflake Webhook
id :: Snowflake Webhook
, MessageAuthorWebhook -> Text
username :: Text
, MessageAuthorWebhook -> Maybe Text
avatar :: Maybe Text
}
deriving (Int -> MessageAuthorWebhook -> ShowS
[MessageAuthorWebhook] -> ShowS
MessageAuthorWebhook -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MessageAuthorWebhook] -> ShowS
$cshowList :: [MessageAuthorWebhook] -> ShowS
show :: MessageAuthorWebhook -> String
$cshow :: MessageAuthorWebhook -> String
showsPrec :: Int -> MessageAuthorWebhook -> ShowS
$cshowsPrec :: Int -> MessageAuthorWebhook -> ShowS
Show)
deriving (HasID Webhook) via HasIDField "id" MessageAuthorWebhook
data MessageAuthor
= User' User
| Webhook' MessageAuthorWebhook
deriving (Int -> MessageAuthor -> ShowS
[MessageAuthor] -> ShowS
MessageAuthor -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MessageAuthor] -> ShowS
$cshowList :: [MessageAuthor] -> ShowS
show :: MessageAuthor -> String
$cshow :: MessageAuthor -> String
showsPrec :: Int -> MessageAuthor -> ShowS
$cshowsPrec :: Int -> MessageAuthor -> ShowS
Show)
instance HasID User MessageAuthor where
getID :: MessageAuthor -> Snowflake User
getID (User' User
u) = forall b a. HasID b a => a -> Snowflake b
getID User
u
getID (Webhook' MessageAuthorWebhook {Snowflake Webhook
id :: Snowflake Webhook
$sel:id:MessageAuthorWebhook :: MessageAuthorWebhook -> Snowflake Webhook
id}) = forall a b. Snowflake a -> Snowflake b
coerceSnowflake Snowflake Webhook
id
data ChannelMention = ChannelMention
{ ChannelMention -> Snowflake Channel
id :: Snowflake Channel
, ChannelMention -> Snowflake Guild
guildID :: Snowflake Guild
, ChannelMention -> ChannelType
type_ :: ChannelType
, ChannelMention -> Text
name :: Text
}
deriving (Int -> ChannelMention -> ShowS
[ChannelMention] -> ShowS
ChannelMention -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ChannelMention] -> ShowS
$cshowList :: [ChannelMention] -> ShowS
show :: ChannelMention -> String
$cshow :: ChannelMention -> String
showsPrec :: Int -> ChannelMention -> ShowS
$cshowsPrec :: Int -> ChannelMention -> ShowS
Show)
deriving (HasID Channel) via HasIDField "id" ChannelMention
instance Aeson.FromJSON ChannelMention where
parseJSON :: Value -> Parser ChannelMention
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
Aeson.withObject String
"Message.ChannelMention" forall a b. (a -> b) -> a -> b
$ \Object
v ->
Snowflake Channel
-> Snowflake Guild -> ChannelType -> Text -> ChannelMention
ChannelMention
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"guild_id"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"type"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"name"
data Message = Message
{ Message -> Snowflake Message
id :: Snowflake Message
, Message -> Snowflake Channel
channelID :: Snowflake Channel
, Message -> Maybe (Snowflake Guild)
guildID :: Maybe (Snowflake Guild)
, Message -> MessageAuthor
author :: MessageAuthor
, Message -> Text
content :: Text
, Message -> UTCTime
timestamp :: UTCTime
, Message -> Maybe UTCTime
editedTimestamp :: Maybe UTCTime
, Message -> Bool
tts :: Bool
, Message -> Bool
mentionEveryone :: Bool
, Message -> [User]
mentions :: [User]
, Message -> Vector (Snowflake Role)
mentionRoles :: UV.Vector (Snowflake Role)
, Message -> [ChannelMention]
mentionChannels :: [ChannelMention]
, Message -> [Attachment]
attachments :: [Attachment]
, Message -> [Embed]
embeds :: [Embed]
, Message -> [Reaction]
reactions :: [Reaction]
, Message -> Maybe Value
nonce :: Maybe Aeson.Value
, Message -> Bool
pinned :: Bool
, Message -> Maybe (Snowflake Webhook)
webhookID :: Maybe (Snowflake Webhook)
, Message -> MessageType
type_ :: MessageType
, Message -> Maybe Object
activity :: Maybe Aeson.Object
, Message -> Maybe Object
application :: Maybe Aeson.Object
, Message -> Maybe MessageReference
messageReference :: Maybe MessageReference
, Message -> Word64
flags :: Word64
, Message -> Maybe Message
referencedMessage :: Maybe Message
, Message -> Maybe Object
interaction :: Maybe Aeson.Object
, Message -> [Component]
components :: [Component]
}
deriving (Int -> Message -> ShowS
[Message] -> ShowS
Message -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Message] -> ShowS
$cshowList :: [Message] -> ShowS
show :: Message -> String
$cshow :: Message -> String
showsPrec :: Int -> Message -> ShowS
$cshowsPrec :: Int -> Message -> ShowS
Show)
deriving (Int -> Message -> Builder
Int -> Message -> Text
Int -> Message -> Text
[Message] -> Builder
[Message] -> Text
[Message] -> Text
Message -> Builder
Message -> Text
Message -> Text
forall a.
(Int -> a -> Builder)
-> (a -> Builder)
-> ([a] -> Builder)
-> (Int -> a -> Text)
-> (a -> Text)
-> ([a] -> Text)
-> (Int -> a -> Text)
-> (a -> Text)
-> ([a] -> Text)
-> TextShow a
showtlList :: [Message] -> Text
$cshowtlList :: [Message] -> Text
showtl :: Message -> Text
$cshowtl :: Message -> Text
showtlPrec :: Int -> Message -> Text
$cshowtlPrec :: Int -> Message -> Text
showtList :: [Message] -> Text
$cshowtList :: [Message] -> Text
showt :: Message -> Text
$cshowt :: Message -> Text
showtPrec :: Int -> Message -> Text
$cshowtPrec :: Int -> Message -> Text
showbList :: [Message] -> Builder
$cshowbList :: [Message] -> Builder
showb :: Message -> Builder
$cshowb :: Message -> Builder
showbPrec :: Int -> Message -> Builder
$cshowbPrec :: Int -> Message -> Builder
TextShow.TextShow) via TextShow.FromStringShow Message
deriving (HasID Message) via HasIDField "id" Message
deriving (HasID Channel) via HasIDField "channelID" Message
deriving (HasID User) via HasIDField "author" Message
instance Aeson.FromJSON Message where
parseJSON :: Value -> Parser Message
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
Aeson.withObject String
"Message" forall a b. (a -> b) -> a -> b
$ \Object
v -> do
Maybe (Snowflake Webhook)
webhookID <- Object
v forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"webhook_id"
let author :: Parser MessageAuthor
author =
if forall a. Maybe a -> Bool
isJust Maybe (Snowflake Webhook)
webhookID
then
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Aeson.withObject
String
"Message.author"
( \Object
v ->
MessageAuthorWebhook -> MessageAuthor
Webhook'
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ( Snowflake Webhook -> Text -> Maybe Text -> MessageAuthorWebhook
MessageAuthorWebhook
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id" forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"username" forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"avatar"
)
)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"author"
else User -> MessageAuthor
User' forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (forall a. FromJSON a => Value -> Parser a
Aeson.parseJSON forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< (Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"author"))
Snowflake Message
-> Snowflake Channel
-> Maybe (Snowflake Guild)
-> MessageAuthor
-> Text
-> UTCTime
-> Maybe UTCTime
-> Bool
-> Bool
-> [User]
-> Vector (Snowflake Role)
-> [ChannelMention]
-> [Attachment]
-> [Embed]
-> [Reaction]
-> Maybe Value
-> Bool
-> Maybe (Snowflake Webhook)
-> MessageType
-> Maybe Object
-> Maybe Object
-> Maybe MessageReference
-> Word64
-> Maybe Message
-> Maybe Object
-> [Component]
-> Message
Message
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"channel_id"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"guild_id"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser MessageAuthor
author
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"content"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"timestamp"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"edited_timestamp"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"tts"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"mention_everyone"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"mentions"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (forall a. AesonVector a -> Vector a
unAesonVector forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"mention_roles")
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"mention_channels" forall a. Parser (Maybe a) -> a -> Parser a
.!= []
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"attachments"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"embeds"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"reactions" forall a. Parser (Maybe a) -> a -> Parser a
.!= []
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"nonce"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"pinned"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe (Snowflake Webhook)
webhookID
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"type"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"activity"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"application"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"message_reference"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"flags" forall a. Parser (Maybe a) -> a -> Parser a
.!= Word64
0
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"referenced_message"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"interaction"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"components" forall a. Parser (Maybe a) -> a -> Parser a
.!= []
data instance Partial Message = PartialMessage
{ Partial Message -> Snowflake Channel
channelID :: Snowflake Channel
, Partial Message -> Maybe (Snowflake Guild)
guildID :: Maybe (Snowflake Guild)
}
deriving (Int -> Partial Message -> ShowS
[Partial Message] -> ShowS
Partial Message -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Partial Message] -> ShowS
$cshowList :: [Partial Message] -> ShowS
show :: Partial Message -> String
$cshow :: Partial Message -> String
showsPrec :: Int -> Partial Message -> ShowS
$cshowsPrec :: Int -> Partial Message -> ShowS
Show)
deriving (HasID Channel) via HasIDField "channelID" (Partial Message)
instance Aeson.FromJSON (Partial Message) where
parseJSON :: Value -> Parser (Partial Message)
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
Aeson.withObject String
"Partial Message" forall a b. (a -> b) -> a -> b
$ \Object
v ->
Snowflake Channel -> Maybe (Snowflake Guild) -> Partial Message
PartialMessage
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"channel_id"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"guild_id"
data MessageReference = MessageReference
{ MessageReference -> Maybe (Snowflake Message)
messageID :: Maybe (Snowflake Message)
, MessageReference -> Maybe (Snowflake Channel)
channelID :: Maybe (Snowflake Channel)
, MessageReference -> Maybe (Snowflake Guild)
guildID :: Maybe (Snowflake Guild)
, MessageReference -> Bool
failIfNotExists :: Bool
}
deriving (MessageReference -> MessageReference -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MessageReference -> MessageReference -> Bool
$c/= :: MessageReference -> MessageReference -> Bool
== :: MessageReference -> MessageReference -> Bool
$c== :: MessageReference -> MessageReference -> Bool
Eq, Int -> MessageReference -> ShowS
[MessageReference] -> ShowS
MessageReference -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MessageReference] -> ShowS
$cshowList :: [MessageReference] -> ShowS
show :: MessageReference -> String
$cshow :: MessageReference -> String
showsPrec :: Int -> MessageReference -> ShowS
$cshowsPrec :: Int -> MessageReference -> ShowS
Show)
deriving ([MessageReference] -> Encoding
[MessageReference] -> Value
MessageReference -> Encoding
MessageReference -> Value
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [MessageReference] -> Encoding
$ctoEncodingList :: [MessageReference] -> Encoding
toJSONList :: [MessageReference] -> Value
$ctoJSONList :: [MessageReference] -> Value
toEncoding :: MessageReference -> Encoding
$ctoEncoding :: MessageReference -> Encoding
toJSON :: MessageReference -> Value
$ctoJSON :: MessageReference -> Value
Aeson.ToJSON) via CalamityToJSON MessageReference
instance CalamityToJSON' MessageReference where
toPairs :: forall kv. KeyValue kv => MessageReference -> [Maybe kv]
toPairs MessageReference {Bool
Maybe (Snowflake Channel)
Maybe (Snowflake Message)
Maybe (Snowflake Guild)
failIfNotExists :: Bool
guildID :: Maybe (Snowflake Guild)
channelID :: Maybe (Snowflake Channel)
messageID :: Maybe (Snowflake Message)
$sel:failIfNotExists:MessageReference :: MessageReference -> Bool
$sel:guildID:MessageReference :: MessageReference -> Maybe (Snowflake Guild)
$sel:channelID:MessageReference :: MessageReference -> Maybe (Snowflake Channel)
$sel:messageID:MessageReference :: MessageReference -> Maybe (Snowflake Message)
..} =
[ Key
"message_id" forall v kv. (ToJSON v, KeyValue kv) => Key -> Maybe v -> Maybe kv
.?= Maybe (Snowflake Message)
messageID
, Key
"channel_id" forall v kv. (ToJSON v, KeyValue kv) => Key -> Maybe v -> Maybe kv
.?= Maybe (Snowflake Channel)
channelID
, Key
"guild_id" forall v kv. (ToJSON v, KeyValue kv) => Key -> Maybe v -> Maybe kv
.?= Maybe (Snowflake Guild)
guildID
, Key
"fail_if_not_exists" forall v kv. (ToJSON v, KeyValue kv) => Key -> v -> Maybe kv
.= Bool
failIfNotExists
]
instance Aeson.FromJSON MessageReference where
parseJSON :: Value -> Parser MessageReference
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
Aeson.withObject String
"MessageReference" forall a b. (a -> b) -> a -> b
$ \Object
v ->
Maybe (Snowflake Message)
-> Maybe (Snowflake Channel)
-> Maybe (Snowflake Guild)
-> Bool
-> MessageReference
MessageReference
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"message_id"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"channel_id"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"guild_id"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"fail_if_not_exists" forall a. Parser (Maybe a) -> a -> Parser a
.!= Bool
False
data MessageType
= Default
| RecipientAdd
| RecipientRemove
| Call
| ChannelNameChange
| ChannelIconChange
| ChannelPinnedMessage
| GuildMemberJoin
| UserPremiumGuildSubscription
| UserPremiumGuildSubscriptionTier1
| UserPremiumGuildSubscriptionTier2
| UserPremiumGuildSubscriptionTier3
| ChannelFollowAdd
| GuildDiscoveryDisqualified
| GuildDiscoveryRequalified
| Reply
| ApplicationCommmand
deriving (MessageType -> MessageType -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MessageType -> MessageType -> Bool
$c/= :: MessageType -> MessageType -> Bool
== :: MessageType -> MessageType -> Bool
$c== :: MessageType -> MessageType -> Bool
Eq, Int -> MessageType -> ShowS
[MessageType] -> ShowS
MessageType -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MessageType] -> ShowS
$cshowList :: [MessageType] -> ShowS
show :: MessageType -> String
$cshow :: MessageType -> String
showsPrec :: Int -> MessageType -> ShowS
$cshowsPrec :: Int -> MessageType -> ShowS
Show, Int -> MessageType
MessageType -> Int
MessageType -> [MessageType]
MessageType -> MessageType
MessageType -> MessageType -> [MessageType]
MessageType -> MessageType -> MessageType -> [MessageType]
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: MessageType -> MessageType -> MessageType -> [MessageType]
$cenumFromThenTo :: MessageType -> MessageType -> MessageType -> [MessageType]
enumFromTo :: MessageType -> MessageType -> [MessageType]
$cenumFromTo :: MessageType -> MessageType -> [MessageType]
enumFromThen :: MessageType -> MessageType -> [MessageType]
$cenumFromThen :: MessageType -> MessageType -> [MessageType]
enumFrom :: MessageType -> [MessageType]
$cenumFrom :: MessageType -> [MessageType]
fromEnum :: MessageType -> Int
$cfromEnum :: MessageType -> Int
toEnum :: Int -> MessageType
$ctoEnum :: Int -> MessageType
pred :: MessageType -> MessageType
$cpred :: MessageType -> MessageType
succ :: MessageType -> MessageType
$csucc :: MessageType -> MessageType
Enum)
instance Aeson.FromJSON MessageType where
parseJSON :: Value -> Parser MessageType
parseJSON = forall a. String -> (Scientific -> Parser a) -> Value -> Parser a
Aeson.withScientific String
"MessageType" forall a b. (a -> b) -> a -> b
$ \Scientific
n -> case forall i. (Integral i, Bounded i) => Scientific -> Maybe i
toBoundedInteger @Int Scientific
n of
Just Int
v -> case Int
v of
Int
0 -> forall (f :: * -> *) a. Applicative f => a -> f a
pure MessageType
Default
Int
1 -> forall (f :: * -> *) a. Applicative f => a -> f a
pure MessageType
RecipientAdd
Int
2 -> forall (f :: * -> *) a. Applicative f => a -> f a
pure MessageType
RecipientRemove
Int
3 -> forall (f :: * -> *) a. Applicative f => a -> f a
pure MessageType
Call
Int
4 -> forall (f :: * -> *) a. Applicative f => a -> f a
pure MessageType
ChannelNameChange
Int
5 -> forall (f :: * -> *) a. Applicative f => a -> f a
pure MessageType
ChannelIconChange
Int
6 -> forall (f :: * -> *) a. Applicative f => a -> f a
pure MessageType
ChannelPinnedMessage
Int
7 -> forall (f :: * -> *) a. Applicative f => a -> f a
pure MessageType
GuildMemberJoin
Int
8 -> forall (f :: * -> *) a. Applicative f => a -> f a
pure MessageType
UserPremiumGuildSubscription
Int
9 -> forall (f :: * -> *) a. Applicative f => a -> f a
pure MessageType
UserPremiumGuildSubscriptionTier1
Int
10 -> forall (f :: * -> *) a. Applicative f => a -> f a
pure MessageType
UserPremiumGuildSubscriptionTier2
Int
11 -> forall (f :: * -> *) a. Applicative f => a -> f a
pure MessageType
UserPremiumGuildSubscriptionTier3
Int
12 -> forall (f :: * -> *) a. Applicative f => a -> f a
pure MessageType
ChannelFollowAdd
Int
14 -> forall (f :: * -> *) a. Applicative f => a -> f a
pure MessageType
GuildDiscoveryDisqualified
Int
15 -> forall (f :: * -> *) a. Applicative f => a -> f a
pure MessageType
GuildDiscoveryRequalified
Int
19 -> forall (f :: * -> *) a. Applicative f => a -> f a
pure MessageType
Reply
Int
20 -> forall (f :: * -> *) a. Applicative f => a -> f a
pure MessageType
ApplicationCommmand
Int
_ -> forall (m :: * -> *) a. MonadFail m => String -> m a
fail forall a b. (a -> b) -> a -> b
$ String
"Invalid MessageType: " forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> String
show Scientific
n
Maybe Int
Nothing -> forall (m :: * -> *) a. MonadFail m => String -> m a
fail forall a b. (a -> b) -> a -> b
$ String
"Invalid MessageType: " forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> String
show Scientific
n
$(deriveTextShow ''MessageAuthorWebhook)
$(deriveTextShow 'PartialMessage)
$(deriveTextShow ''ChannelMention)
$(deriveTextShow ''MessageType)
$(makeFieldLabelsNoPrefix ''MessageAuthorWebhook)
$(makeFieldLabelsNoPrefix ''ChannelMention)
$(makeFieldLabelsNoPrefix 'PartialMessage)
$(makeFieldLabelsNoPrefix ''Message)
$(makeFieldLabelsNoPrefix ''MessageReference)