calamity-0.2.0.0: Calamity/Types/Model/Guild/AuditLog.hs
-- | Audit Log models
module Calamity.Types.Model.Guild.AuditLog (
AuditLog (..),
AuditLogEntry (..),
AuditLogEntryInfo (..),
AuditLogChange (..),
AuditLogAction (..),
) where
import Calamity.Internal.AesonThings
import Calamity.Internal.SnowflakeMap (SnowflakeMap)
import Calamity.Types.Model.Channel
import Calamity.Types.Model.User
import Calamity.Types.Snowflake
import Data.Aeson
import Data.Scientific
import Data.Text (Text)
import GHC.Generics
import TextShow
import qualified TextShow.Generic as TSG
data AuditLog = AuditLog
{ webhooks :: SnowflakeMap Webhook
, users :: SnowflakeMap User
, auditLogEntries :: SnowflakeMap AuditLogEntry
}
deriving (Show, Generic)
deriving (TextShow) via TSG.FromGeneric AuditLog
deriving (FromJSON) via CalamityJSON AuditLog
data AuditLogEntry = AuditLogEntry
{ targetID :: Maybe (Snowflake ())
, changes :: [AuditLogChange]
, userID :: Snowflake User
, id :: Snowflake AuditLogEntry
, actionType :: !AuditLogAction
, options :: Maybe AuditLogEntryInfo
, reason :: Maybe Text
}
deriving (Show, Generic)
deriving (TextShow) via TSG.FromGeneric AuditLogEntry
deriving (FromJSON) via CalamityJSON AuditLogEntry
deriving (HasID User) via HasIDField "userID" AuditLogEntry
deriving (HasID AuditLogEntry) via HasIDField "id" AuditLogEntry
data AuditLogEntryInfo = AuditLogEntryInfo
{ deleteMemberDays :: Maybe Text
, membersRemoved :: Maybe Text
, channelID :: Maybe (Snowflake Channel)
, messageID :: Maybe (Snowflake Message)
, count :: Maybe Text
, id :: Maybe (Snowflake ())
, type_ :: Maybe Text
, roleName :: Maybe Text
}
deriving (Show, Generic)
deriving (TextShow) via TSG.FromGeneric AuditLogEntryInfo
deriving (FromJSON) via CalamityJSON AuditLogEntryInfo
data AuditLogChange = AuditLogChange
{ newValue :: Maybe Value
, oldValue :: Maybe Value
, key :: Text
}
deriving (Show, Generic)
deriving (TextShow) via FromStringShow AuditLogChange
deriving (FromJSON) via CalamityJSON AuditLogChange
data AuditLogAction
= GUILD_UPDATE
| CHANNEL_CREATE
| CHANNEL_UPDATE
| CHANNEL_DELETE
| CHANNEL_OVERWRITE_CREATE
| CHANNEL_OVERWRITE_UPDATE
| CHANNEL_OVERWRITE_DELETE
| MEMBER_KICK
| MEMBER_PRUNE
| MEMBER_BAN_ADD
| MEMBER_BAN_REMOVE
| MEMBER_UPDATE
| MEMBER_ROLE_UPDATE
| MEMBER_MOVE
| MEMBER_DISCONNECT
| BOT_ADD
| ROLE_CREATE
| ROLE_UPDATE
| ROLE_DELETE
| INVITE_CREATE
| INVITE_UPDATE
| INVITE_DELETE
| WEBHOOK_CREATE
| WEBHOOK_UPDATE
| WEBHOOK_DELETE
| EMOJI_CREATE
| EMOJI_UPDATE
| EMOJI_DELETE
| MESSAGE_DELETE
| MESSAGE_BULK_DELETE
| MESSAGE_PIN
| MESSAGE_UNPIN
| INTEGRATION_CREATE
| INTEGRATION_UPDATE
| INTEGRATION_DELETE
deriving (Show, Generic)
deriving (TextShow) via TSG.FromGeneric AuditLogAction
instance Enum AuditLogAction where
toEnum v = case v of
1 -> GUILD_UPDATE
10 -> CHANNEL_CREATE
11 -> CHANNEL_UPDATE
12 -> CHANNEL_DELETE
13 -> CHANNEL_OVERWRITE_CREATE
14 -> CHANNEL_OVERWRITE_UPDATE
15 -> CHANNEL_OVERWRITE_DELETE
20 -> MEMBER_KICK
21 -> MEMBER_PRUNE
22 -> MEMBER_BAN_ADD
23 -> MEMBER_BAN_REMOVE
24 -> MEMBER_UPDATE
25 -> MEMBER_ROLE_UPDATE
26 -> MEMBER_MOVE
27 -> MEMBER_DISCONNECT
28 -> BOT_ADD
30 -> ROLE_CREATE
31 -> ROLE_UPDATE
32 -> ROLE_DELETE
40 -> INVITE_CREATE
41 -> INVITE_UPDATE
42 -> INVITE_DELETE
50 -> WEBHOOK_CREATE
51 -> WEBHOOK_UPDATE
52 -> WEBHOOK_DELETE
60 -> EMOJI_CREATE
61 -> EMOJI_UPDATE
62 -> EMOJI_DELETE
72 -> MESSAGE_DELETE
73 -> MESSAGE_BULK_DELETE
74 -> MESSAGE_PIN
75 -> MESSAGE_UNPIN
80 -> INTEGRATION_CREATE
81 -> INTEGRATION_UPDATE
82 -> INTEGRATION_DELETE
_ -> error $ "Invalid AuditLogAction: " <> show v
fromEnum v = case v of
GUILD_UPDATE -> 1
CHANNEL_CREATE -> 10
CHANNEL_UPDATE -> 11
CHANNEL_DELETE -> 12
CHANNEL_OVERWRITE_CREATE -> 13
CHANNEL_OVERWRITE_UPDATE -> 14
CHANNEL_OVERWRITE_DELETE -> 15
MEMBER_KICK -> 20
MEMBER_PRUNE -> 21
MEMBER_BAN_ADD -> 22
MEMBER_BAN_REMOVE -> 23
MEMBER_UPDATE -> 24
MEMBER_ROLE_UPDATE -> 25
MEMBER_MOVE -> 26
MEMBER_DISCONNECT -> 27
BOT_ADD -> 28
ROLE_CREATE -> 30
ROLE_UPDATE -> 31
ROLE_DELETE -> 32
INVITE_CREATE -> 40
INVITE_UPDATE -> 41
INVITE_DELETE -> 42
WEBHOOK_CREATE -> 50
WEBHOOK_UPDATE -> 51
WEBHOOK_DELETE -> 52
EMOJI_CREATE -> 60
EMOJI_UPDATE -> 61
EMOJI_DELETE -> 62
MESSAGE_DELETE -> 72
MESSAGE_BULK_DELETE -> 73
MESSAGE_PIN -> 74
MESSAGE_UNPIN -> 75
INTEGRATION_CREATE -> 80
INTEGRATION_UPDATE -> 81
INTEGRATION_DELETE -> 82
instance FromJSON AuditLogAction where
parseJSON = withScientific "AuditLogAction" $ \n -> case toBoundedInteger @Int n of
Just v -> case v of -- no safe toEnum :S
1 -> pure GUILD_UPDATE
10 -> pure CHANNEL_CREATE
11 -> pure CHANNEL_UPDATE
12 -> pure CHANNEL_DELETE
13 -> pure CHANNEL_OVERWRITE_CREATE
14 -> pure CHANNEL_OVERWRITE_UPDATE
15 -> pure CHANNEL_OVERWRITE_DELETE
20 -> pure MEMBER_KICK
21 -> pure MEMBER_PRUNE
22 -> pure MEMBER_BAN_ADD
23 -> pure MEMBER_BAN_REMOVE
24 -> pure MEMBER_UPDATE
25 -> pure MEMBER_ROLE_UPDATE
26 -> pure MEMBER_MOVE
27 -> pure MEMBER_DISCONNECT
28 -> pure BOT_ADD
30 -> pure ROLE_CREATE
31 -> pure ROLE_UPDATE
32 -> pure ROLE_DELETE
40 -> pure INVITE_CREATE
41 -> pure INVITE_UPDATE
42 -> pure INVITE_DELETE
50 -> pure WEBHOOK_CREATE
51 -> pure WEBHOOK_UPDATE
52 -> pure WEBHOOK_DELETE
60 -> pure EMOJI_CREATE
61 -> pure EMOJI_UPDATE
62 -> pure EMOJI_DELETE
72 -> pure MESSAGE_DELETE
73 -> pure MESSAGE_BULK_DELETE
74 -> pure MESSAGE_PIN
75 -> pure MESSAGE_UNPIN
80 -> pure INTEGRATION_CREATE
81 -> pure INTEGRATION_UPDATE
82 -> pure INTEGRATION_DELETE
_ -> fail $ "Invalid AuditLogAction: " <> show n
Nothing -> fail $ "Invalid AuditLogAction: " <> show n
instance ToJSON AuditLogAction where
toJSON = toJSON @Int . fromEnum