calamity-0.1.26.0: Calamity/Types/Model/Guild/Permissions.hs
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE NoDeriveAnyClass #-}
-- | Guild permissions
module Calamity.Types.Model.Guild.Permissions
( Permissions (..),
createInstantInvite,
kickMembers,
banMembers,
administrator,
manageChannels,
manageGuild,
addReactions,
viewAuditLog,
prioritySpeaker,
stream,
viewChannel,
sendMessages,
sendTtsMessages,
manageMessages,
embedLinks,
attachFiles,
readMessageHistory,
mentionEveryone,
useExternalEmojis,
viewGuildInsights,
connect,
speak,
muteMembers,
deafenMembers,
moveMembers,
useVad,
changeNickname,
manageNicknames,
manageRoles,
manageWebhooks,
manageEmojis,
)
where
import Data.Aeson (FromJSON (..), ToJSON (..))
import Data.Aeson.Types (parseFail)
import Data.Flags ()
import Data.Flags.TH
import Data.Text.Read (decimal)
import Data.Word
import TextShow
import Control.DeepSeq (NFData)
$( bitmaskWrapper
"Permissions"
''Word64
[]
[ ("createInstantInvite", 0x00000001),
("kickMembers", 0x00000002),
("banMembers", 0x00000004),
("administrator", 0x00000008),
("manageChannels", 0x00000010),
("manageGuild", 0x00000020),
("addReactions", 0x00000040),
("viewAuditLog", 0x00000080),
("prioritySpeaker", 0x00000100),
("stream", 0x00000200),
("viewChannel", 0x00000400),
("sendMessages", 0x00000800),
("sendTtsMessages", 0x00001000),
("manageMessages", 0x00002000),
("embedLinks", 0x00004000),
("attachFiles", 0x00008000),
("readMessageHistory", 0x00010000),
("mentionEveryone", 0x00020000),
("useExternalEmojis", 0x00040000),
("viewGuildInsights", 0x00080000),
("connect", 0x00100000),
("speak", 0x00200000),
("muteMembers", 0x00400000),
("deafenMembers", 0x00800000),
("moveMembers", 0x01000000),
("useVad", 0x02000000),
("changeNickname", 0x04000000),
("manageNicknames", 0x08000000),
("manageRoles", 0x10000000),
("manageWebhooks", 0x20000000),
("manageEmojis", 0x4000000)
]
)
instance ToJSON Permissions where
toJSON = toJSON . showt
toEncoding = toEncoding . showt
instance FromJSON Permissions where
parseJSON a = do
asText <- parseJSON a
case decimal asText of
Right (n, _) -> pure $ Permissions n
Left e -> parseFail e
deriving via FromStringShow Permissions instance TextShow Permissions
deriving via Word64 instance NFData Permissions