-- | 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 Discord.Internal.Types.RolePermissions,
    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
import Discord.Internal.Types.RolePermissions

-- | 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 GuildCreateData
b -> Guild -> GuildCreateData -> Event
GuildCreate Guild
a GuildCreateData
b
  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