-- | Provides types and encoding/decoding code. Types should be identical to those provided
--   in the Discord API documentation.
module Discord.Internal.Types
  ( module Discord.Internal.Types.Prelude
  , module Discord.Internal.Types.Channel
  , 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 Data.Aeson
  , module Data.Time.Clock
  , userFacingEvent
  ) where

import Discord.Internal.Types.Channel
import Discord.Internal.Types.Events
import Discord.Internal.Types.Gateway
import Discord.Internal.Types.Guild
import Discord.Internal.Types.User
import Discord.Internal.Types.Embed
import Discord.Internal.Types.Prelude

import Data.Aeson (Object)
import Data.Time.Clock (UTCTime(..))


userFacingEvent :: EventInternalParse -> Event
userFacingEvent :: EventInternalParse -> Event
userFacingEvent EventInternalParse
event = case EventInternalParse
event of
  InternalReady Int
a User
b [Channel]
c [GuildUnavailable]
d Text
e -> Int -> User -> [Channel] -> [GuildUnavailable] -> Text -> Event
Ready Int
a User
b [Channel]
c [GuildUnavailable]
d Text
e
  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
  InternalChannelPinsUpdate ChannelId
a Maybe UTCTime
b -> ChannelId -> Maybe UTCTime -> Event
ChannelPinsUpdate ChannelId
a Maybe UTCTime
b
  InternalGuildCreate Guild
a GuildInfo
b -> Guild -> GuildInfo -> Event
GuildCreate Guild
a GuildInfo
b
  InternalGuildUpdate Guild
a -> Guild -> Event
GuildUpdate Guild
a
  InternalGuildDelete GuildUnavailable
a -> GuildUnavailable -> Event
GuildDelete GuildUnavailable
a
  InternalGuildBanAdd ChannelId
a User
b -> ChannelId -> User -> Event
GuildBanAdd ChannelId
a User
b
  InternalGuildBanRemove ChannelId
a User
b -> ChannelId -> User -> Event
GuildBanRemove ChannelId
a User
b
  InternalGuildEmojiUpdate ChannelId
a [Emoji]
b -> ChannelId -> [Emoji] -> Event
GuildEmojiUpdate ChannelId
a [Emoji]
b
  InternalGuildIntegrationsUpdate ChannelId
a -> ChannelId -> Event
GuildIntegrationsUpdate ChannelId
a
  InternalGuildMemberAdd ChannelId
a GuildMember
b -> ChannelId -> GuildMember -> Event
GuildMemberAdd ChannelId
a GuildMember
b
  InternalGuildMemberRemove ChannelId
a User
b -> ChannelId -> User -> Event
GuildMemberRemove ChannelId
a User
b
  InternalGuildMemberUpdate ChannelId
a [ChannelId]
b User
c Maybe Text
d -> ChannelId -> [ChannelId] -> User -> Maybe Text -> Event
GuildMemberUpdate ChannelId
a [ChannelId]
b User
c Maybe Text
d
  InternalGuildMemberChunk ChannelId
a [GuildMember]
b -> ChannelId -> [GuildMember] -> Event
GuildMemberChunk ChannelId
a [GuildMember]
b
  InternalGuildRoleCreate ChannelId
a Role
b -> ChannelId -> Role -> Event
GuildRoleCreate ChannelId
a Role
b
  InternalGuildRoleUpdate ChannelId
a Role
b -> ChannelId -> Role -> Event
GuildRoleUpdate ChannelId
a Role
b
  InternalGuildRoleDelete ChannelId
a ChannelId
b -> ChannelId -> ChannelId -> Event
GuildRoleDelete ChannelId
a ChannelId
b
  InternalMessageCreate Message
a -> Message -> Event
MessageCreate Message
a
  InternalMessageUpdate ChannelId
a ChannelId
b -> ChannelId -> ChannelId -> Event
MessageUpdate ChannelId
a ChannelId
b
  InternalMessageDelete ChannelId
a ChannelId
b -> ChannelId -> ChannelId -> Event
MessageDelete ChannelId
a ChannelId
b
  InternalMessageDeleteBulk ChannelId
a [ChannelId]
b -> ChannelId -> [ChannelId] -> Event
MessageDeleteBulk ChannelId
a [ChannelId]
b
  InternalMessageReactionAdd ReactionInfo
a -> ReactionInfo -> Event
MessageReactionAdd ReactionInfo
a
  InternalMessageReactionRemove ReactionInfo
a -> ReactionInfo -> Event
MessageReactionRemove ReactionInfo
a
  InternalMessageReactionRemoveAll ChannelId
a ChannelId
b -> ChannelId -> ChannelId -> Event
MessageReactionRemoveAll ChannelId
a ChannelId
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
  InternalUnknownEvent Text
a Object
b -> Text -> Object -> Event
UnknownEvent Text
a Object
b