{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
module Discord.Internal.Types.Channel where
import Control.Applicative (empty)
import Data.Aeson
import Data.Aeson.Types (Parser)
import Data.Default (Default, def)
import Data.Text (Text)
import Data.Time.Clock
import qualified Data.Text as T
import Discord.Internal.Types.Prelude
import Discord.Internal.Types.User (User(..))
import Discord.Internal.Types.Embed
data Channel
= ChannelText
{ Channel -> ChannelId
channelId :: ChannelId
, Channel -> ChannelId
channelGuild :: GuildId
, Channel -> Text
channelName :: T.Text
, Channel -> Integer
channelPosition :: Integer
, Channel -> [Overwrite]
channelPermissions :: [Overwrite]
, Channel -> Integer
channelUserRateLimit :: Integer
, Channel -> Bool
channelNSFW :: Bool
, Channel -> Text
channelTopic :: T.Text
, Channel -> Maybe ChannelId
channelLastMessage :: Maybe MessageId
, Channel -> Maybe ChannelId
parentId :: Maybe ParentId
}
| ChannelNews
{ channelId :: ChannelId
, channelGuild :: GuildId
, channelName :: T.Text
, channelPosition :: Integer
, channelPermissions :: [Overwrite]
, channelNSFW :: Bool
, channelTopic :: T.Text
, channelLastMessage :: Maybe MessageId
}
| ChannelStorePage
{ channelId :: ChannelId
, channelGuild :: GuildId
, channelName :: T.Text
, channelPosition :: Integer
, channelNSFW :: Bool
, channelPermissions :: [Overwrite]
, parentId :: Maybe ParentId
}
| ChannelVoice
{ channelId :: ChannelId
, channelGuild :: GuildId
, channelName :: T.Text
, channelPosition :: Integer
, channelPermissions :: [Overwrite]
, channelNSFW :: Bool
, Channel -> Integer
channelBitRate :: Integer
, Channel -> Integer
channelUserLimit :: Integer
, parentId :: Maybe ParentId
}
| ChannelDirectMessage
{ channelId :: ChannelId
, Channel -> [User]
channelRecipients :: [User]
, channelLastMessage :: Maybe MessageId
}
| ChannelGroupDM
{ channelId :: ChannelId
, channelRecipients :: [User]
, channelLastMessage :: Maybe MessageId
}
| ChannelGuildCategory
{ channelId :: ChannelId
, channelGuild :: GuildId
, channelName :: T.Text
, channelPosition :: Integer
, channelPermissions :: [Overwrite]
}
| ChannelStage
{ channelId :: ChannelId
, channelGuild :: GuildId
, Channel -> ChannelId
channelStageId :: StageId
, Channel -> Text
channelStageTopic :: Text
}
| ChannelUnknownType
{ channelId :: ChannelId
, Channel -> Text
channelJSON :: Text
} deriving (Int -> Channel -> ShowS
[Channel] -> ShowS
Channel -> String
(Int -> Channel -> ShowS)
-> (Channel -> String) -> ([Channel] -> ShowS) -> Show Channel
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Channel] -> ShowS
$cshowList :: [Channel] -> ShowS
show :: Channel -> String
$cshow :: Channel -> String
showsPrec :: Int -> Channel -> ShowS
$cshowsPrec :: Int -> Channel -> ShowS
Show, Channel -> Channel -> Bool
(Channel -> Channel -> Bool)
-> (Channel -> Channel -> Bool) -> Eq Channel
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Channel -> Channel -> Bool
$c/= :: Channel -> Channel -> Bool
== :: Channel -> Channel -> Bool
$c== :: Channel -> Channel -> Bool
Eq, Eq Channel
Eq Channel
-> (Channel -> Channel -> Ordering)
-> (Channel -> Channel -> Bool)
-> (Channel -> Channel -> Bool)
-> (Channel -> Channel -> Bool)
-> (Channel -> Channel -> Bool)
-> (Channel -> Channel -> Channel)
-> (Channel -> Channel -> Channel)
-> Ord Channel
Channel -> Channel -> Bool
Channel -> Channel -> Ordering
Channel -> Channel -> Channel
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
min :: Channel -> Channel -> Channel
$cmin :: Channel -> Channel -> Channel
max :: Channel -> Channel -> Channel
$cmax :: Channel -> Channel -> Channel
>= :: Channel -> Channel -> Bool
$c>= :: Channel -> Channel -> Bool
> :: Channel -> Channel -> Bool
$c> :: Channel -> Channel -> Bool
<= :: Channel -> Channel -> Bool
$c<= :: Channel -> Channel -> Bool
< :: Channel -> Channel -> Bool
$c< :: Channel -> Channel -> Bool
compare :: Channel -> Channel -> Ordering
$ccompare :: Channel -> Channel -> Ordering
$cp1Ord :: Eq Channel
Ord)
instance FromJSON Channel where
parseJSON :: Value -> Parser Channel
parseJSON = String -> (Object -> Parser Channel) -> Value -> Parser Channel
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"Channel" ((Object -> Parser Channel) -> Value -> Parser Channel)
-> (Object -> Parser Channel) -> Value -> Parser Channel
forall a b. (a -> b) -> a -> b
$ \Object
o -> do
Int
type' <- (Object
o Object -> Text -> Parser Int
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"type") :: Parser Int
case Int
type' of
Int
0 ->
ChannelId
-> ChannelId
-> Text
-> Integer
-> [Overwrite]
-> Integer
-> Bool
-> Text
-> Maybe ChannelId
-> Maybe ChannelId
-> Channel
ChannelText (ChannelId
-> ChannelId
-> Text
-> Integer
-> [Overwrite]
-> Integer
-> Bool
-> Text
-> Maybe ChannelId
-> Maybe ChannelId
-> Channel)
-> Parser ChannelId
-> Parser
(ChannelId
-> Text
-> Integer
-> [Overwrite]
-> Integer
-> Bool
-> Text
-> Maybe ChannelId
-> Maybe ChannelId
-> Channel)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Text -> Parser ChannelId
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"id"
Parser
(ChannelId
-> Text
-> Integer
-> [Overwrite]
-> Integer
-> Bool
-> Text
-> Maybe ChannelId
-> Maybe ChannelId
-> Channel)
-> Parser ChannelId
-> Parser
(Text
-> Integer
-> [Overwrite]
-> Integer
-> Bool
-> Text
-> Maybe ChannelId
-> Maybe ChannelId
-> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe ChannelId)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"guild_id" Parser (Maybe ChannelId) -> ChannelId -> Parser ChannelId
forall a. Parser (Maybe a) -> a -> Parser a
.!= ChannelId
0
Parser
(Text
-> Integer
-> [Overwrite]
-> Integer
-> Bool
-> Text
-> Maybe ChannelId
-> Maybe ChannelId
-> Channel)
-> Parser Text
-> Parser
(Integer
-> [Overwrite]
-> Integer
-> Bool
-> Text
-> Maybe ChannelId
-> Maybe ChannelId
-> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"name"
Parser
(Integer
-> [Overwrite]
-> Integer
-> Bool
-> Text
-> Maybe ChannelId
-> Maybe ChannelId
-> Channel)
-> Parser Integer
-> Parser
([Overwrite]
-> Integer
-> Bool
-> Text
-> Maybe ChannelId
-> Maybe ChannelId
-> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Integer
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"position"
Parser
([Overwrite]
-> Integer
-> Bool
-> Text
-> Maybe ChannelId
-> Maybe ChannelId
-> Channel)
-> Parser [Overwrite]
-> Parser
(Integer
-> Bool -> Text -> Maybe ChannelId -> Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser [Overwrite]
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"permission_overwrites"
Parser
(Integer
-> Bool -> Text -> Maybe ChannelId -> Maybe ChannelId -> Channel)
-> Parser Integer
-> Parser
(Bool -> Text -> Maybe ChannelId -> Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Integer
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"rate_limit_per_user"
Parser
(Bool -> Text -> Maybe ChannelId -> Maybe ChannelId -> Channel)
-> Parser Bool
-> Parser (Text -> Maybe ChannelId -> Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"nsfw" Parser (Maybe Bool) -> Bool -> Parser Bool
forall a. Parser (Maybe a) -> a -> Parser a
.!= Bool
False
Parser (Text -> Maybe ChannelId -> Maybe ChannelId -> Channel)
-> Parser Text
-> Parser (Maybe ChannelId -> Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"topic" Parser (Maybe Text) -> Text -> Parser Text
forall a. Parser (Maybe a) -> a -> Parser a
.!= Text
""
Parser (Maybe ChannelId -> Maybe ChannelId -> Channel)
-> Parser (Maybe ChannelId) -> Parser (Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe ChannelId)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"last_message_id"
Parser (Maybe ChannelId -> Channel)
-> Parser (Maybe ChannelId) -> Parser Channel
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe ChannelId)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"parent_id"
Int
1 ->
ChannelId -> [User] -> Maybe ChannelId -> Channel
ChannelDirectMessage (ChannelId -> [User] -> Maybe ChannelId -> Channel)
-> Parser ChannelId
-> Parser ([User] -> Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Text -> Parser ChannelId
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"id"
Parser ([User] -> Maybe ChannelId -> Channel)
-> Parser [User] -> Parser (Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser [User]
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"recipients"
Parser (Maybe ChannelId -> Channel)
-> Parser (Maybe ChannelId) -> Parser Channel
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe ChannelId)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"last_message_id"
Int
2 ->
ChannelId
-> ChannelId
-> Text
-> Integer
-> [Overwrite]
-> Bool
-> Integer
-> Integer
-> Maybe ChannelId
-> Channel
ChannelVoice (ChannelId
-> ChannelId
-> Text
-> Integer
-> [Overwrite]
-> Bool
-> Integer
-> Integer
-> Maybe ChannelId
-> Channel)
-> Parser ChannelId
-> Parser
(ChannelId
-> Text
-> Integer
-> [Overwrite]
-> Bool
-> Integer
-> Integer
-> Maybe ChannelId
-> Channel)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Text -> Parser ChannelId
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"id"
Parser
(ChannelId
-> Text
-> Integer
-> [Overwrite]
-> Bool
-> Integer
-> Integer
-> Maybe ChannelId
-> Channel)
-> Parser ChannelId
-> Parser
(Text
-> Integer
-> [Overwrite]
-> Bool
-> Integer
-> Integer
-> Maybe ChannelId
-> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe ChannelId)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"guild_id" Parser (Maybe ChannelId) -> ChannelId -> Parser ChannelId
forall a. Parser (Maybe a) -> a -> Parser a
.!= ChannelId
0
Parser
(Text
-> Integer
-> [Overwrite]
-> Bool
-> Integer
-> Integer
-> Maybe ChannelId
-> Channel)
-> Parser Text
-> Parser
(Integer
-> [Overwrite]
-> Bool
-> Integer
-> Integer
-> Maybe ChannelId
-> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"name"
Parser
(Integer
-> [Overwrite]
-> Bool
-> Integer
-> Integer
-> Maybe ChannelId
-> Channel)
-> Parser Integer
-> Parser
([Overwrite]
-> Bool -> Integer -> Integer -> Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Integer
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"position"
Parser
([Overwrite]
-> Bool -> Integer -> Integer -> Maybe ChannelId -> Channel)
-> Parser [Overwrite]
-> Parser
(Bool -> Integer -> Integer -> Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser [Overwrite]
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"permission_overwrites"
Parser (Bool -> Integer -> Integer -> Maybe ChannelId -> Channel)
-> Parser Bool
-> Parser (Integer -> Integer -> Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"nsfw" Parser (Maybe Bool) -> Bool -> Parser Bool
forall a. Parser (Maybe a) -> a -> Parser a
.!= Bool
False
Parser (Integer -> Integer -> Maybe ChannelId -> Channel)
-> Parser Integer -> Parser (Integer -> Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Integer
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"bitrate"
Parser (Integer -> Maybe ChannelId -> Channel)
-> Parser Integer -> Parser (Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Integer
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"user_limit"
Parser (Maybe ChannelId -> Channel)
-> Parser (Maybe ChannelId) -> Parser Channel
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe ChannelId)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"parent_id"
Int
3 ->
ChannelId -> [User] -> Maybe ChannelId -> Channel
ChannelGroupDM (ChannelId -> [User] -> Maybe ChannelId -> Channel)
-> Parser ChannelId
-> Parser ([User] -> Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Text -> Parser ChannelId
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"id"
Parser ([User] -> Maybe ChannelId -> Channel)
-> Parser [User] -> Parser (Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser [User]
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"recipients"
Parser (Maybe ChannelId -> Channel)
-> Parser (Maybe ChannelId) -> Parser Channel
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe ChannelId)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"last_message_id"
Int
4 ->
ChannelId -> ChannelId -> Text -> Integer -> [Overwrite] -> Channel
ChannelGuildCategory (ChannelId
-> ChannelId -> Text -> Integer -> [Overwrite] -> Channel)
-> Parser ChannelId
-> Parser (ChannelId -> Text -> Integer -> [Overwrite] -> Channel)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Text -> Parser ChannelId
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"id"
Parser (ChannelId -> Text -> Integer -> [Overwrite] -> Channel)
-> Parser ChannelId
-> Parser (Text -> Integer -> [Overwrite] -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe ChannelId)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"guild_id" Parser (Maybe ChannelId) -> ChannelId -> Parser ChannelId
forall a. Parser (Maybe a) -> a -> Parser a
.!= ChannelId
0
Parser (Text -> Integer -> [Overwrite] -> Channel)
-> Parser Text -> Parser (Integer -> [Overwrite] -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"name"
Parser (Integer -> [Overwrite] -> Channel)
-> Parser Integer -> Parser ([Overwrite] -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Integer
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"position"
Parser ([Overwrite] -> Channel)
-> Parser [Overwrite] -> Parser Channel
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser [Overwrite]
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"permission_overwrites"
Int
5 ->
ChannelId
-> ChannelId
-> Text
-> Integer
-> [Overwrite]
-> Bool
-> Text
-> Maybe ChannelId
-> Channel
ChannelNews (ChannelId
-> ChannelId
-> Text
-> Integer
-> [Overwrite]
-> Bool
-> Text
-> Maybe ChannelId
-> Channel)
-> Parser ChannelId
-> Parser
(ChannelId
-> Text
-> Integer
-> [Overwrite]
-> Bool
-> Text
-> Maybe ChannelId
-> Channel)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Text -> Parser ChannelId
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"id"
Parser
(ChannelId
-> Text
-> Integer
-> [Overwrite]
-> Bool
-> Text
-> Maybe ChannelId
-> Channel)
-> Parser ChannelId
-> Parser
(Text
-> Integer
-> [Overwrite]
-> Bool
-> Text
-> Maybe ChannelId
-> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe ChannelId)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"guild_id" Parser (Maybe ChannelId) -> ChannelId -> Parser ChannelId
forall a. Parser (Maybe a) -> a -> Parser a
.!= ChannelId
0
Parser
(Text
-> Integer
-> [Overwrite]
-> Bool
-> Text
-> Maybe ChannelId
-> Channel)
-> Parser Text
-> Parser
(Integer
-> [Overwrite] -> Bool -> Text -> Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"name"
Parser
(Integer
-> [Overwrite] -> Bool -> Text -> Maybe ChannelId -> Channel)
-> Parser Integer
-> Parser
([Overwrite] -> Bool -> Text -> Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Integer
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"position"
Parser ([Overwrite] -> Bool -> Text -> Maybe ChannelId -> Channel)
-> Parser [Overwrite]
-> Parser (Bool -> Text -> Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser [Overwrite]
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"permission_overwrites"
Parser (Bool -> Text -> Maybe ChannelId -> Channel)
-> Parser Bool -> Parser (Text -> Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"nsfw" Parser (Maybe Bool) -> Bool -> Parser Bool
forall a. Parser (Maybe a) -> a -> Parser a
.!= Bool
False
Parser (Text -> Maybe ChannelId -> Channel)
-> Parser Text -> Parser (Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"topic" Parser (Maybe Text) -> Text -> Parser Text
forall a. Parser (Maybe a) -> a -> Parser a
.!= Text
""
Parser (Maybe ChannelId -> Channel)
-> Parser (Maybe ChannelId) -> Parser Channel
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe ChannelId)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"last_message_id"
Int
6 ->
ChannelId
-> ChannelId
-> Text
-> Integer
-> Bool
-> [Overwrite]
-> Maybe ChannelId
-> Channel
ChannelStorePage (ChannelId
-> ChannelId
-> Text
-> Integer
-> Bool
-> [Overwrite]
-> Maybe ChannelId
-> Channel)
-> Parser ChannelId
-> Parser
(ChannelId
-> Text
-> Integer
-> Bool
-> [Overwrite]
-> Maybe ChannelId
-> Channel)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Text -> Parser ChannelId
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"id"
Parser
(ChannelId
-> Text
-> Integer
-> Bool
-> [Overwrite]
-> Maybe ChannelId
-> Channel)
-> Parser ChannelId
-> Parser
(Text
-> Integer -> Bool -> [Overwrite] -> Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe ChannelId)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"guild_id" Parser (Maybe ChannelId) -> ChannelId -> Parser ChannelId
forall a. Parser (Maybe a) -> a -> Parser a
.!= ChannelId
0
Parser
(Text
-> Integer -> Bool -> [Overwrite] -> Maybe ChannelId -> Channel)
-> Parser Text
-> Parser
(Integer -> Bool -> [Overwrite] -> Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"name"
Parser
(Integer -> Bool -> [Overwrite] -> Maybe ChannelId -> Channel)
-> Parser Integer
-> Parser (Bool -> [Overwrite] -> Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Integer
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"position"
Parser (Bool -> [Overwrite] -> Maybe ChannelId -> Channel)
-> Parser Bool
-> Parser ([Overwrite] -> Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"nsfw" Parser (Maybe Bool) -> Bool -> Parser Bool
forall a. Parser (Maybe a) -> a -> Parser a
.!= Bool
False
Parser ([Overwrite] -> Maybe ChannelId -> Channel)
-> Parser [Overwrite] -> Parser (Maybe ChannelId -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser [Overwrite]
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"permission_overwrites"
Parser (Maybe ChannelId -> Channel)
-> Parser (Maybe ChannelId) -> Parser Channel
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe ChannelId)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"parent_id"
Int
13 ->
ChannelId -> ChannelId -> ChannelId -> Text -> Channel
ChannelStage (ChannelId -> ChannelId -> ChannelId -> Text -> Channel)
-> Parser ChannelId
-> Parser (ChannelId -> ChannelId -> Text -> Channel)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Text -> Parser ChannelId
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"id"
Parser (ChannelId -> ChannelId -> Text -> Channel)
-> Parser ChannelId -> Parser (ChannelId -> Text -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe ChannelId)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"guild_id" Parser (Maybe ChannelId) -> ChannelId -> Parser ChannelId
forall a. Parser (Maybe a) -> a -> Parser a
.!= ChannelId
0
Parser (ChannelId -> Text -> Channel)
-> Parser ChannelId -> Parser (Text -> Channel)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser ChannelId
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"id"
Parser (Text -> Channel) -> Parser Text -> Parser Channel
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"topic" Parser (Maybe Text) -> Text -> Parser Text
forall a. Parser (Maybe a) -> a -> Parser a
.!= Text
""
Int
_ -> ChannelId -> Text -> Channel
ChannelUnknownType (ChannelId -> Text -> Channel)
-> Parser ChannelId -> Parser (Text -> Channel)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Text -> Parser ChannelId
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"id"
Parser (Text -> Channel) -> Parser Text -> Parser Channel
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Parser Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure (String -> Text
T.pack (Object -> String
forall a. Show a => a -> String
show Object
o))
instance ToJSON Channel where
toJSON :: Channel -> Value
toJSON ChannelText{Bool
Integer
[Overwrite]
Maybe ChannelId
Text
ChannelId
parentId :: Maybe ChannelId
channelLastMessage :: Maybe ChannelId
channelTopic :: Text
channelNSFW :: Bool
channelUserRateLimit :: Integer
channelPermissions :: [Overwrite]
channelPosition :: Integer
channelName :: Text
channelGuild :: ChannelId
channelId :: ChannelId
parentId :: Channel -> Maybe ChannelId
channelLastMessage :: Channel -> Maybe ChannelId
channelTopic :: Channel -> Text
channelNSFW :: Channel -> Bool
channelUserRateLimit :: Channel -> Integer
channelPermissions :: Channel -> [Overwrite]
channelPosition :: Channel -> Integer
channelName :: Channel -> Text
channelGuild :: Channel -> ChannelId
channelId :: Channel -> ChannelId
..} = [Pair] -> Value
object [(Text
name,Value
value) | (Text
name, Just Value
value) <-
[ (Text
"id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ChannelId -> Maybe ChannelId
forall (f :: * -> *) a. Applicative f => a -> f a
pure ChannelId
channelId)
, (Text
"guild_id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ChannelId -> Maybe ChannelId
forall (f :: * -> *) a. Applicative f => a -> f a
pure ChannelId
channelGuild)
, (Text
"name", Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> Maybe Text -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Maybe Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
channelName)
, (Text
"position", Integer -> Value
forall a. ToJSON a => a -> Value
toJSON (Integer -> Value) -> Maybe Integer -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Integer -> Maybe Integer
forall (f :: * -> *) a. Applicative f => a -> f a
pure Integer
channelPosition)
, (Text
"rate_limit_per_user", Integer -> Value
forall a. ToJSON a => a -> Value
toJSON (Integer -> Value) -> Maybe Integer -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Integer -> Maybe Integer
forall (f :: * -> *) a. Applicative f => a -> f a
pure Integer
channelUserRateLimit)
, (Text
"nsfw", Bool -> Value
forall a. ToJSON a => a -> Value
toJSON (Bool -> Value) -> Maybe Bool -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Bool -> Maybe Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
channelNSFW)
, (Text
"permission_overwrites", [Overwrite] -> Value
forall a. ToJSON a => a -> Value
toJSON ([Overwrite] -> Value) -> Maybe [Overwrite] -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Overwrite] -> Maybe [Overwrite]
forall (f :: * -> *) a. Applicative f => a -> f a
pure [Overwrite]
channelPermissions)
, (Text
"topic", Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> Maybe Text -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Maybe Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
channelTopic)
, (Text
"last_message_id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ChannelId
channelLastMessage)
, (Text
"parent_id", Maybe ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (Maybe ChannelId -> Value)
-> Maybe (Maybe ChannelId) -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ChannelId -> Maybe (Maybe ChannelId)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe ChannelId
parentId)
] ]
toJSON ChannelNews{Bool
Integer
[Overwrite]
Maybe ChannelId
Text
ChannelId
channelLastMessage :: Maybe ChannelId
channelTopic :: Text
channelNSFW :: Bool
channelPermissions :: [Overwrite]
channelPosition :: Integer
channelName :: Text
channelGuild :: ChannelId
channelId :: ChannelId
channelLastMessage :: Channel -> Maybe ChannelId
channelTopic :: Channel -> Text
channelNSFW :: Channel -> Bool
channelPermissions :: Channel -> [Overwrite]
channelPosition :: Channel -> Integer
channelName :: Channel -> Text
channelGuild :: Channel -> ChannelId
channelId :: Channel -> ChannelId
..} = [Pair] -> Value
object [(Text
name,Value
value) | (Text
name, Just Value
value) <-
[ (Text
"id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ChannelId -> Maybe ChannelId
forall (f :: * -> *) a. Applicative f => a -> f a
pure ChannelId
channelId)
, (Text
"guild_id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ChannelId -> Maybe ChannelId
forall (f :: * -> *) a. Applicative f => a -> f a
pure ChannelId
channelGuild)
, (Text
"name", Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> Maybe Text -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Maybe Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
channelName)
, (Text
"position", Integer -> Value
forall a. ToJSON a => a -> Value
toJSON (Integer -> Value) -> Maybe Integer -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Integer -> Maybe Integer
forall (f :: * -> *) a. Applicative f => a -> f a
pure Integer
channelPosition)
, (Text
"permission_overwrites", [Overwrite] -> Value
forall a. ToJSON a => a -> Value
toJSON ([Overwrite] -> Value) -> Maybe [Overwrite] -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Overwrite] -> Maybe [Overwrite]
forall (f :: * -> *) a. Applicative f => a -> f a
pure [Overwrite]
channelPermissions)
, (Text
"nsfw", Bool -> Value
forall a. ToJSON a => a -> Value
toJSON (Bool -> Value) -> Maybe Bool -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Bool -> Maybe Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
channelNSFW)
, (Text
"topic", Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> Maybe Text -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Maybe Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
channelTopic)
, (Text
"last_message_id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ChannelId
channelLastMessage)
] ]
toJSON ChannelStorePage{Bool
Integer
[Overwrite]
Maybe ChannelId
Text
ChannelId
parentId :: Maybe ChannelId
channelPermissions :: [Overwrite]
channelNSFW :: Bool
channelPosition :: Integer
channelName :: Text
channelGuild :: ChannelId
channelId :: ChannelId
parentId :: Channel -> Maybe ChannelId
channelNSFW :: Channel -> Bool
channelPermissions :: Channel -> [Overwrite]
channelPosition :: Channel -> Integer
channelName :: Channel -> Text
channelGuild :: Channel -> ChannelId
channelId :: Channel -> ChannelId
..} = [Pair] -> Value
object [(Text
name,Value
value) | (Text
name, Just Value
value) <-
[ (Text
"id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ChannelId -> Maybe ChannelId
forall (f :: * -> *) a. Applicative f => a -> f a
pure ChannelId
channelId)
, (Text
"guild_id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ChannelId -> Maybe ChannelId
forall (f :: * -> *) a. Applicative f => a -> f a
pure ChannelId
channelGuild)
, (Text
"name", Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> Maybe Text -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Maybe Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
channelName)
, (Text
"nsfw", Bool -> Value
forall a. ToJSON a => a -> Value
toJSON (Bool -> Value) -> Maybe Bool -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Bool -> Maybe Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
channelNSFW)
, (Text
"position", Integer -> Value
forall a. ToJSON a => a -> Value
toJSON (Integer -> Value) -> Maybe Integer -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Integer -> Maybe Integer
forall (f :: * -> *) a. Applicative f => a -> f a
pure Integer
channelPosition)
, (Text
"permission_overwrites", [Overwrite] -> Value
forall a. ToJSON a => a -> Value
toJSON ([Overwrite] -> Value) -> Maybe [Overwrite] -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Overwrite] -> Maybe [Overwrite]
forall (f :: * -> *) a. Applicative f => a -> f a
pure [Overwrite]
channelPermissions)
] ]
toJSON ChannelDirectMessage{[User]
Maybe ChannelId
ChannelId
channelLastMessage :: Maybe ChannelId
channelRecipients :: [User]
channelId :: ChannelId
channelRecipients :: Channel -> [User]
channelLastMessage :: Channel -> Maybe ChannelId
channelId :: Channel -> ChannelId
..} = [Pair] -> Value
object [(Text
name,Value
value) | (Text
name, Just Value
value) <-
[ (Text
"id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ChannelId -> Maybe ChannelId
forall (f :: * -> *) a. Applicative f => a -> f a
pure ChannelId
channelId)
, (Text
"recipients", [User] -> Value
forall a. ToJSON a => a -> Value
toJSON ([User] -> Value) -> Maybe [User] -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [User] -> Maybe [User]
forall (f :: * -> *) a. Applicative f => a -> f a
pure [User]
channelRecipients)
, (Text
"last_message_id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ChannelId
channelLastMessage)
] ]
toJSON ChannelVoice{Bool
Integer
[Overwrite]
Maybe ChannelId
Text
ChannelId
parentId :: Maybe ChannelId
channelUserLimit :: Integer
channelBitRate :: Integer
channelNSFW :: Bool
channelPermissions :: [Overwrite]
channelPosition :: Integer
channelName :: Text
channelGuild :: ChannelId
channelId :: ChannelId
channelUserLimit :: Channel -> Integer
channelBitRate :: Channel -> Integer
parentId :: Channel -> Maybe ChannelId
channelNSFW :: Channel -> Bool
channelPermissions :: Channel -> [Overwrite]
channelPosition :: Channel -> Integer
channelName :: Channel -> Text
channelGuild :: Channel -> ChannelId
channelId :: Channel -> ChannelId
..} = [Pair] -> Value
object [(Text
name,Value
value) | (Text
name, Just Value
value) <-
[ (Text
"id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ChannelId -> Maybe ChannelId
forall (f :: * -> *) a. Applicative f => a -> f a
pure ChannelId
channelId)
, (Text
"guild_id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ChannelId -> Maybe ChannelId
forall (f :: * -> *) a. Applicative f => a -> f a
pure ChannelId
channelGuild)
, (Text
"name", Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> Maybe Text -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Maybe Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
channelName)
, (Text
"position", Integer -> Value
forall a. ToJSON a => a -> Value
toJSON (Integer -> Value) -> Maybe Integer -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Integer -> Maybe Integer
forall (f :: * -> *) a. Applicative f => a -> f a
pure Integer
channelPosition)
, (Text
"nsfw", Bool -> Value
forall a. ToJSON a => a -> Value
toJSON (Bool -> Value) -> Maybe Bool -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Bool -> Maybe Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
channelNSFW)
, (Text
"permission_overwrites", [Overwrite] -> Value
forall a. ToJSON a => a -> Value
toJSON ([Overwrite] -> Value) -> Maybe [Overwrite] -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Overwrite] -> Maybe [Overwrite]
forall (f :: * -> *) a. Applicative f => a -> f a
pure [Overwrite]
channelPermissions)
, (Text
"bitrate", Integer -> Value
forall a. ToJSON a => a -> Value
toJSON (Integer -> Value) -> Maybe Integer -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Integer -> Maybe Integer
forall (f :: * -> *) a. Applicative f => a -> f a
pure Integer
channelBitRate)
, (Text
"user_limit", Integer -> Value
forall a. ToJSON a => a -> Value
toJSON (Integer -> Value) -> Maybe Integer -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Integer -> Maybe Integer
forall (f :: * -> *) a. Applicative f => a -> f a
pure Integer
channelUserLimit)
] ]
toJSON ChannelGroupDM{[User]
Maybe ChannelId
ChannelId
channelLastMessage :: Maybe ChannelId
channelRecipients :: [User]
channelId :: ChannelId
channelRecipients :: Channel -> [User]
channelLastMessage :: Channel -> Maybe ChannelId
channelId :: Channel -> ChannelId
..} = [Pair] -> Value
object [(Text
name,Value
value) | (Text
name, Just Value
value) <-
[ (Text
"id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ChannelId -> Maybe ChannelId
forall (f :: * -> *) a. Applicative f => a -> f a
pure ChannelId
channelId)
, (Text
"recipients", [User] -> Value
forall a. ToJSON a => a -> Value
toJSON ([User] -> Value) -> Maybe [User] -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [User] -> Maybe [User]
forall (f :: * -> *) a. Applicative f => a -> f a
pure [User]
channelRecipients)
, (Text
"last_message_id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ChannelId
channelLastMessage)
] ]
toJSON ChannelGuildCategory{Integer
[Overwrite]
Text
ChannelId
channelPermissions :: [Overwrite]
channelPosition :: Integer
channelName :: Text
channelGuild :: ChannelId
channelId :: ChannelId
channelPermissions :: Channel -> [Overwrite]
channelPosition :: Channel -> Integer
channelName :: Channel -> Text
channelGuild :: Channel -> ChannelId
channelId :: Channel -> ChannelId
..} = [Pair] -> Value
object [(Text
name,Value
value) | (Text
name, Just Value
value) <-
[ (Text
"id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ChannelId -> Maybe ChannelId
forall (f :: * -> *) a. Applicative f => a -> f a
pure ChannelId
channelId)
, (Text
"name", Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> Maybe Text -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Maybe Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
channelName)
, (Text
"guild_id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ChannelId -> Maybe ChannelId
forall (f :: * -> *) a. Applicative f => a -> f a
pure ChannelId
channelGuild)
] ]
toJSON ChannelStage{Text
ChannelId
channelStageTopic :: Text
channelStageId :: ChannelId
channelGuild :: ChannelId
channelId :: ChannelId
channelStageTopic :: Channel -> Text
channelStageId :: Channel -> ChannelId
channelGuild :: Channel -> ChannelId
channelId :: Channel -> ChannelId
..} = [Pair] -> Value
object [(Text
name,Value
value) | (Text
name, Just Value
value) <-
[ (Text
"id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ChannelId -> Maybe ChannelId
forall (f :: * -> *) a. Applicative f => a -> f a
pure ChannelId
channelId)
, (Text
"guild_id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ChannelId -> Maybe ChannelId
forall (f :: * -> *) a. Applicative f => a -> f a
pure ChannelId
channelGuild)
, (Text
"channel_id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ChannelId -> Maybe ChannelId
forall (f :: * -> *) a. Applicative f => a -> f a
pure ChannelId
channelStageId)
, (Text
"topic", Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> Maybe Text -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Maybe Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
channelStageTopic)
] ]
toJSON ChannelUnknownType{Text
ChannelId
channelJSON :: Text
channelId :: ChannelId
channelJSON :: Channel -> Text
channelId :: Channel -> ChannelId
..} = [Pair] -> Value
object [(Text
name,Value
value) | (Text
name, Just Value
value) <-
[ (Text
"id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (ChannelId -> Value) -> Maybe ChannelId -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ChannelId -> Maybe ChannelId
forall (f :: * -> *) a. Applicative f => a -> f a
pure ChannelId
channelId)
, (Text
"json", Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> Maybe Text -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Maybe Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
channelJSON)
] ]
channelIsInGuild :: Channel -> Bool
channelIsInGuild :: Channel -> Bool
channelIsInGuild Channel
c = case Channel
c of
ChannelGuildCategory{Integer
[Overwrite]
Text
ChannelId
channelPermissions :: [Overwrite]
channelPosition :: Integer
channelName :: Text
channelGuild :: ChannelId
channelId :: ChannelId
channelPermissions :: Channel -> [Overwrite]
channelPosition :: Channel -> Integer
channelName :: Channel -> Text
channelGuild :: Channel -> ChannelId
channelId :: Channel -> ChannelId
..} -> Bool
True
ChannelText{Bool
Integer
[Overwrite]
Maybe ChannelId
Text
ChannelId
parentId :: Maybe ChannelId
channelLastMessage :: Maybe ChannelId
channelTopic :: Text
channelNSFW :: Bool
channelUserRateLimit :: Integer
channelPermissions :: [Overwrite]
channelPosition :: Integer
channelName :: Text
channelGuild :: ChannelId
channelId :: ChannelId
parentId :: Channel -> Maybe ChannelId
channelLastMessage :: Channel -> Maybe ChannelId
channelTopic :: Channel -> Text
channelNSFW :: Channel -> Bool
channelUserRateLimit :: Channel -> Integer
channelPermissions :: Channel -> [Overwrite]
channelPosition :: Channel -> Integer
channelName :: Channel -> Text
channelGuild :: Channel -> ChannelId
channelId :: Channel -> ChannelId
..} -> Bool
True
ChannelVoice{Bool
Integer
[Overwrite]
Maybe ChannelId
Text
ChannelId
parentId :: Maybe ChannelId
channelUserLimit :: Integer
channelBitRate :: Integer
channelNSFW :: Bool
channelPermissions :: [Overwrite]
channelPosition :: Integer
channelName :: Text
channelGuild :: ChannelId
channelId :: ChannelId
channelUserLimit :: Channel -> Integer
channelBitRate :: Channel -> Integer
parentId :: Channel -> Maybe ChannelId
channelNSFW :: Channel -> Bool
channelPermissions :: Channel -> [Overwrite]
channelPosition :: Channel -> Integer
channelName :: Channel -> Text
channelGuild :: Channel -> ChannelId
channelId :: Channel -> ChannelId
..} -> Bool
True
ChannelNews{Bool
Integer
[Overwrite]
Maybe ChannelId
Text
ChannelId
channelLastMessage :: Maybe ChannelId
channelTopic :: Text
channelNSFW :: Bool
channelPermissions :: [Overwrite]
channelPosition :: Integer
channelName :: Text
channelGuild :: ChannelId
channelId :: ChannelId
channelLastMessage :: Channel -> Maybe ChannelId
channelTopic :: Channel -> Text
channelNSFW :: Channel -> Bool
channelPermissions :: Channel -> [Overwrite]
channelPosition :: Channel -> Integer
channelName :: Channel -> Text
channelGuild :: Channel -> ChannelId
channelId :: Channel -> ChannelId
..} -> Bool
True
ChannelStorePage{Bool
Integer
[Overwrite]
Maybe ChannelId
Text
ChannelId
parentId :: Maybe ChannelId
channelPermissions :: [Overwrite]
channelNSFW :: Bool
channelPosition :: Integer
channelName :: Text
channelGuild :: ChannelId
channelId :: ChannelId
parentId :: Channel -> Maybe ChannelId
channelNSFW :: Channel -> Bool
channelPermissions :: Channel -> [Overwrite]
channelPosition :: Channel -> Integer
channelName :: Channel -> Text
channelGuild :: Channel -> ChannelId
channelId :: Channel -> ChannelId
..} -> Bool
True
Channel
_ -> Bool
False
data Overwrite = Overwrite
{ Overwrite -> ChannelId
overwriteId :: OverwriteId
, Overwrite -> Text
overwriteType :: T.Text
, Overwrite -> Integer
overwriteAllow :: Integer
, Overwrite -> Integer
overwriteDeny :: Integer
} deriving (Int -> Overwrite -> ShowS
[Overwrite] -> ShowS
Overwrite -> String
(Int -> Overwrite -> ShowS)
-> (Overwrite -> String)
-> ([Overwrite] -> ShowS)
-> Show Overwrite
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Overwrite] -> ShowS
$cshowList :: [Overwrite] -> ShowS
show :: Overwrite -> String
$cshow :: Overwrite -> String
showsPrec :: Int -> Overwrite -> ShowS
$cshowsPrec :: Int -> Overwrite -> ShowS
Show, Overwrite -> Overwrite -> Bool
(Overwrite -> Overwrite -> Bool)
-> (Overwrite -> Overwrite -> Bool) -> Eq Overwrite
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Overwrite -> Overwrite -> Bool
$c/= :: Overwrite -> Overwrite -> Bool
== :: Overwrite -> Overwrite -> Bool
$c== :: Overwrite -> Overwrite -> Bool
Eq, Eq Overwrite
Eq Overwrite
-> (Overwrite -> Overwrite -> Ordering)
-> (Overwrite -> Overwrite -> Bool)
-> (Overwrite -> Overwrite -> Bool)
-> (Overwrite -> Overwrite -> Bool)
-> (Overwrite -> Overwrite -> Bool)
-> (Overwrite -> Overwrite -> Overwrite)
-> (Overwrite -> Overwrite -> Overwrite)
-> Ord Overwrite
Overwrite -> Overwrite -> Bool
Overwrite -> Overwrite -> Ordering
Overwrite -> Overwrite -> Overwrite
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
min :: Overwrite -> Overwrite -> Overwrite
$cmin :: Overwrite -> Overwrite -> Overwrite
max :: Overwrite -> Overwrite -> Overwrite
$cmax :: Overwrite -> Overwrite -> Overwrite
>= :: Overwrite -> Overwrite -> Bool
$c>= :: Overwrite -> Overwrite -> Bool
> :: Overwrite -> Overwrite -> Bool
$c> :: Overwrite -> Overwrite -> Bool
<= :: Overwrite -> Overwrite -> Bool
$c<= :: Overwrite -> Overwrite -> Bool
< :: Overwrite -> Overwrite -> Bool
$c< :: Overwrite -> Overwrite -> Bool
compare :: Overwrite -> Overwrite -> Ordering
$ccompare :: Overwrite -> Overwrite -> Ordering
$cp1Ord :: Eq Overwrite
Ord)
instance FromJSON Overwrite where
parseJSON :: Value -> Parser Overwrite
parseJSON = String -> (Object -> Parser Overwrite) -> Value -> Parser Overwrite
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"Overwrite" ((Object -> Parser Overwrite) -> Value -> Parser Overwrite)
-> (Object -> Parser Overwrite) -> Value -> Parser Overwrite
forall a b. (a -> b) -> a -> b
$ \Object
o ->
ChannelId -> Text -> Integer -> Integer -> Overwrite
Overwrite (ChannelId -> Text -> Integer -> Integer -> Overwrite)
-> Parser ChannelId
-> Parser (Text -> Integer -> Integer -> Overwrite)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Text -> Parser ChannelId
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"id"
Parser (Text -> Integer -> Integer -> Overwrite)
-> Parser Text -> Parser (Integer -> Integer -> Overwrite)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"type"
Parser (Integer -> Integer -> Overwrite)
-> Parser Integer -> Parser (Integer -> Overwrite)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Integer
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"allow"
Parser (Integer -> Overwrite) -> Parser Integer -> Parser Overwrite
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Integer
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"deny"
instance ToJSON Overwrite where
toJSON :: Overwrite -> Value
toJSON Overwrite{Integer
Text
ChannelId
overwriteDeny :: Integer
overwriteAllow :: Integer
overwriteType :: Text
overwriteId :: ChannelId
overwriteDeny :: Overwrite -> Integer
overwriteAllow :: Overwrite -> Integer
overwriteType :: Overwrite -> Text
overwriteId :: Overwrite -> ChannelId
..} = [Pair] -> Value
object
[ (Text
"id", ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON ChannelId
overwriteId)
, (Text
"type", Text -> Value
forall a. ToJSON a => a -> Value
toJSON Text
overwriteType)
, (Text
"allow", Integer -> Value
forall a. ToJSON a => a -> Value
toJSON Integer
overwriteAllow)
, (Text
"deny", Integer -> Value
forall a. ToJSON a => a -> Value
toJSON Integer
overwriteDeny)
]
data Message = Message
{ Message -> ChannelId
messageId :: MessageId
, Message -> ChannelId
messageChannel :: ChannelId
, Message -> User
messageAuthor :: User
, Message -> Text
messageText :: Text
, Message -> UTCTime
messageTimestamp :: UTCTime
, Message -> Maybe UTCTime
messageEdited :: Maybe UTCTime
, Message -> Bool
messageTts :: Bool
, Message -> Bool
messageEveryone :: Bool
, Message -> [User]
messageMentions :: [User]
, Message -> [ChannelId]
messageMentionRoles :: [RoleId]
, Message -> [Attachment]
messageAttachments :: [Attachment]
, Message -> [Embed]
messageEmbeds :: [Embed]
, Message -> [MessageReaction]
messageReactions :: [MessageReaction]
, Message -> Maybe Nonce
messageNonce :: Maybe Nonce
, Message -> Bool
messagePinned :: Bool
, Message -> Maybe ChannelId
messageGuild :: Maybe GuildId
, Message -> Maybe MessageReference
messageReference :: Maybe MessageReference
, Message -> Maybe Message
referencedMessage :: Maybe Message
} deriving (Int -> Message -> ShowS
[Message] -> ShowS
Message -> String
(Int -> Message -> ShowS)
-> (Message -> String) -> ([Message] -> ShowS) -> Show Message
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, Message -> Message -> Bool
(Message -> Message -> Bool)
-> (Message -> Message -> Bool) -> Eq Message
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Message -> Message -> Bool
$c/= :: Message -> Message -> Bool
== :: Message -> Message -> Bool
$c== :: Message -> Message -> Bool
Eq, Eq Message
Eq Message
-> (Message -> Message -> Ordering)
-> (Message -> Message -> Bool)
-> (Message -> Message -> Bool)
-> (Message -> Message -> Bool)
-> (Message -> Message -> Bool)
-> (Message -> Message -> Message)
-> (Message -> Message -> Message)
-> Ord Message
Message -> Message -> Bool
Message -> Message -> Ordering
Message -> Message -> Message
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
min :: Message -> Message -> Message
$cmin :: Message -> Message -> Message
max :: Message -> Message -> Message
$cmax :: Message -> Message -> Message
>= :: Message -> Message -> Bool
$c>= :: Message -> Message -> Bool
> :: Message -> Message -> Bool
$c> :: Message -> Message -> Bool
<= :: Message -> Message -> Bool
$c<= :: Message -> Message -> Bool
< :: Message -> Message -> Bool
$c< :: Message -> Message -> Bool
compare :: Message -> Message -> Ordering
$ccompare :: Message -> Message -> Ordering
$cp1Ord :: Eq Message
Ord)
instance FromJSON Message where
parseJSON :: Value -> Parser Message
parseJSON = String -> (Object -> Parser Message) -> Value -> Parser Message
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"Message" ((Object -> Parser Message) -> Value -> Parser Message)
-> (Object -> Parser Message) -> Value -> Parser Message
forall a b. (a -> b) -> a -> b
$ \Object
o ->
ChannelId
-> ChannelId
-> User
-> Text
-> UTCTime
-> Maybe UTCTime
-> Bool
-> Bool
-> [User]
-> [ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message
Message (ChannelId
-> ChannelId
-> User
-> Text
-> UTCTime
-> Maybe UTCTime
-> Bool
-> Bool
-> [User]
-> [ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
-> Parser ChannelId
-> Parser
(ChannelId
-> User
-> Text
-> UTCTime
-> Maybe UTCTime
-> Bool
-> Bool
-> [User]
-> [ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Text -> Parser ChannelId
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"id"
Parser
(ChannelId
-> User
-> Text
-> UTCTime
-> Maybe UTCTime
-> Bool
-> Bool
-> [User]
-> [ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
-> Parser ChannelId
-> Parser
(User
-> Text
-> UTCTime
-> Maybe UTCTime
-> Bool
-> Bool
-> [User]
-> [ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser ChannelId
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"channel_id"
Parser
(User
-> Text
-> UTCTime
-> Maybe UTCTime
-> Bool
-> Bool
-> [User]
-> [ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
-> Parser User
-> Parser
(Text
-> UTCTime
-> Maybe UTCTime
-> Bool
-> Bool
-> [User]
-> [ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (do Maybe ChannelId
isW <- Object
o Object -> Text -> Parser (Maybe ChannelId)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"webhook_id"
User
a <- Object
o Object -> Text -> Parser User
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"author"
case Maybe ChannelId
isW :: Maybe WebhookId of
Maybe ChannelId
Nothing -> User -> Parser User
forall (f :: * -> *) a. Applicative f => a -> f a
pure User
a
Just ChannelId
_ -> User -> Parser User
forall (f :: * -> *) a. Applicative f => a -> f a
pure (User -> Parser User) -> User -> Parser User
forall a b. (a -> b) -> a -> b
$ User
a { userIsWebhook :: Bool
userIsWebhook = Bool
True })
Parser
(Text
-> UTCTime
-> Maybe UTCTime
-> Bool
-> Bool
-> [User]
-> [ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
-> Parser Text
-> Parser
(UTCTime
-> Maybe UTCTime
-> Bool
-> Bool
-> [User]
-> [ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"content" Parser (Maybe Text) -> Text -> Parser Text
forall a. Parser (Maybe a) -> a -> Parser a
.!= Text
""
Parser
(UTCTime
-> Maybe UTCTime
-> Bool
-> Bool
-> [User]
-> [ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
-> Parser UTCTime
-> Parser
(Maybe UTCTime
-> Bool
-> Bool
-> [User]
-> [ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe UTCTime)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"timestamp" Parser (Maybe UTCTime) -> UTCTime -> Parser UTCTime
forall a. Parser (Maybe a) -> a -> Parser a
.!= UTCTime
epochTime
Parser
(Maybe UTCTime
-> Bool
-> Bool
-> [User]
-> [ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
-> Parser (Maybe UTCTime)
-> Parser
(Bool
-> Bool
-> [User]
-> [ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe UTCTime)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"edited_timestamp"
Parser
(Bool
-> Bool
-> [User]
-> [ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
-> Parser Bool
-> Parser
(Bool
-> [User]
-> [ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"tts" Parser (Maybe Bool) -> Bool -> Parser Bool
forall a. Parser (Maybe a) -> a -> Parser a
.!= Bool
False
Parser
(Bool
-> [User]
-> [ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
-> Parser Bool
-> Parser
([User]
-> [ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"mention_everyone" Parser (Maybe Bool) -> Bool -> Parser Bool
forall a. Parser (Maybe a) -> a -> Parser a
.!= Bool
False
Parser
([User]
-> [ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
-> Parser [User]
-> Parser
([ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe [User])
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"mentions" Parser (Maybe [User]) -> [User] -> Parser [User]
forall a. Parser (Maybe a) -> a -> Parser a
.!= []
Parser
([ChannelId]
-> [Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
-> Parser [ChannelId]
-> Parser
([Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe [ChannelId])
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"mention_roles" Parser (Maybe [ChannelId]) -> [ChannelId] -> Parser [ChannelId]
forall a. Parser (Maybe a) -> a -> Parser a
.!= []
Parser
([Attachment]
-> [Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
-> Parser [Attachment]
-> Parser
([Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe [Attachment])
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"attachments" Parser (Maybe [Attachment]) -> [Attachment] -> Parser [Attachment]
forall a. Parser (Maybe a) -> a -> Parser a
.!= []
Parser
([Embed]
-> [MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
-> Parser [Embed]
-> Parser
([MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser [Embed]
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"embeds"
Parser
([MessageReaction]
-> Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
-> Parser [MessageReaction]
-> Parser
(Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe [MessageReaction])
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"reactions" Parser (Maybe [MessageReaction])
-> [MessageReaction] -> Parser [MessageReaction]
forall a. Parser (Maybe a) -> a -> Parser a
.!= []
Parser
(Maybe Nonce
-> Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
-> Parser (Maybe Nonce)
-> Parser
(Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe Nonce)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"nonce"
Parser
(Bool
-> Maybe ChannelId
-> Maybe MessageReference
-> Maybe Message
-> Message)
-> Parser Bool
-> Parser
(Maybe ChannelId
-> Maybe MessageReference -> Maybe Message -> Message)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"pinned" Parser (Maybe Bool) -> Bool -> Parser Bool
forall a. Parser (Maybe a) -> a -> Parser a
.!= Bool
False
Parser
(Maybe ChannelId
-> Maybe MessageReference -> Maybe Message -> Message)
-> Parser (Maybe ChannelId)
-> Parser (Maybe MessageReference -> Maybe Message -> Message)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe (Maybe ChannelId))
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"guild_id" Parser (Maybe (Maybe ChannelId))
-> Maybe ChannelId -> Parser (Maybe ChannelId)
forall a. Parser (Maybe a) -> a -> Parser a
.!= Maybe ChannelId
forall a. Maybe a
Nothing
Parser (Maybe MessageReference -> Maybe Message -> Message)
-> Parser (Maybe MessageReference)
-> Parser (Maybe Message -> Message)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe (Maybe MessageReference))
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"message_reference" Parser (Maybe (Maybe MessageReference))
-> Maybe MessageReference -> Parser (Maybe MessageReference)
forall a. Parser (Maybe a) -> a -> Parser a
.!= Maybe MessageReference
forall a. Maybe a
Nothing
Parser (Maybe Message -> Message)
-> Parser (Maybe Message) -> Parser Message
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe (Maybe Message))
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"referenced_message" Parser (Maybe (Maybe Message))
-> Maybe Message -> Parser (Maybe Message)
forall a. Parser (Maybe a) -> a -> Parser a
.!= Maybe Message
forall a. Maybe a
Nothing
data MessageReaction = MessageReaction
{ MessageReaction -> Int
messageReactionCount :: Int
, MessageReaction -> Bool
messageReactionMeIncluded :: Bool
, MessageReaction -> Emoji
messageReactionEmoji :: Emoji
} deriving (Int -> MessageReaction -> ShowS
[MessageReaction] -> ShowS
MessageReaction -> String
(Int -> MessageReaction -> ShowS)
-> (MessageReaction -> String)
-> ([MessageReaction] -> ShowS)
-> Show MessageReaction
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MessageReaction] -> ShowS
$cshowList :: [MessageReaction] -> ShowS
show :: MessageReaction -> String
$cshow :: MessageReaction -> String
showsPrec :: Int -> MessageReaction -> ShowS
$cshowsPrec :: Int -> MessageReaction -> ShowS
Show, MessageReaction -> MessageReaction -> Bool
(MessageReaction -> MessageReaction -> Bool)
-> (MessageReaction -> MessageReaction -> Bool)
-> Eq MessageReaction
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MessageReaction -> MessageReaction -> Bool
$c/= :: MessageReaction -> MessageReaction -> Bool
== :: MessageReaction -> MessageReaction -> Bool
$c== :: MessageReaction -> MessageReaction -> Bool
Eq, Eq MessageReaction
Eq MessageReaction
-> (MessageReaction -> MessageReaction -> Ordering)
-> (MessageReaction -> MessageReaction -> Bool)
-> (MessageReaction -> MessageReaction -> Bool)
-> (MessageReaction -> MessageReaction -> Bool)
-> (MessageReaction -> MessageReaction -> Bool)
-> (MessageReaction -> MessageReaction -> MessageReaction)
-> (MessageReaction -> MessageReaction -> MessageReaction)
-> Ord MessageReaction
MessageReaction -> MessageReaction -> Bool
MessageReaction -> MessageReaction -> Ordering
MessageReaction -> MessageReaction -> MessageReaction
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
min :: MessageReaction -> MessageReaction -> MessageReaction
$cmin :: MessageReaction -> MessageReaction -> MessageReaction
max :: MessageReaction -> MessageReaction -> MessageReaction
$cmax :: MessageReaction -> MessageReaction -> MessageReaction
>= :: MessageReaction -> MessageReaction -> Bool
$c>= :: MessageReaction -> MessageReaction -> Bool
> :: MessageReaction -> MessageReaction -> Bool
$c> :: MessageReaction -> MessageReaction -> Bool
<= :: MessageReaction -> MessageReaction -> Bool
$c<= :: MessageReaction -> MessageReaction -> Bool
< :: MessageReaction -> MessageReaction -> Bool
$c< :: MessageReaction -> MessageReaction -> Bool
compare :: MessageReaction -> MessageReaction -> Ordering
$ccompare :: MessageReaction -> MessageReaction -> Ordering
$cp1Ord :: Eq MessageReaction
Ord)
instance FromJSON MessageReaction where
parseJSON :: Value -> Parser MessageReaction
parseJSON = String
-> (Object -> Parser MessageReaction)
-> Value
-> Parser MessageReaction
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"MessageReaction" ((Object -> Parser MessageReaction)
-> Value -> Parser MessageReaction)
-> (Object -> Parser MessageReaction)
-> Value
-> Parser MessageReaction
forall a b. (a -> b) -> a -> b
$ \Object
o ->
Int -> Bool -> Emoji -> MessageReaction
MessageReaction (Int -> Bool -> Emoji -> MessageReaction)
-> Parser Int -> Parser (Bool -> Emoji -> MessageReaction)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Text -> Parser Int
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"count"
Parser (Bool -> Emoji -> MessageReaction)
-> Parser Bool -> Parser (Emoji -> MessageReaction)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Bool
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"me"
Parser (Emoji -> MessageReaction)
-> Parser Emoji -> Parser MessageReaction
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Emoji
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"emoji"
data Emoji = Emoji
{ Emoji -> Maybe ChannelId
emojiId :: Maybe EmojiId
, Emoji -> Text
emojiName :: T.Text
, Emoji -> Maybe [ChannelId]
emojiRoles :: Maybe [RoleId]
, Emoji -> Maybe User
emojiUser :: Maybe User
, Emoji -> Maybe Bool
emojiManaged :: Maybe Bool
} deriving (Int -> Emoji -> ShowS
[Emoji] -> ShowS
Emoji -> String
(Int -> Emoji -> ShowS)
-> (Emoji -> String) -> ([Emoji] -> ShowS) -> Show Emoji
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Emoji] -> ShowS
$cshowList :: [Emoji] -> ShowS
show :: Emoji -> String
$cshow :: Emoji -> String
showsPrec :: Int -> Emoji -> ShowS
$cshowsPrec :: Int -> Emoji -> ShowS
Show, Emoji -> Emoji -> Bool
(Emoji -> Emoji -> Bool) -> (Emoji -> Emoji -> Bool) -> Eq Emoji
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Emoji -> Emoji -> Bool
$c/= :: Emoji -> Emoji -> Bool
== :: Emoji -> Emoji -> Bool
$c== :: Emoji -> Emoji -> Bool
Eq, Eq Emoji
Eq Emoji
-> (Emoji -> Emoji -> Ordering)
-> (Emoji -> Emoji -> Bool)
-> (Emoji -> Emoji -> Bool)
-> (Emoji -> Emoji -> Bool)
-> (Emoji -> Emoji -> Bool)
-> (Emoji -> Emoji -> Emoji)
-> (Emoji -> Emoji -> Emoji)
-> Ord Emoji
Emoji -> Emoji -> Bool
Emoji -> Emoji -> Ordering
Emoji -> Emoji -> Emoji
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
min :: Emoji -> Emoji -> Emoji
$cmin :: Emoji -> Emoji -> Emoji
max :: Emoji -> Emoji -> Emoji
$cmax :: Emoji -> Emoji -> Emoji
>= :: Emoji -> Emoji -> Bool
$c>= :: Emoji -> Emoji -> Bool
> :: Emoji -> Emoji -> Bool
$c> :: Emoji -> Emoji -> Bool
<= :: Emoji -> Emoji -> Bool
$c<= :: Emoji -> Emoji -> Bool
< :: Emoji -> Emoji -> Bool
$c< :: Emoji -> Emoji -> Bool
compare :: Emoji -> Emoji -> Ordering
$ccompare :: Emoji -> Emoji -> Ordering
$cp1Ord :: Eq Emoji
Ord)
instance FromJSON Emoji where
parseJSON :: Value -> Parser Emoji
parseJSON = String -> (Object -> Parser Emoji) -> Value -> Parser Emoji
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"Emoji" ((Object -> Parser Emoji) -> Value -> Parser Emoji)
-> (Object -> Parser Emoji) -> Value -> Parser Emoji
forall a b. (a -> b) -> a -> b
$ \Object
o ->
Maybe ChannelId
-> Text -> Maybe [ChannelId] -> Maybe User -> Maybe Bool -> Emoji
Emoji (Maybe ChannelId
-> Text -> Maybe [ChannelId] -> Maybe User -> Maybe Bool -> Emoji)
-> Parser (Maybe ChannelId)
-> Parser
(Text -> Maybe [ChannelId] -> Maybe User -> Maybe Bool -> Emoji)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Text -> Parser (Maybe ChannelId)
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"id"
Parser
(Text -> Maybe [ChannelId] -> Maybe User -> Maybe Bool -> Emoji)
-> Parser Text
-> Parser (Maybe [ChannelId] -> Maybe User -> Maybe Bool -> Emoji)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"name"
Parser (Maybe [ChannelId] -> Maybe User -> Maybe Bool -> Emoji)
-> Parser (Maybe [ChannelId])
-> Parser (Maybe User -> Maybe Bool -> Emoji)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe [ChannelId])
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"roles"
Parser (Maybe User -> Maybe Bool -> Emoji)
-> Parser (Maybe User) -> Parser (Maybe Bool -> Emoji)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe User)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"user"
Parser (Maybe Bool -> Emoji) -> Parser (Maybe Bool) -> Parser Emoji
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"managed"
data Attachment = Attachment
{ Attachment -> ChannelId
attachmentId :: Snowflake
, Attachment -> Text
attachmentFilename :: T.Text
, Attachment -> Integer
attachmentSize :: Integer
, Attachment -> Text
attachmentUrl :: T.Text
, Attachment -> Text
attachmentProxy :: T.Text
, Attachment -> Maybe Integer
attachmentHeight :: Maybe Integer
, Attachment -> Maybe Integer
attachmentWidth :: Maybe Integer
} deriving (Int -> Attachment -> ShowS
[Attachment] -> ShowS
Attachment -> String
(Int -> Attachment -> ShowS)
-> (Attachment -> String)
-> ([Attachment] -> ShowS)
-> Show Attachment
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Attachment] -> ShowS
$cshowList :: [Attachment] -> ShowS
show :: Attachment -> String
$cshow :: Attachment -> String
showsPrec :: Int -> Attachment -> ShowS
$cshowsPrec :: Int -> Attachment -> ShowS
Show, Attachment -> Attachment -> Bool
(Attachment -> Attachment -> Bool)
-> (Attachment -> Attachment -> Bool) -> Eq Attachment
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Attachment -> Attachment -> Bool
$c/= :: Attachment -> Attachment -> Bool
== :: Attachment -> Attachment -> Bool
$c== :: Attachment -> Attachment -> Bool
Eq, Eq Attachment
Eq Attachment
-> (Attachment -> Attachment -> Ordering)
-> (Attachment -> Attachment -> Bool)
-> (Attachment -> Attachment -> Bool)
-> (Attachment -> Attachment -> Bool)
-> (Attachment -> Attachment -> Bool)
-> (Attachment -> Attachment -> Attachment)
-> (Attachment -> Attachment -> Attachment)
-> Ord Attachment
Attachment -> Attachment -> Bool
Attachment -> Attachment -> Ordering
Attachment -> Attachment -> Attachment
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
min :: Attachment -> Attachment -> Attachment
$cmin :: Attachment -> Attachment -> Attachment
max :: Attachment -> Attachment -> Attachment
$cmax :: Attachment -> Attachment -> Attachment
>= :: Attachment -> Attachment -> Bool
$c>= :: Attachment -> Attachment -> Bool
> :: Attachment -> Attachment -> Bool
$c> :: Attachment -> Attachment -> Bool
<= :: Attachment -> Attachment -> Bool
$c<= :: Attachment -> Attachment -> Bool
< :: Attachment -> Attachment -> Bool
$c< :: Attachment -> Attachment -> Bool
compare :: Attachment -> Attachment -> Ordering
$ccompare :: Attachment -> Attachment -> Ordering
$cp1Ord :: Eq Attachment
Ord)
instance FromJSON Attachment where
parseJSON :: Value -> Parser Attachment
parseJSON = String
-> (Object -> Parser Attachment) -> Value -> Parser Attachment
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"Attachment" ((Object -> Parser Attachment) -> Value -> Parser Attachment)
-> (Object -> Parser Attachment) -> Value -> Parser Attachment
forall a b. (a -> b) -> a -> b
$ \Object
o ->
ChannelId
-> Text
-> Integer
-> Text
-> Text
-> Maybe Integer
-> Maybe Integer
-> Attachment
Attachment (ChannelId
-> Text
-> Integer
-> Text
-> Text
-> Maybe Integer
-> Maybe Integer
-> Attachment)
-> Parser ChannelId
-> Parser
(Text
-> Integer
-> Text
-> Text
-> Maybe Integer
-> Maybe Integer
-> Attachment)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Text -> Parser ChannelId
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"id"
Parser
(Text
-> Integer
-> Text
-> Text
-> Maybe Integer
-> Maybe Integer
-> Attachment)
-> Parser Text
-> Parser
(Integer
-> Text -> Text -> Maybe Integer -> Maybe Integer -> Attachment)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"filename"
Parser
(Integer
-> Text -> Text -> Maybe Integer -> Maybe Integer -> Attachment)
-> Parser Integer
-> Parser
(Text -> Text -> Maybe Integer -> Maybe Integer -> Attachment)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Integer
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"size"
Parser
(Text -> Text -> Maybe Integer -> Maybe Integer -> Attachment)
-> Parser Text
-> Parser (Text -> Maybe Integer -> Maybe Integer -> Attachment)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"url"
Parser (Text -> Maybe Integer -> Maybe Integer -> Attachment)
-> Parser Text
-> Parser (Maybe Integer -> Maybe Integer -> Attachment)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"proxy_url"
Parser (Maybe Integer -> Maybe Integer -> Attachment)
-> Parser (Maybe Integer) -> Parser (Maybe Integer -> Attachment)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe Integer)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"height"
Parser (Maybe Integer -> Attachment)
-> Parser (Maybe Integer) -> Parser Attachment
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe Integer)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"width"
newtype Nonce = Nonce T.Text
deriving (Int -> Nonce -> ShowS
[Nonce] -> ShowS
Nonce -> String
(Int -> Nonce -> ShowS)
-> (Nonce -> String) -> ([Nonce] -> ShowS) -> Show Nonce
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Nonce] -> ShowS
$cshowList :: [Nonce] -> ShowS
show :: Nonce -> String
$cshow :: Nonce -> String
showsPrec :: Int -> Nonce -> ShowS
$cshowsPrec :: Int -> Nonce -> ShowS
Show, Nonce -> Nonce -> Bool
(Nonce -> Nonce -> Bool) -> (Nonce -> Nonce -> Bool) -> Eq Nonce
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Nonce -> Nonce -> Bool
$c/= :: Nonce -> Nonce -> Bool
== :: Nonce -> Nonce -> Bool
$c== :: Nonce -> Nonce -> Bool
Eq, Eq Nonce
Eq Nonce
-> (Nonce -> Nonce -> Ordering)
-> (Nonce -> Nonce -> Bool)
-> (Nonce -> Nonce -> Bool)
-> (Nonce -> Nonce -> Bool)
-> (Nonce -> Nonce -> Bool)
-> (Nonce -> Nonce -> Nonce)
-> (Nonce -> Nonce -> Nonce)
-> Ord Nonce
Nonce -> Nonce -> Bool
Nonce -> Nonce -> Ordering
Nonce -> Nonce -> Nonce
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
min :: Nonce -> Nonce -> Nonce
$cmin :: Nonce -> Nonce -> Nonce
max :: Nonce -> Nonce -> Nonce
$cmax :: Nonce -> Nonce -> Nonce
>= :: Nonce -> Nonce -> Bool
$c>= :: Nonce -> Nonce -> Bool
> :: Nonce -> Nonce -> Bool
$c> :: Nonce -> Nonce -> Bool
<= :: Nonce -> Nonce -> Bool
$c<= :: Nonce -> Nonce -> Bool
< :: Nonce -> Nonce -> Bool
$c< :: Nonce -> Nonce -> Bool
compare :: Nonce -> Nonce -> Ordering
$ccompare :: Nonce -> Nonce -> Ordering
$cp1Ord :: Eq Nonce
Ord)
instance FromJSON Nonce where
parseJSON :: Value -> Parser Nonce
parseJSON (String Text
nonce) = Nonce -> Parser Nonce
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Nonce -> Parser Nonce) -> Nonce -> Parser Nonce
forall a b. (a -> b) -> a -> b
$ Text -> Nonce
Nonce Text
nonce
parseJSON (Number Scientific
nonce) = Nonce -> Parser Nonce
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Nonce -> Parser Nonce)
-> (Scientific -> Nonce) -> Scientific -> Parser Nonce
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Nonce
Nonce (Text -> Nonce) -> (Scientific -> Text) -> Scientific -> Nonce
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack (String -> Text) -> (Scientific -> String) -> Scientific -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Scientific -> String
forall a. Show a => a -> String
show (Scientific -> Parser Nonce) -> Scientific -> Parser Nonce
forall a b. (a -> b) -> a -> b
$ Scientific
nonce
parseJSON Value
_ = Parser Nonce
forall (f :: * -> *) a. Alternative f => f a
empty
data MessageReference = MessageReference
{ MessageReference -> Maybe ChannelId
referenceMessageId :: Maybe MessageId
, MessageReference -> Maybe ChannelId
referenceChannelId :: Maybe ChannelId
, MessageReference -> Maybe ChannelId
referenceGuildId :: Maybe GuildId
, MessageReference -> Bool
failIfNotExists :: Bool
} deriving (Int -> MessageReference -> ShowS
[MessageReference] -> ShowS
MessageReference -> String
(Int -> MessageReference -> ShowS)
-> (MessageReference -> String)
-> ([MessageReference] -> ShowS)
-> Show MessageReference
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, MessageReference -> MessageReference -> Bool
(MessageReference -> MessageReference -> Bool)
-> (MessageReference -> MessageReference -> Bool)
-> Eq MessageReference
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, Eq MessageReference
Eq MessageReference
-> (MessageReference -> MessageReference -> Ordering)
-> (MessageReference -> MessageReference -> Bool)
-> (MessageReference -> MessageReference -> Bool)
-> (MessageReference -> MessageReference -> Bool)
-> (MessageReference -> MessageReference -> Bool)
-> (MessageReference -> MessageReference -> MessageReference)
-> (MessageReference -> MessageReference -> MessageReference)
-> Ord MessageReference
MessageReference -> MessageReference -> Bool
MessageReference -> MessageReference -> Ordering
MessageReference -> MessageReference -> MessageReference
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
min :: MessageReference -> MessageReference -> MessageReference
$cmin :: MessageReference -> MessageReference -> MessageReference
max :: MessageReference -> MessageReference -> MessageReference
$cmax :: MessageReference -> MessageReference -> MessageReference
>= :: MessageReference -> MessageReference -> Bool
$c>= :: MessageReference -> MessageReference -> Bool
> :: MessageReference -> MessageReference -> Bool
$c> :: MessageReference -> MessageReference -> Bool
<= :: MessageReference -> MessageReference -> Bool
$c<= :: MessageReference -> MessageReference -> Bool
< :: MessageReference -> MessageReference -> Bool
$c< :: MessageReference -> MessageReference -> Bool
compare :: MessageReference -> MessageReference -> Ordering
$ccompare :: MessageReference -> MessageReference -> Ordering
$cp1Ord :: Eq MessageReference
Ord)
instance FromJSON MessageReference where
parseJSON :: Value -> Parser MessageReference
parseJSON = String
-> (Object -> Parser MessageReference)
-> Value
-> Parser MessageReference
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"MessageReference" ((Object -> Parser MessageReference)
-> Value -> Parser MessageReference)
-> (Object -> Parser MessageReference)
-> Value
-> Parser MessageReference
forall a b. (a -> b) -> a -> b
$ \Object
o ->
Maybe ChannelId
-> Maybe ChannelId -> Maybe ChannelId -> Bool -> MessageReference
MessageReference (Maybe ChannelId
-> Maybe ChannelId -> Maybe ChannelId -> Bool -> MessageReference)
-> Parser (Maybe ChannelId)
-> Parser
(Maybe ChannelId -> Maybe ChannelId -> Bool -> MessageReference)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Text -> Parser (Maybe ChannelId)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"message_id"
Parser
(Maybe ChannelId -> Maybe ChannelId -> Bool -> MessageReference)
-> Parser (Maybe ChannelId)
-> Parser (Maybe ChannelId -> Bool -> MessageReference)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe ChannelId)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"channel_id"
Parser (Maybe ChannelId -> Bool -> MessageReference)
-> Parser (Maybe ChannelId) -> Parser (Bool -> MessageReference)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe ChannelId)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"guild_id"
Parser (Bool -> MessageReference)
-> Parser Bool -> Parser MessageReference
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
.:? Text
"fail_if_not_exists" Parser (Maybe Bool) -> Bool -> Parser Bool
forall a. Parser (Maybe a) -> a -> Parser a
.!= Bool
True
instance ToJSON MessageReference where
toJSON :: MessageReference -> Value
toJSON MessageReference{Bool
Maybe ChannelId
failIfNotExists :: Bool
referenceGuildId :: Maybe ChannelId
referenceChannelId :: Maybe ChannelId
referenceMessageId :: Maybe ChannelId
failIfNotExists :: MessageReference -> Bool
referenceGuildId :: MessageReference -> Maybe ChannelId
referenceChannelId :: MessageReference -> Maybe ChannelId
referenceMessageId :: MessageReference -> Maybe ChannelId
..} = [Pair] -> Value
object [(Text
name,Value
value) | (Text
name, Just Value
value) <-
[ (Text
"message_id", Maybe ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (Maybe ChannelId -> Value)
-> Maybe (Maybe ChannelId) -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ChannelId -> Maybe (Maybe ChannelId)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe ChannelId
referenceMessageId)
, (Text
"channel_id", Maybe ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (Maybe ChannelId -> Value)
-> Maybe (Maybe ChannelId) -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ChannelId -> Maybe (Maybe ChannelId)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe ChannelId
referenceChannelId)
, (Text
"guild_id", Maybe ChannelId -> Value
forall a. ToJSON a => a -> Value
toJSON (Maybe ChannelId -> Value)
-> Maybe (Maybe ChannelId) -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ChannelId -> Maybe (Maybe ChannelId)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe ChannelId
referenceGuildId)
, (Text
"fail_if_not_exists", Bool -> Value
forall a. ToJSON a => a -> Value
toJSON (Bool -> Value) -> Maybe Bool -> Maybe Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Bool -> Maybe Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
failIfNotExists)
] ]
instance Default MessageReference where
def :: MessageReference
def = MessageReference :: Maybe ChannelId
-> Maybe ChannelId -> Maybe ChannelId -> Bool -> MessageReference
MessageReference { referenceMessageId :: Maybe ChannelId
referenceMessageId = Maybe ChannelId
forall a. Maybe a
Nothing
, referenceChannelId :: Maybe ChannelId
referenceChannelId = Maybe ChannelId
forall a. Maybe a
Nothing
, referenceGuildId :: Maybe ChannelId
referenceGuildId = Maybe ChannelId
forall a. Maybe a
Nothing
, failIfNotExists :: Bool
failIfNotExists = Bool
False
}