{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Discord.Internal.Types.Events where
import Prelude hiding (id)
import Data.Time.ISO8601 (parseISO8601)
import Data.Time (UTCTime)
import Data.Time.Clock.POSIX (posixSecondsToUTCTime)
import Network.Socket (HostName)
import Data.Aeson
import Data.Aeson.Types
import qualified Data.Aeson.KeyMap as KM
import qualified Data.Text as T
import Discord.Internal.Types.Prelude
import Discord.Internal.Types.Channel
import Discord.Internal.Types.Guild
import Discord.Internal.Types.User (User, GuildMember)
import Discord.Internal.Types.Interactions (Interaction)
import Discord.Internal.Types.Emoji (Emoji)
import Discord.Internal.Types.ScheduledEvents (ScheduledEvent)
data Event =
Ready Int User [GuildUnavailable] T.Text HostName (Maybe Shard) PartialApplication
| Resumed [T.Text]
| ChannelCreate Channel
| ChannelUpdate Channel
| ChannelDelete Channel
| ThreadCreate Channel
| ThreadUpdate Channel
| ThreadMemberUpdate ThreadMemberUpdateFields
| ThreadDelete Channel
| ThreadListSync ThreadListSyncFields
| ThreadMembersUpdate ThreadMembersUpdateFields
| ChannelPinsUpdate ChannelId (Maybe UTCTime)
| GuildCreate Guild GuildCreateData
| GuildUpdate Guild
| GuildDelete GuildUnavailable
| GuildBanAdd GuildId User
| GuildBanRemove GuildId User
| GuildEmojiUpdate GuildId [Emoji]
| GuildIntegrationsUpdate GuildId
| GuildMemberAdd GuildId GuildMember
| GuildMemberRemove GuildId User
| GuildMemberUpdate GuildId [RoleId] User (Maybe T.Text)
| GuildMemberChunk GuildId [GuildMember]
| GuildRoleCreate GuildId Role
| GuildRoleUpdate GuildId Role
| GuildRoleDelete GuildId RoleId
| MessageCreate Message
| MessageUpdate ChannelId MessageId
| MessageDelete ChannelId MessageId
| MessageDeleteBulk ChannelId [MessageId]
| MessageReactionAdd ReactionInfo
| MessageReactionRemove ReactionInfo
| MessageReactionRemoveAll ChannelId MessageId
| MessageReactionRemoveEmoji ReactionRemoveInfo
| PresenceUpdate PresenceInfo
| TypingStart TypingInfo
| UserUpdate User
| InteractionCreate Interaction
| UnknownEvent T.Text Object
deriving (Int -> Event -> ShowS
[Event] -> ShowS
Event -> String
(Int -> Event -> ShowS)
-> (Event -> String) -> ([Event] -> ShowS) -> Show Event
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Event -> ShowS
showsPrec :: Int -> Event -> ShowS
$cshow :: Event -> String
show :: Event -> String
$cshowList :: [Event] -> ShowS
showList :: [Event] -> ShowS
Show, Event -> Event -> Bool
(Event -> Event -> Bool) -> (Event -> Event -> Bool) -> Eq Event
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Event -> Event -> Bool
== :: Event -> Event -> Bool
$c/= :: Event -> Event -> Bool
/= :: Event -> Event -> Bool
Eq)
data EventInternalParse =
InternalReady Int User [GuildUnavailable] T.Text HostName (Maybe Shard) PartialApplication
| InternalResumed [T.Text]
| InternalChannelCreate Channel
| InternalChannelUpdate Channel
| InternalChannelDelete Channel
| InternalThreadCreate Channel
| InternalThreadUpdate Channel
| InternalThreadMemberUpdate ThreadMemberUpdateFields
| InternalThreadDelete Channel
| InternalThreadListSync ThreadListSyncFields
| InternalThreadMembersUpdate ThreadMembersUpdateFields
| InternalChannelPinsUpdate ChannelId (Maybe UTCTime)
| InternalGuildCreate Guild GuildCreateData
| InternalGuildUpdate Guild
| InternalGuildDelete GuildUnavailable
| InternalGuildBanAdd GuildId User
| InternalGuildBanRemove GuildId User
| InternalGuildEmojiUpdate GuildId [Emoji]
| InternalGuildIntegrationsUpdate GuildId
| InternalGuildMemberAdd GuildId GuildMember
| InternalGuildMemberRemove GuildId User
| InternalGuildMemberUpdate GuildId [RoleId] User (Maybe T.Text)
| InternalGuildMemberChunk GuildId [GuildMember]
| InternalGuildRoleCreate GuildId Role
| InternalGuildRoleUpdate GuildId Role
| InternalGuildRoleDelete GuildId RoleId
| InternalMessageCreate Message
| InternalMessageUpdate ChannelId MessageId
| InternalMessageDelete ChannelId MessageId
| InternalMessageDeleteBulk ChannelId [MessageId]
| InternalMessageReactionAdd ReactionInfo
| InternalMessageReactionRemove ReactionInfo
| InternalMessageReactionRemoveAll ChannelId MessageId
| InternalMessageReactionRemoveEmoji ReactionRemoveInfo
| InternalPresenceUpdate PresenceInfo
| InternalTypingStart TypingInfo
| InternalUserUpdate User
| InternalInteractionCreate Interaction
| InternalUnknownEvent T.Text Object
deriving (Int -> EventInternalParse -> ShowS
[EventInternalParse] -> ShowS
EventInternalParse -> String
(Int -> EventInternalParse -> ShowS)
-> (EventInternalParse -> String)
-> ([EventInternalParse] -> ShowS)
-> Show EventInternalParse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> EventInternalParse -> ShowS
showsPrec :: Int -> EventInternalParse -> ShowS
$cshow :: EventInternalParse -> String
show :: EventInternalParse -> String
$cshowList :: [EventInternalParse] -> ShowS
showList :: [EventInternalParse] -> ShowS
Show, EventInternalParse -> EventInternalParse -> Bool
(EventInternalParse -> EventInternalParse -> Bool)
-> (EventInternalParse -> EventInternalParse -> Bool)
-> Eq EventInternalParse
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: EventInternalParse -> EventInternalParse -> Bool
== :: EventInternalParse -> EventInternalParse -> Bool
$c/= :: EventInternalParse -> EventInternalParse -> Bool
/= :: EventInternalParse -> EventInternalParse -> Bool
Eq, ReadPrec [EventInternalParse]
ReadPrec EventInternalParse
Int -> ReadS EventInternalParse
ReadS [EventInternalParse]
(Int -> ReadS EventInternalParse)
-> ReadS [EventInternalParse]
-> ReadPrec EventInternalParse
-> ReadPrec [EventInternalParse]
-> Read EventInternalParse
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS EventInternalParse
readsPrec :: Int -> ReadS EventInternalParse
$creadList :: ReadS [EventInternalParse]
readList :: ReadS [EventInternalParse]
$creadPrec :: ReadPrec EventInternalParse
readPrec :: ReadPrec EventInternalParse
$creadListPrec :: ReadPrec [EventInternalParse]
readListPrec :: ReadPrec [EventInternalParse]
Read)
data PartialApplication = PartialApplication
{ PartialApplication -> ApplicationId
partialApplicationID :: ApplicationId
, PartialApplication -> Int
partialApplicationFlags :: Int
} deriving (Int -> PartialApplication -> ShowS
[PartialApplication] -> ShowS
PartialApplication -> String
(Int -> PartialApplication -> ShowS)
-> (PartialApplication -> String)
-> ([PartialApplication] -> ShowS)
-> Show PartialApplication
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PartialApplication -> ShowS
showsPrec :: Int -> PartialApplication -> ShowS
$cshow :: PartialApplication -> String
show :: PartialApplication -> String
$cshowList :: [PartialApplication] -> ShowS
showList :: [PartialApplication] -> ShowS
Show, PartialApplication -> PartialApplication -> Bool
(PartialApplication -> PartialApplication -> Bool)
-> (PartialApplication -> PartialApplication -> Bool)
-> Eq PartialApplication
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PartialApplication -> PartialApplication -> Bool
== :: PartialApplication -> PartialApplication -> Bool
$c/= :: PartialApplication -> PartialApplication -> Bool
/= :: PartialApplication -> PartialApplication -> Bool
Eq, ReadPrec [PartialApplication]
ReadPrec PartialApplication
Int -> ReadS PartialApplication
ReadS [PartialApplication]
(Int -> ReadS PartialApplication)
-> ReadS [PartialApplication]
-> ReadPrec PartialApplication
-> ReadPrec [PartialApplication]
-> Read PartialApplication
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS PartialApplication
readsPrec :: Int -> ReadS PartialApplication
$creadList :: ReadS [PartialApplication]
readList :: ReadS [PartialApplication]
$creadPrec :: ReadPrec PartialApplication
readPrec :: ReadPrec PartialApplication
$creadListPrec :: ReadPrec [PartialApplication]
readListPrec :: ReadPrec [PartialApplication]
Read)
instance FromJSON PartialApplication where
parseJSON :: Value -> Parser PartialApplication
parseJSON = String
-> (Object -> Parser PartialApplication)
-> Value
-> Parser PartialApplication
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"PartialApplication" (\Object
v -> ApplicationId -> Int -> PartialApplication
PartialApplication (ApplicationId -> Int -> PartialApplication)
-> Parser ApplicationId -> Parser (Int -> PartialApplication)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v Object -> Key -> Parser ApplicationId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id" Parser (Int -> PartialApplication)
-> Parser Int -> Parser PartialApplication
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"flags")
data GuildCreateData = GuildCreateData
{ GuildCreateData -> UTCTime
guildCreateJoinedAt :: !UTCTime
, GuildCreateData -> Bool
guildCreateLarge :: !Bool
, GuildCreateData -> Maybe Bool
guildCreateUnavailable :: !(Maybe Bool)
, GuildCreateData -> Int
guildCreateMemberCount :: !Int
, GuildCreateData -> [GuildMember]
guildCreateMembers :: ![GuildMember]
, GuildCreateData -> [Channel]
guildCreateChannels :: ![Channel]
, GuildCreateData -> [Channel]
guildCreateThreads :: ![Channel]
, GuildCreateData -> [PresenceInfo]
guildCreatePresences :: ![PresenceInfo]
, GuildCreateData -> [ScheduledEvent]
guildCreateScheduledEvents :: ![ScheduledEvent]
} deriving (Int -> GuildCreateData -> ShowS
[GuildCreateData] -> ShowS
GuildCreateData -> String
(Int -> GuildCreateData -> ShowS)
-> (GuildCreateData -> String)
-> ([GuildCreateData] -> ShowS)
-> Show GuildCreateData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GuildCreateData -> ShowS
showsPrec :: Int -> GuildCreateData -> ShowS
$cshow :: GuildCreateData -> String
show :: GuildCreateData -> String
$cshowList :: [GuildCreateData] -> ShowS
showList :: [GuildCreateData] -> ShowS
Show, GuildCreateData -> GuildCreateData -> Bool
(GuildCreateData -> GuildCreateData -> Bool)
-> (GuildCreateData -> GuildCreateData -> Bool)
-> Eq GuildCreateData
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: GuildCreateData -> GuildCreateData -> Bool
== :: GuildCreateData -> GuildCreateData -> Bool
$c/= :: GuildCreateData -> GuildCreateData -> Bool
/= :: GuildCreateData -> GuildCreateData -> Bool
Eq, ReadPrec [GuildCreateData]
ReadPrec GuildCreateData
Int -> ReadS GuildCreateData
ReadS [GuildCreateData]
(Int -> ReadS GuildCreateData)
-> ReadS [GuildCreateData]
-> ReadPrec GuildCreateData
-> ReadPrec [GuildCreateData]
-> Read GuildCreateData
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS GuildCreateData
readsPrec :: Int -> ReadS GuildCreateData
$creadList :: ReadS [GuildCreateData]
readList :: ReadS [GuildCreateData]
$creadPrec :: ReadPrec GuildCreateData
readPrec :: ReadPrec GuildCreateData
$creadListPrec :: ReadPrec [GuildCreateData]
readListPrec :: ReadPrec [GuildCreateData]
Read)
parseGuildCreate :: Object -> Parser EventInternalParse
parseGuildCreate :: Object -> Parser EventInternalParse
parseGuildCreate Object
o = do
Guild
guild :: Guild <- Object -> Parser Guild
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
let gid :: GuildId
gid = Guild -> GuildId
guildId Guild
guild
[Object]
channelValues :: [Object] <- Object
o Object -> Key -> Parser [Object]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"channels"
[Object]
threadValues :: [Object] <- Object
o Object -> Key -> Parser [Object]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"threads"
let wellFormedChannels :: [Value]
wellFormedChannels = (Object -> Value) -> [Object] -> [Value]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Object -> Value
Object (Object -> Value) -> (Object -> Object) -> Object -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Key -> Value -> Object -> Object
forall v. Key -> v -> KeyMap v -> KeyMap v
KM.insert Key
"guild_id" (GuildId -> Value
forall a. ToJSON a => a -> Value
toJSON GuildId
gid)) [Object]
channelValues
wellFormedThreads :: [Value]
wellFormedThreads = (Object -> Value) -> [Object] -> [Value]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Object -> Value
Object (Object -> Value) -> (Object -> Object) -> Object -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Key -> Value -> Object -> Object
forall v. Key -> v -> KeyMap v -> KeyMap v
KM.insert Key
"guild_id" (GuildId -> Value
forall a. ToJSON a => a -> Value
toJSON GuildId
gid)) [Object]
threadValues
GuildCreateData
guildCreateData <-
UTCTime
-> Bool
-> Maybe Bool
-> Int
-> [GuildMember]
-> [Channel]
-> [Channel]
-> [PresenceInfo]
-> [ScheduledEvent]
-> GuildCreateData
GuildCreateData (UTCTime
-> Bool
-> Maybe Bool
-> Int
-> [GuildMember]
-> [Channel]
-> [Channel]
-> [PresenceInfo]
-> [ScheduledEvent]
-> GuildCreateData)
-> Parser UTCTime
-> Parser
(Bool
-> Maybe Bool
-> Int
-> [GuildMember]
-> [Channel]
-> [Channel]
-> [PresenceInfo]
-> [ScheduledEvent]
-> GuildCreateData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser UTCTime
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"joined_at"
Parser
(Bool
-> Maybe Bool
-> Int
-> [GuildMember]
-> [Channel]
-> [Channel]
-> [PresenceInfo]
-> [ScheduledEvent]
-> GuildCreateData)
-> Parser Bool
-> Parser
(Maybe Bool
-> Int
-> [GuildMember]
-> [Channel]
-> [Channel]
-> [PresenceInfo]
-> [ScheduledEvent]
-> GuildCreateData)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"large"
Parser
(Maybe Bool
-> Int
-> [GuildMember]
-> [Channel]
-> [Channel]
-> [PresenceInfo]
-> [ScheduledEvent]
-> GuildCreateData)
-> Parser (Maybe Bool)
-> Parser
(Int
-> [GuildMember]
-> [Channel]
-> [Channel]
-> [PresenceInfo]
-> [ScheduledEvent]
-> GuildCreateData)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"unavailable"
Parser
(Int
-> [GuildMember]
-> [Channel]
-> [Channel]
-> [PresenceInfo]
-> [ScheduledEvent]
-> GuildCreateData)
-> Parser Int
-> Parser
([GuildMember]
-> [Channel]
-> [Channel]
-> [PresenceInfo]
-> [ScheduledEvent]
-> GuildCreateData)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"member_count"
Parser
([GuildMember]
-> [Channel]
-> [Channel]
-> [PresenceInfo]
-> [ScheduledEvent]
-> GuildCreateData)
-> Parser [GuildMember]
-> Parser
([Channel]
-> [Channel]
-> [PresenceInfo]
-> [ScheduledEvent]
-> GuildCreateData)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [GuildMember]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"members"
Parser
([Channel]
-> [Channel]
-> [PresenceInfo]
-> [ScheduledEvent]
-> GuildCreateData)
-> Parser [Channel]
-> Parser
([Channel]
-> [PresenceInfo] -> [ScheduledEvent] -> GuildCreateData)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser Channel) -> [Value] -> Parser [Channel]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> [a] -> f [b]
traverse Value -> Parser Channel
forall a. FromJSON a => Value -> Parser a
parseJSON [Value]
wellFormedChannels
Parser
([Channel]
-> [PresenceInfo] -> [ScheduledEvent] -> GuildCreateData)
-> Parser [Channel]
-> Parser ([PresenceInfo] -> [ScheduledEvent] -> GuildCreateData)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser Channel) -> [Value] -> Parser [Channel]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> [a] -> f [b]
traverse Value -> Parser Channel
forall a. FromJSON a => Value -> Parser a
parseJSON [Value]
wellFormedThreads
Parser ([PresenceInfo] -> [ScheduledEvent] -> GuildCreateData)
-> Parser [PresenceInfo]
-> Parser ([ScheduledEvent] -> GuildCreateData)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [PresenceInfo]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"presences"
Parser ([ScheduledEvent] -> GuildCreateData)
-> Parser [ScheduledEvent] -> Parser GuildCreateData
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [ScheduledEvent]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"guild_scheduled_events"
EventInternalParse -> Parser EventInternalParse
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (EventInternalParse -> Parser EventInternalParse)
-> EventInternalParse -> Parser EventInternalParse
forall a b. (a -> b) -> a -> b
$ Guild -> GuildCreateData -> EventInternalParse
InternalGuildCreate Guild
guild GuildCreateData
guildCreateData
data ReactionInfo = ReactionInfo
{ ReactionInfo -> UserId
reactionUserId :: UserId
, ReactionInfo -> Maybe GuildId
reactionGuildId :: Maybe GuildId
, ReactionInfo -> ChannelId
reactionChannelId :: ChannelId
, ReactionInfo -> MessageId
reactionMessageId :: MessageId
, ReactionInfo -> Emoji
reactionEmoji :: Emoji
} deriving (Int -> ReactionInfo -> ShowS
[ReactionInfo] -> ShowS
ReactionInfo -> String
(Int -> ReactionInfo -> ShowS)
-> (ReactionInfo -> String)
-> ([ReactionInfo] -> ShowS)
-> Show ReactionInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ReactionInfo -> ShowS
showsPrec :: Int -> ReactionInfo -> ShowS
$cshow :: ReactionInfo -> String
show :: ReactionInfo -> String
$cshowList :: [ReactionInfo] -> ShowS
showList :: [ReactionInfo] -> ShowS
Show, ReadPrec [ReactionInfo]
ReadPrec ReactionInfo
Int -> ReadS ReactionInfo
ReadS [ReactionInfo]
(Int -> ReadS ReactionInfo)
-> ReadS [ReactionInfo]
-> ReadPrec ReactionInfo
-> ReadPrec [ReactionInfo]
-> Read ReactionInfo
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS ReactionInfo
readsPrec :: Int -> ReadS ReactionInfo
$creadList :: ReadS [ReactionInfo]
readList :: ReadS [ReactionInfo]
$creadPrec :: ReadPrec ReactionInfo
readPrec :: ReadPrec ReactionInfo
$creadListPrec :: ReadPrec [ReactionInfo]
readListPrec :: ReadPrec [ReactionInfo]
Read, ReactionInfo -> ReactionInfo -> Bool
(ReactionInfo -> ReactionInfo -> Bool)
-> (ReactionInfo -> ReactionInfo -> Bool) -> Eq ReactionInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ReactionInfo -> ReactionInfo -> Bool
== :: ReactionInfo -> ReactionInfo -> Bool
$c/= :: ReactionInfo -> ReactionInfo -> Bool
/= :: ReactionInfo -> ReactionInfo -> Bool
Eq, Eq ReactionInfo
Eq ReactionInfo =>
(ReactionInfo -> ReactionInfo -> Ordering)
-> (ReactionInfo -> ReactionInfo -> Bool)
-> (ReactionInfo -> ReactionInfo -> Bool)
-> (ReactionInfo -> ReactionInfo -> Bool)
-> (ReactionInfo -> ReactionInfo -> Bool)
-> (ReactionInfo -> ReactionInfo -> ReactionInfo)
-> (ReactionInfo -> ReactionInfo -> ReactionInfo)
-> Ord ReactionInfo
ReactionInfo -> ReactionInfo -> Bool
ReactionInfo -> ReactionInfo -> Ordering
ReactionInfo -> ReactionInfo -> ReactionInfo
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: ReactionInfo -> ReactionInfo -> Ordering
compare :: ReactionInfo -> ReactionInfo -> Ordering
$c< :: ReactionInfo -> ReactionInfo -> Bool
< :: ReactionInfo -> ReactionInfo -> Bool
$c<= :: ReactionInfo -> ReactionInfo -> Bool
<= :: ReactionInfo -> ReactionInfo -> Bool
$c> :: ReactionInfo -> ReactionInfo -> Bool
> :: ReactionInfo -> ReactionInfo -> Bool
$c>= :: ReactionInfo -> ReactionInfo -> Bool
>= :: ReactionInfo -> ReactionInfo -> Bool
$cmax :: ReactionInfo -> ReactionInfo -> ReactionInfo
max :: ReactionInfo -> ReactionInfo -> ReactionInfo
$cmin :: ReactionInfo -> ReactionInfo -> ReactionInfo
min :: ReactionInfo -> ReactionInfo -> ReactionInfo
Ord)
instance FromJSON ReactionInfo where
parseJSON :: Value -> Parser ReactionInfo
parseJSON = String
-> (Object -> Parser ReactionInfo) -> Value -> Parser ReactionInfo
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"ReactionInfo" ((Object -> Parser ReactionInfo) -> Value -> Parser ReactionInfo)
-> (Object -> Parser ReactionInfo) -> Value -> Parser ReactionInfo
forall a b. (a -> b) -> a -> b
$ \Object
o ->
UserId
-> Maybe GuildId -> ChannelId -> MessageId -> Emoji -> ReactionInfo
ReactionInfo (UserId
-> Maybe GuildId
-> ChannelId
-> MessageId
-> Emoji
-> ReactionInfo)
-> Parser UserId
-> Parser
(Maybe GuildId -> ChannelId -> MessageId -> Emoji -> ReactionInfo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser UserId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"user_id"
Parser
(Maybe GuildId -> ChannelId -> MessageId -> Emoji -> ReactionInfo)
-> Parser (Maybe GuildId)
-> Parser (ChannelId -> MessageId -> Emoji -> ReactionInfo)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe GuildId)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"guild_id"
Parser (ChannelId -> MessageId -> Emoji -> ReactionInfo)
-> Parser ChannelId -> Parser (MessageId -> Emoji -> ReactionInfo)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser ChannelId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"channel_id"
Parser (MessageId -> Emoji -> ReactionInfo)
-> Parser MessageId -> Parser (Emoji -> ReactionInfo)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser MessageId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"message_id"
Parser (Emoji -> ReactionInfo)
-> Parser Emoji -> Parser ReactionInfo
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Emoji
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"emoji"
data ReactionRemoveInfo = ReactionRemoveInfo
{ ReactionRemoveInfo -> ChannelId
reactionRemoveChannelId :: ChannelId
, ReactionRemoveInfo -> GuildId
reactionRemoveGuildId :: GuildId
, ReactionRemoveInfo -> MessageId
reactionRemoveMessageId :: MessageId
, ReactionRemoveInfo -> Emoji
reactionRemoveEmoji :: Emoji
} deriving (Int -> ReactionRemoveInfo -> ShowS
[ReactionRemoveInfo] -> ShowS
ReactionRemoveInfo -> String
(Int -> ReactionRemoveInfo -> ShowS)
-> (ReactionRemoveInfo -> String)
-> ([ReactionRemoveInfo] -> ShowS)
-> Show ReactionRemoveInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ReactionRemoveInfo -> ShowS
showsPrec :: Int -> ReactionRemoveInfo -> ShowS
$cshow :: ReactionRemoveInfo -> String
show :: ReactionRemoveInfo -> String
$cshowList :: [ReactionRemoveInfo] -> ShowS
showList :: [ReactionRemoveInfo] -> ShowS
Show, ReadPrec [ReactionRemoveInfo]
ReadPrec ReactionRemoveInfo
Int -> ReadS ReactionRemoveInfo
ReadS [ReactionRemoveInfo]
(Int -> ReadS ReactionRemoveInfo)
-> ReadS [ReactionRemoveInfo]
-> ReadPrec ReactionRemoveInfo
-> ReadPrec [ReactionRemoveInfo]
-> Read ReactionRemoveInfo
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS ReactionRemoveInfo
readsPrec :: Int -> ReadS ReactionRemoveInfo
$creadList :: ReadS [ReactionRemoveInfo]
readList :: ReadS [ReactionRemoveInfo]
$creadPrec :: ReadPrec ReactionRemoveInfo
readPrec :: ReadPrec ReactionRemoveInfo
$creadListPrec :: ReadPrec [ReactionRemoveInfo]
readListPrec :: ReadPrec [ReactionRemoveInfo]
Read, ReactionRemoveInfo -> ReactionRemoveInfo -> Bool
(ReactionRemoveInfo -> ReactionRemoveInfo -> Bool)
-> (ReactionRemoveInfo -> ReactionRemoveInfo -> Bool)
-> Eq ReactionRemoveInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ReactionRemoveInfo -> ReactionRemoveInfo -> Bool
== :: ReactionRemoveInfo -> ReactionRemoveInfo -> Bool
$c/= :: ReactionRemoveInfo -> ReactionRemoveInfo -> Bool
/= :: ReactionRemoveInfo -> ReactionRemoveInfo -> Bool
Eq, Eq ReactionRemoveInfo
Eq ReactionRemoveInfo =>
(ReactionRemoveInfo -> ReactionRemoveInfo -> Ordering)
-> (ReactionRemoveInfo -> ReactionRemoveInfo -> Bool)
-> (ReactionRemoveInfo -> ReactionRemoveInfo -> Bool)
-> (ReactionRemoveInfo -> ReactionRemoveInfo -> Bool)
-> (ReactionRemoveInfo -> ReactionRemoveInfo -> Bool)
-> (ReactionRemoveInfo -> ReactionRemoveInfo -> ReactionRemoveInfo)
-> (ReactionRemoveInfo -> ReactionRemoveInfo -> ReactionRemoveInfo)
-> Ord ReactionRemoveInfo
ReactionRemoveInfo -> ReactionRemoveInfo -> Bool
ReactionRemoveInfo -> ReactionRemoveInfo -> Ordering
ReactionRemoveInfo -> ReactionRemoveInfo -> ReactionRemoveInfo
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: ReactionRemoveInfo -> ReactionRemoveInfo -> Ordering
compare :: ReactionRemoveInfo -> ReactionRemoveInfo -> Ordering
$c< :: ReactionRemoveInfo -> ReactionRemoveInfo -> Bool
< :: ReactionRemoveInfo -> ReactionRemoveInfo -> Bool
$c<= :: ReactionRemoveInfo -> ReactionRemoveInfo -> Bool
<= :: ReactionRemoveInfo -> ReactionRemoveInfo -> Bool
$c> :: ReactionRemoveInfo -> ReactionRemoveInfo -> Bool
> :: ReactionRemoveInfo -> ReactionRemoveInfo -> Bool
$c>= :: ReactionRemoveInfo -> ReactionRemoveInfo -> Bool
>= :: ReactionRemoveInfo -> ReactionRemoveInfo -> Bool
$cmax :: ReactionRemoveInfo -> ReactionRemoveInfo -> ReactionRemoveInfo
max :: ReactionRemoveInfo -> ReactionRemoveInfo -> ReactionRemoveInfo
$cmin :: ReactionRemoveInfo -> ReactionRemoveInfo -> ReactionRemoveInfo
min :: ReactionRemoveInfo -> ReactionRemoveInfo -> ReactionRemoveInfo
Ord)
instance FromJSON ReactionRemoveInfo where
parseJSON :: Value -> Parser ReactionRemoveInfo
parseJSON = String
-> (Object -> Parser ReactionRemoveInfo)
-> Value
-> Parser ReactionRemoveInfo
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"ReactionRemoveInfo" ((Object -> Parser ReactionRemoveInfo)
-> Value -> Parser ReactionRemoveInfo)
-> (Object -> Parser ReactionRemoveInfo)
-> Value
-> Parser ReactionRemoveInfo
forall a b. (a -> b) -> a -> b
$ \Object
o ->
ChannelId -> GuildId -> MessageId -> Emoji -> ReactionRemoveInfo
ReactionRemoveInfo (ChannelId -> GuildId -> MessageId -> Emoji -> ReactionRemoveInfo)
-> Parser ChannelId
-> Parser (GuildId -> MessageId -> Emoji -> ReactionRemoveInfo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser ChannelId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"guild_id"
Parser (GuildId -> MessageId -> Emoji -> ReactionRemoveInfo)
-> Parser GuildId
-> Parser (MessageId -> Emoji -> ReactionRemoveInfo)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser GuildId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"channel_id"
Parser (MessageId -> Emoji -> ReactionRemoveInfo)
-> Parser MessageId -> Parser (Emoji -> ReactionRemoveInfo)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser MessageId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"message_id"
Parser (Emoji -> ReactionRemoveInfo)
-> Parser Emoji -> Parser ReactionRemoveInfo
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Emoji
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"emoji"
data TypingInfo = TypingInfo
{ TypingInfo -> UserId
typingUserId :: UserId
, TypingInfo -> ChannelId
typingChannelId :: ChannelId
, TypingInfo -> UTCTime
typingTimestamp :: UTCTime
} deriving (Int -> TypingInfo -> ShowS
[TypingInfo] -> ShowS
TypingInfo -> String
(Int -> TypingInfo -> ShowS)
-> (TypingInfo -> String)
-> ([TypingInfo] -> ShowS)
-> Show TypingInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TypingInfo -> ShowS
showsPrec :: Int -> TypingInfo -> ShowS
$cshow :: TypingInfo -> String
show :: TypingInfo -> String
$cshowList :: [TypingInfo] -> ShowS
showList :: [TypingInfo] -> ShowS
Show, ReadPrec [TypingInfo]
ReadPrec TypingInfo
Int -> ReadS TypingInfo
ReadS [TypingInfo]
(Int -> ReadS TypingInfo)
-> ReadS [TypingInfo]
-> ReadPrec TypingInfo
-> ReadPrec [TypingInfo]
-> Read TypingInfo
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS TypingInfo
readsPrec :: Int -> ReadS TypingInfo
$creadList :: ReadS [TypingInfo]
readList :: ReadS [TypingInfo]
$creadPrec :: ReadPrec TypingInfo
readPrec :: ReadPrec TypingInfo
$creadListPrec :: ReadPrec [TypingInfo]
readListPrec :: ReadPrec [TypingInfo]
Read, TypingInfo -> TypingInfo -> Bool
(TypingInfo -> TypingInfo -> Bool)
-> (TypingInfo -> TypingInfo -> Bool) -> Eq TypingInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TypingInfo -> TypingInfo -> Bool
== :: TypingInfo -> TypingInfo -> Bool
$c/= :: TypingInfo -> TypingInfo -> Bool
/= :: TypingInfo -> TypingInfo -> Bool
Eq, Eq TypingInfo
Eq TypingInfo =>
(TypingInfo -> TypingInfo -> Ordering)
-> (TypingInfo -> TypingInfo -> Bool)
-> (TypingInfo -> TypingInfo -> Bool)
-> (TypingInfo -> TypingInfo -> Bool)
-> (TypingInfo -> TypingInfo -> Bool)
-> (TypingInfo -> TypingInfo -> TypingInfo)
-> (TypingInfo -> TypingInfo -> TypingInfo)
-> Ord TypingInfo
TypingInfo -> TypingInfo -> Bool
TypingInfo -> TypingInfo -> Ordering
TypingInfo -> TypingInfo -> TypingInfo
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: TypingInfo -> TypingInfo -> Ordering
compare :: TypingInfo -> TypingInfo -> Ordering
$c< :: TypingInfo -> TypingInfo -> Bool
< :: TypingInfo -> TypingInfo -> Bool
$c<= :: TypingInfo -> TypingInfo -> Bool
<= :: TypingInfo -> TypingInfo -> Bool
$c> :: TypingInfo -> TypingInfo -> Bool
> :: TypingInfo -> TypingInfo -> Bool
$c>= :: TypingInfo -> TypingInfo -> Bool
>= :: TypingInfo -> TypingInfo -> Bool
$cmax :: TypingInfo -> TypingInfo -> TypingInfo
max :: TypingInfo -> TypingInfo -> TypingInfo
$cmin :: TypingInfo -> TypingInfo -> TypingInfo
min :: TypingInfo -> TypingInfo -> TypingInfo
Ord)
instance FromJSON TypingInfo where
parseJSON :: Value -> Parser TypingInfo
parseJSON = String
-> (Object -> Parser TypingInfo) -> Value -> Parser TypingInfo
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"TypingInfo" ((Object -> Parser TypingInfo) -> Value -> Parser TypingInfo)
-> (Object -> Parser TypingInfo) -> Value -> Parser TypingInfo
forall a b. (a -> b) -> a -> b
$ \Object
o ->
do ChannelId
cid <- Object
o Object -> Key -> Parser ChannelId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"channel_id"
UserId
uid <- Object
o Object -> Key -> Parser UserId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"user_id"
POSIXTime
posix <- Object
o Object -> Key -> Parser POSIXTime
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"timestamp"
let utc :: UTCTime
utc = POSIXTime -> UTCTime
posixSecondsToUTCTime POSIXTime
posix
TypingInfo -> Parser TypingInfo
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (UserId -> ChannelId -> UTCTime -> TypingInfo
TypingInfo UserId
uid ChannelId
cid UTCTime
utc)
reparse :: (ToJSON a, FromJSON b) => a -> Parser b
reparse :: forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse a
val = case (Value -> Parser b) -> Value -> Either String b
forall a b. (a -> Parser b) -> a -> Either String b
parseEither Value -> Parser b
forall a. FromJSON a => Value -> Parser a
parseJSON (Value -> Either String b) -> Value -> Either String b
forall a b. (a -> b) -> a -> b
$ a -> Value
forall a. ToJSON a => a -> Value
toJSON a
val of
Left String
r -> String -> Parser b
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
r
Right b
b -> b -> Parser b
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure b
b
extractHostname :: String -> HostName
(Char
'w':Char
's':Char
's':Char
':':Char
'/':Char
'/':String
rest) = ShowS
extractHostname String
rest
extractHostname String
"/" = []
extractHostname (Char
a:String
b) = Char
aChar -> ShowS
forall a. a -> [a] -> [a]
:ShowS
extractHostname String
b
extractHostname [] = []
eventParse :: T.Text -> Object -> Parser EventInternalParse
eventParse :: Text -> Object -> Parser EventInternalParse
eventParse Text
t Object
o = case Text
t of
Text
"READY" -> Int
-> User
-> [GuildUnavailable]
-> Text
-> String
-> Maybe Shard
-> PartialApplication
-> EventInternalParse
InternalReady (Int
-> User
-> [GuildUnavailable]
-> Text
-> String
-> Maybe Shard
-> PartialApplication
-> EventInternalParse)
-> Parser Int
-> Parser
(User
-> [GuildUnavailable]
-> Text
-> String
-> Maybe Shard
-> PartialApplication
-> EventInternalParse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"v"
Parser
(User
-> [GuildUnavailable]
-> Text
-> String
-> Maybe Shard
-> PartialApplication
-> EventInternalParse)
-> Parser User
-> Parser
([GuildUnavailable]
-> Text
-> String
-> Maybe Shard
-> PartialApplication
-> EventInternalParse)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser User
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"user"
Parser
([GuildUnavailable]
-> Text
-> String
-> Maybe Shard
-> PartialApplication
-> EventInternalParse)
-> Parser [GuildUnavailable]
-> Parser
(Text
-> String
-> Maybe Shard
-> PartialApplication
-> EventInternalParse)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [GuildUnavailable]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"guilds"
Parser
(Text
-> String
-> Maybe Shard
-> PartialApplication
-> EventInternalParse)
-> Parser Text
-> Parser
(String -> Maybe Shard -> PartialApplication -> EventInternalParse)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"session_id"
Parser
(String -> Maybe Shard -> PartialApplication -> EventInternalParse)
-> Parser String
-> Parser (Maybe Shard -> PartialApplication -> EventInternalParse)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (ShowS
extractHostname ShowS -> Parser String -> Parser String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser String
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"resume_gateway_url")
Parser (Maybe Shard -> PartialApplication -> EventInternalParse)
-> Parser (Maybe Shard)
-> Parser (PartialApplication -> EventInternalParse)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Shard)
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"shard"
Parser (PartialApplication -> EventInternalParse)
-> Parser PartialApplication -> Parser EventInternalParse
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser PartialApplication
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"application"
Text
"RESUMED" -> [Text] -> EventInternalParse
InternalResumed ([Text] -> EventInternalParse)
-> Parser [Text] -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser [Text]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"_trace"
Text
"CHANNEL_CREATE" -> Channel -> EventInternalParse
InternalChannelCreate (Channel -> EventInternalParse)
-> Parser Channel -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser Channel
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
"CHANNEL_UPDATE" -> Channel -> EventInternalParse
InternalChannelUpdate (Channel -> EventInternalParse)
-> Parser Channel -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser Channel
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
"CHANNEL_DELETE" -> Channel -> EventInternalParse
InternalChannelDelete (Channel -> EventInternalParse)
-> Parser Channel -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser Channel
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
"THREAD_CREATE" -> Channel -> EventInternalParse
InternalThreadCreate (Channel -> EventInternalParse)
-> Parser Channel -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser Channel
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
"THREAD_UPDATE" -> Channel -> EventInternalParse
InternalThreadUpdate (Channel -> EventInternalParse)
-> Parser Channel -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser Channel
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
"THREAD_MEMBER_UPDATE" -> ThreadMemberUpdateFields -> EventInternalParse
InternalThreadMemberUpdate (ThreadMemberUpdateFields -> EventInternalParse)
-> Parser ThreadMemberUpdateFields -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser ThreadMemberUpdateFields
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
"THREAD_DELETE" -> Channel -> EventInternalParse
InternalThreadDelete (Channel -> EventInternalParse)
-> Parser Channel -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser Channel
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
"THREAD_LIST_SYNC" -> ThreadListSyncFields -> EventInternalParse
InternalThreadListSync (ThreadListSyncFields -> EventInternalParse)
-> Parser ThreadListSyncFields -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser ThreadListSyncFields
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
"THREAD_MEMBERS_UPDATE" -> ThreadMembersUpdateFields -> EventInternalParse
InternalThreadMembersUpdate (ThreadMembersUpdateFields -> EventInternalParse)
-> Parser ThreadMembersUpdateFields -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser ThreadMembersUpdateFields
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
"CHANNEL_PINS_UPDATE" -> do ChannelId
id <- Object
o Object -> Key -> Parser ChannelId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"channel_id"
Maybe String
stamp <- Object
o Object -> Key -> Parser (Maybe String)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"last_pin_timestamp"
let utc :: Maybe UTCTime
utc = Maybe String
stamp Maybe String -> (String -> Maybe UTCTime) -> Maybe UTCTime
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> Maybe UTCTime
parseISO8601
EventInternalParse -> Parser EventInternalParse
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ChannelId -> Maybe UTCTime -> EventInternalParse
InternalChannelPinsUpdate ChannelId
id Maybe UTCTime
utc)
Text
"GUILD_CREATE" -> Object -> Parser EventInternalParse
parseGuildCreate Object
o
Text
"GUILD_UPDATE" -> Guild -> EventInternalParse
InternalGuildUpdate (Guild -> EventInternalParse)
-> Parser Guild -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser Guild
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
"GUILD_DELETE" -> GuildUnavailable -> EventInternalParse
InternalGuildDelete (GuildUnavailable -> EventInternalParse)
-> Parser GuildUnavailable -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser GuildUnavailable
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
"GUILD_BAN_ADD" -> GuildId -> User -> EventInternalParse
InternalGuildBanAdd (GuildId -> User -> EventInternalParse)
-> Parser GuildId -> Parser (User -> EventInternalParse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser GuildId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"guild_id" Parser (User -> EventInternalParse)
-> Parser User -> Parser EventInternalParse
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser User
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"user"
Text
"GUILD_BAN_REMOVE" -> GuildId -> User -> EventInternalParse
InternalGuildBanRemove (GuildId -> User -> EventInternalParse)
-> Parser GuildId -> Parser (User -> EventInternalParse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser GuildId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"guild_id" Parser (User -> EventInternalParse)
-> Parser User -> Parser EventInternalParse
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser User
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"user"
Text
"GUILD_EMOJI_UPDATE" -> GuildId -> [Emoji] -> EventInternalParse
InternalGuildEmojiUpdate (GuildId -> [Emoji] -> EventInternalParse)
-> Parser GuildId -> Parser ([Emoji] -> EventInternalParse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser GuildId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"guild_id" Parser ([Emoji] -> EventInternalParse)
-> Parser [Emoji] -> Parser EventInternalParse
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [Emoji]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"emojis"
Text
"GUILD_INTEGRATIONS_UPDATE" -> GuildId -> EventInternalParse
InternalGuildIntegrationsUpdate (GuildId -> EventInternalParse)
-> Parser GuildId -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser GuildId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"guild_id"
Text
"GUILD_MEMBER_ADD" -> GuildId -> GuildMember -> EventInternalParse
InternalGuildMemberAdd (GuildId -> GuildMember -> EventInternalParse)
-> Parser GuildId -> Parser (GuildMember -> EventInternalParse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser GuildId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"guild_id" Parser (GuildMember -> EventInternalParse)
-> Parser GuildMember -> Parser EventInternalParse
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object -> Parser GuildMember
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
"GUILD_MEMBER_REMOVE" -> GuildId -> User -> EventInternalParse
InternalGuildMemberRemove (GuildId -> User -> EventInternalParse)
-> Parser GuildId -> Parser (User -> EventInternalParse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser GuildId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"guild_id" Parser (User -> EventInternalParse)
-> Parser User -> Parser EventInternalParse
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser User
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"user"
Text
"GUILD_MEMBER_UPDATE" -> GuildId -> [RoleId] -> User -> Maybe Text -> EventInternalParse
InternalGuildMemberUpdate (GuildId -> [RoleId] -> User -> Maybe Text -> EventInternalParse)
-> Parser GuildId
-> Parser ([RoleId] -> User -> Maybe Text -> EventInternalParse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser GuildId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"guild_id"
Parser ([RoleId] -> User -> Maybe Text -> EventInternalParse)
-> Parser [RoleId]
-> Parser (User -> Maybe Text -> EventInternalParse)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [RoleId]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"roles"
Parser (User -> Maybe Text -> EventInternalParse)
-> Parser User -> Parser (Maybe Text -> EventInternalParse)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser User
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"user"
Parser (Maybe Text -> EventInternalParse)
-> Parser (Maybe Text) -> Parser EventInternalParse
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"nick"
Text
"GUILD_MEMBERS_CHUNK" -> GuildId -> [GuildMember] -> EventInternalParse
InternalGuildMemberChunk (GuildId -> [GuildMember] -> EventInternalParse)
-> Parser GuildId -> Parser ([GuildMember] -> EventInternalParse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser GuildId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"guild_id" Parser ([GuildMember] -> EventInternalParse)
-> Parser [GuildMember] -> Parser EventInternalParse
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [GuildMember]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"members"
Text
"GUILD_ROLE_CREATE" -> GuildId -> Role -> EventInternalParse
InternalGuildRoleCreate (GuildId -> Role -> EventInternalParse)
-> Parser GuildId -> Parser (Role -> EventInternalParse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser GuildId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"guild_id" Parser (Role -> EventInternalParse)
-> Parser Role -> Parser EventInternalParse
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Role
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"role"
Text
"GUILD_ROLE_UPDATE" -> GuildId -> Role -> EventInternalParse
InternalGuildRoleUpdate (GuildId -> Role -> EventInternalParse)
-> Parser GuildId -> Parser (Role -> EventInternalParse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser GuildId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"guild_id" Parser (Role -> EventInternalParse)
-> Parser Role -> Parser EventInternalParse
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Role
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"role"
Text
"GUILD_ROLE_DELETE" -> GuildId -> RoleId -> EventInternalParse
InternalGuildRoleDelete (GuildId -> RoleId -> EventInternalParse)
-> Parser GuildId -> Parser (RoleId -> EventInternalParse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser GuildId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"guild_id" Parser (RoleId -> EventInternalParse)
-> Parser RoleId -> Parser EventInternalParse
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser RoleId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"role_id"
Text
"MESSAGE_CREATE" -> Message -> EventInternalParse
InternalMessageCreate (Message -> EventInternalParse)
-> Parser Message -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser Message
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
"MESSAGE_UPDATE" -> ChannelId -> MessageId -> EventInternalParse
InternalMessageUpdate (ChannelId -> MessageId -> EventInternalParse)
-> Parser ChannelId -> Parser (MessageId -> EventInternalParse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser ChannelId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"channel_id" Parser (MessageId -> EventInternalParse)
-> Parser MessageId -> Parser EventInternalParse
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser MessageId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
Text
"MESSAGE_DELETE" -> ChannelId -> MessageId -> EventInternalParse
InternalMessageDelete (ChannelId -> MessageId -> EventInternalParse)
-> Parser ChannelId -> Parser (MessageId -> EventInternalParse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser ChannelId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"channel_id" Parser (MessageId -> EventInternalParse)
-> Parser MessageId -> Parser EventInternalParse
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser MessageId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
Text
"MESSAGE_DELETE_BULK" -> ChannelId -> [MessageId] -> EventInternalParse
InternalMessageDeleteBulk (ChannelId -> [MessageId] -> EventInternalParse)
-> Parser ChannelId -> Parser ([MessageId] -> EventInternalParse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser ChannelId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"channel_id" Parser ([MessageId] -> EventInternalParse)
-> Parser [MessageId] -> Parser EventInternalParse
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [MessageId]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"ids"
Text
"MESSAGE_REACTION_ADD" -> ReactionInfo -> EventInternalParse
InternalMessageReactionAdd (ReactionInfo -> EventInternalParse)
-> Parser ReactionInfo -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser ReactionInfo
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
"MESSAGE_REACTION_REMOVE" -> ReactionInfo -> EventInternalParse
InternalMessageReactionRemove (ReactionInfo -> EventInternalParse)
-> Parser ReactionInfo -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser ReactionInfo
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
"MESSAGE_REACTION_REMOVE_ALL" -> ChannelId -> MessageId -> EventInternalParse
InternalMessageReactionRemoveAll (ChannelId -> MessageId -> EventInternalParse)
-> Parser ChannelId -> Parser (MessageId -> EventInternalParse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser ChannelId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"channel_id"
Parser (MessageId -> EventInternalParse)
-> Parser MessageId -> Parser EventInternalParse
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser MessageId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"message_id"
Text
"MESSAGE_REACTION_REMOVE_EMOJI" -> ReactionRemoveInfo -> EventInternalParse
InternalMessageReactionRemoveEmoji (ReactionRemoveInfo -> EventInternalParse)
-> Parser ReactionRemoveInfo -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser ReactionRemoveInfo
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
"PRESENCE_UPDATE" -> PresenceInfo -> EventInternalParse
InternalPresenceUpdate (PresenceInfo -> EventInternalParse)
-> Parser PresenceInfo -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser PresenceInfo
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
"TYPING_START" -> TypingInfo -> EventInternalParse
InternalTypingStart (TypingInfo -> EventInternalParse)
-> Parser TypingInfo -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser TypingInfo
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
"USER_UPDATE" -> User -> EventInternalParse
InternalUserUpdate (User -> EventInternalParse)
-> Parser User -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser User
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
"INTERACTION_CREATE" -> Interaction -> EventInternalParse
InternalInteractionCreate (Interaction -> EventInternalParse)
-> Parser Interaction -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser Interaction
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o
Text
_other_event -> Text -> Object -> EventInternalParse
InternalUnknownEvent Text
t (Object -> EventInternalParse)
-> Parser Object -> Parser EventInternalParse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object -> Parser Object
forall a b. (ToJSON a, FromJSON b) => a -> Parser b
reparse Object
o