-- | Re-export ALL the internal type modules. Hiding is in Discord.Types
module Discord.Internal.Types
  ( module Discord.Internal.Types.Prelude,
    module Discord.Internal.Types.Channel,
    module Discord.Internal.Types.Color,
    module Discord.Internal.Types.Events,
    module Discord.Internal.Types.Gateway,
    module Discord.Internal.Types.Guild,
    module Discord.Internal.Types.User,
    module Discord.Internal.Types.Embed,
    module Discord.Internal.Types.Components,
    module Discord.Internal.Types.Emoji,
    module Data.Aeson,
    module Data.Time.Clock,
    userFacingEvent,
  )
where

import Data.Aeson (Object, ToJSON (toJSON))
import Data.Time.Clock (UTCTime (..))
import Discord.Internal.Types.Channel
import Discord.Internal.Types.Color
import Discord.Internal.Types.Components
import Discord.Internal.Types.Embed
import Discord.Internal.Types.Emoji
import Discord.Internal.Types.Events
import Discord.Internal.Types.Gateway
import Discord.Internal.Types.Guild
import Discord.Internal.Types.Prelude
import Discord.Internal.Types.User

-- | Converts an internal event to its user facing counterpart
userFacingEvent :: EventInternalParse -> Event
userFacingEvent :: EventInternalParse -> Event
userFacingEvent EventInternalParse
event = case EventInternalParse
event of
  InternalReady Int
a User
b [GuildUnavailable]
c Text
d HostName
e Maybe Shard
f PartialApplication
g -> Int
-> User
-> [GuildUnavailable]
-> Text
-> HostName
-> Maybe Shard
-> PartialApplication
-> Event
Ready Int
a User
b [GuildUnavailable]
c Text
d HostName
e Maybe Shard
f PartialApplication
g
  InternalResumed [Text]
a -> [Text] -> Event
Resumed [Text]
a
  InternalChannelCreate Channel
a -> Channel -> Event
ChannelCreate Channel
a
  InternalChannelUpdate Channel
a -> Channel -> Event
ChannelUpdate Channel
a
  InternalChannelDelete Channel
a -> Channel -> Event
ChannelDelete Channel
a
  InternalThreadCreate Channel
a -> Channel -> Event
ThreadCreate Channel
a
  InternalThreadUpdate Channel
a -> Channel -> Event
ThreadUpdate Channel
a
  InternalThreadDelete Channel
a -> Channel -> Event
ThreadDelete Channel
a
  InternalThreadListSync ThreadListSyncFields
a -> ThreadListSyncFields -> Event
ThreadListSync ThreadListSyncFields
a
  InternalThreadMembersUpdate ThreadMembersUpdateFields
a -> ThreadMembersUpdateFields -> Event
ThreadMembersUpdate ThreadMembersUpdateFields
a
  InternalChannelPinsUpdate ChannelId
a Maybe UTCTime
b -> ChannelId -> Maybe UTCTime -> Event
ChannelPinsUpdate ChannelId
a Maybe UTCTime
b
  InternalGuildCreate Guild
a -> Guild -> Event
GuildCreate Guild
a
  InternalGuildUpdate Guild
a -> Guild -> Event
GuildUpdate Guild
a
  InternalGuildDelete GuildUnavailable
a -> GuildUnavailable -> Event
GuildDelete GuildUnavailable
a
  InternalGuildBanAdd GuildId
a User
b -> GuildId -> User -> Event
GuildBanAdd GuildId
a User
b
  InternalGuildBanRemove GuildId
a User
b -> GuildId -> User -> Event
GuildBanRemove GuildId
a User
b
  InternalGuildEmojiUpdate GuildId
a [Emoji]
b -> GuildId -> [Emoji] -> Event
GuildEmojiUpdate GuildId
a [Emoji]
b
  InternalGuildIntegrationsUpdate GuildId
a -> GuildId -> Event
GuildIntegrationsUpdate GuildId
a
  InternalGuildMemberAdd GuildId
a GuildMember
b -> GuildId -> GuildMember -> Event
GuildMemberAdd GuildId
a GuildMember
b
  InternalGuildMemberRemove GuildId
a User
b -> GuildId -> User -> Event
GuildMemberRemove GuildId
a User
b
  InternalGuildMemberUpdate GuildId
a [RoleId]
b User
c Maybe Text
d -> GuildId -> [RoleId] -> User -> Maybe Text -> Event
GuildMemberUpdate GuildId
a [RoleId]
b User
c Maybe Text
d
  InternalGuildMemberChunk GuildId
a [GuildMember]
b -> GuildId -> [GuildMember] -> Event
GuildMemberChunk GuildId
a [GuildMember]
b
  InternalGuildRoleCreate GuildId
a Role
b -> GuildId -> Role -> Event
GuildRoleCreate GuildId
a Role
b
  InternalGuildRoleUpdate GuildId
a Role
b -> GuildId -> Role -> Event
GuildRoleUpdate GuildId
a Role
b
  InternalGuildRoleDelete GuildId
a RoleId
b -> GuildId -> RoleId -> Event
GuildRoleDelete GuildId
a RoleId
b
  InternalMessageCreate Message
a -> Message -> Event
MessageCreate Message
a
  InternalMessageUpdate ChannelId
a MessageId
b -> ChannelId -> MessageId -> Event
MessageUpdate ChannelId
a MessageId
b
  InternalMessageDelete ChannelId
a MessageId
b -> ChannelId -> MessageId -> Event
MessageDelete ChannelId
a MessageId
b
  InternalMessageDeleteBulk ChannelId
a [MessageId]
b -> ChannelId -> [MessageId] -> Event
MessageDeleteBulk ChannelId
a [MessageId]
b
  InternalMessageReactionAdd ReactionInfo
a -> ReactionInfo -> Event
MessageReactionAdd ReactionInfo
a
  InternalMessageReactionRemove ReactionInfo
a -> ReactionInfo -> Event
MessageReactionRemove ReactionInfo
a
  InternalMessageReactionRemoveAll ChannelId
a MessageId
b -> ChannelId -> MessageId -> Event
MessageReactionRemoveAll ChannelId
a MessageId
b
  InternalMessageReactionRemoveEmoji ReactionRemoveInfo
a -> ReactionRemoveInfo -> Event
MessageReactionRemoveEmoji ReactionRemoveInfo
a
  InternalPresenceUpdate PresenceInfo
a -> PresenceInfo -> Event
PresenceUpdate PresenceInfo
a
  InternalTypingStart TypingInfo
a -> TypingInfo -> Event
TypingStart TypingInfo
a
  InternalUserUpdate User
a -> User -> Event
UserUpdate User
a
  InternalInteractionCreate Interaction
a -> Interaction -> Event
InteractionCreate Interaction
a
  InternalUnknownEvent Text
a Object
b -> Text -> Object -> Event
UnknownEvent Text
a Object
b