packages feed

calamity-0.1.26.0: Calamity/Types/Model/Guild/Member.hs

-- | Guild Members
module Calamity.Types.Model.Guild.Member (Member (..)) where

import Calamity.Internal.AesonThings
import Calamity.Internal.Utils ()
import {-# SOURCE #-} Calamity.Types.Model.Guild.Guild
import Calamity.Types.Model.Guild.Role
import Calamity.Types.Model.User
import Calamity.Types.Snowflake
import Control.DeepSeq (NFData)
import Data.Aeson
import Data.Text.Lazy (Text)
import Data.Time
import Data.Vector.Unboxing (Vector)
import Data.Word (Word64)
import GHC.Generics
import TextShow
import qualified TextShow.Generic as TSG

data Member = Member
  { id :: Snowflake User
  , username :: Text
  , discriminator :: Text
  , bot :: Maybe Bool
  , avatar :: Maybe Text
  , mfaEnabled :: Maybe Bool
  , verified :: Maybe Bool
  , email :: Maybe Text
  , flags :: Maybe Word64
  , premiumType :: Maybe Word64
  , guildID :: Snowflake Guild
  , nick :: Maybe Text
  , roles :: Vector (Snowflake Role)
  , joinedAt :: UTCTime
  , deaf :: Bool
  , mute :: Bool
  }
  deriving (Eq, Show, Generic, NFData)
  deriving (TextShow) via TSG.FromGeneric Member
  deriving
    (FromJSON)
    via WithSpecialCases
          '[ "user"
              `ExtractFields` [ "id"
                              , "username"
                              , "discriminator"
                              , "bot"
                              , "avatar"
                              , "mfa_enabled"
                              , "verified"
                              , "email"
                              , "flags"
                              , "premium_type"
                              ]
           ]
          Member
  deriving (HasID Guild) via HasIDField "guildID" Member
  deriving (HasID Member) via HasIDFieldCoerce "id" Member User
  deriving (HasID User) via HasIDField "id" Member