calamity-0.12.1.0: Calamity/Types/Model/Channel/Webhook.hs
{-# LANGUAGE TemplateHaskell #-}
-- | Channel webhooks
module Calamity.Types.Model.Channel.Webhook (Webhook (..)) where
import {-# SOURCE #-} Calamity.Types.Model.Channel
import {-# SOURCE #-} Calamity.Types.Model.Guild.Guild
import Calamity.Types.Model.User
import Calamity.Types.Snowflake
import Data.Aeson ((.:), (.:?))
import Data.Aeson qualified as Aeson
import Data.Text (Text)
import Optics.TH
import TextShow.TH
data Webhook = Webhook
{ id :: Snowflake Webhook
, type_ :: Integer
, guildID :: Maybe (Snowflake Guild)
, channelID :: Maybe (Snowflake Channel)
, user :: Maybe (Snowflake User)
, name :: Text
, avatar :: Text
, token :: Maybe Text
}
deriving (Eq, Show)
deriving (HasID Webhook) via HasIDField "id" Webhook
instance Aeson.FromJSON Webhook where
parseJSON = Aeson.withObject "Webhook" $ \v -> do
user <- v .:? "user"
userID <- traverse (.: "id") user
Webhook
<$> v .: "id"
<*> v .: "type"
<*> v .:? "guild_id"
<*> v .:? "channel_id"
<*> pure userID
<*> v .: "name"
<*> v .: "avatar"
<*> v .:? "token"
$(deriveTextShow ''Webhook)
$(makeFieldLabelsNoPrefix ''Webhook)