{-# LANGUAGE GADTs #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE OverloadedStrings #-}
module Discord.Internal.Rest.AutoModeration
( AutoModerationRequest(..)
, MakeAutoModerationRule(..)
) where
import Data.Aeson
import Discord.Internal.Types
import Discord.Internal.Rest.Prelude
import Network.HTTP.Req ((/:), (/~))
import qualified Network.HTTP.Req as R
instance Request (AutoModerationRequest a) where
majorRoute :: AutoModerationRequest a -> String
majorRoute = AutoModerationRequest a -> String
forall a. AutoModerationRequest a -> String
autoModerationMajorRoute
jsonRequest :: AutoModerationRequest a -> JsonRequest
jsonRequest = AutoModerationRequest a -> JsonRequest
forall a. AutoModerationRequest a -> JsonRequest
autoModerationJsonRequest
data AutoModerationRequest a where
ListAutoModerationRules :: GuildId -> AutoModerationRequest [AutoModerationRule]
GetAutoModerationRule :: GuildId -> AutoModerationRuleId -> AutoModerationRequest AutoModerationRule
CreateAutoModerationRule :: GuildId -> MakeAutoModerationRule -> AutoModerationRequest ()
ModifyAutoModerationRule :: GuildId -> AutoModerationRuleId -> MakeAutoModerationRule -> AutoModerationRequest AutoModerationRule
DeleteAutoModerationRule :: GuildId -> AutoModerationRuleId -> AutoModerationRequest ()
data MakeAutoModerationRule = MakeAutoModerationRule
{ MakeAutoModerationRule -> String
makeAutoModerationRuleName :: String
, MakeAutoModerationRule -> AutoModerationRuleEventType
makeAutoModerationRuleEventType :: AutoModerationRuleEventType
, MakeAutoModerationRule -> AutoModerationRuleTriggerType
makeAutoModerationRuleTriggerType :: AutoModerationRuleTriggerType
, MakeAutoModerationRule -> Maybe AutoModerationRuleTriggerMetadata
makeAutoModerationRuleTriggerMetadata :: Maybe AutoModerationRuleTriggerMetadata
, MakeAutoModerationRule -> [AutoModerationRuleAction]
makeAutoModerationRuleActions :: [AutoModerationRuleAction]
, MakeAutoModerationRule -> Bool
makeAutoModerationRuleEnabled :: Bool
, MakeAutoModerationRule -> [RoleId]
makeAutoModerationRuleExemptRoles :: [RoleId]
, MakeAutoModerationRule -> [ChannelId]
makeAutoModerationRuleExemptChannels :: [ChannelId]
} deriving ( Int -> MakeAutoModerationRule -> ShowS
[MakeAutoModerationRule] -> ShowS
MakeAutoModerationRule -> String
(Int -> MakeAutoModerationRule -> ShowS)
-> (MakeAutoModerationRule -> String)
-> ([MakeAutoModerationRule] -> ShowS)
-> Show MakeAutoModerationRule
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MakeAutoModerationRule -> ShowS
showsPrec :: Int -> MakeAutoModerationRule -> ShowS
$cshow :: MakeAutoModerationRule -> String
show :: MakeAutoModerationRule -> String
$cshowList :: [MakeAutoModerationRule] -> ShowS
showList :: [MakeAutoModerationRule] -> ShowS
Show, ReadPrec [MakeAutoModerationRule]
ReadPrec MakeAutoModerationRule
Int -> ReadS MakeAutoModerationRule
ReadS [MakeAutoModerationRule]
(Int -> ReadS MakeAutoModerationRule)
-> ReadS [MakeAutoModerationRule]
-> ReadPrec MakeAutoModerationRule
-> ReadPrec [MakeAutoModerationRule]
-> Read MakeAutoModerationRule
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS MakeAutoModerationRule
readsPrec :: Int -> ReadS MakeAutoModerationRule
$creadList :: ReadS [MakeAutoModerationRule]
readList :: ReadS [MakeAutoModerationRule]
$creadPrec :: ReadPrec MakeAutoModerationRule
readPrec :: ReadPrec MakeAutoModerationRule
$creadListPrec :: ReadPrec [MakeAutoModerationRule]
readListPrec :: ReadPrec [MakeAutoModerationRule]
Read )
instance FromJSON MakeAutoModerationRule where
parseJSON :: Value -> Parser MakeAutoModerationRule
parseJSON = String
-> (Object -> Parser MakeAutoModerationRule)
-> Value
-> Parser MakeAutoModerationRule
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"MakeAutoModerationRule" ((Object -> Parser MakeAutoModerationRule)
-> Value -> Parser MakeAutoModerationRule)
-> (Object -> Parser MakeAutoModerationRule)
-> Value
-> Parser MakeAutoModerationRule
forall a b. (a -> b) -> a -> b
$ \Object
o ->
String
-> AutoModerationRuleEventType
-> AutoModerationRuleTriggerType
-> Maybe AutoModerationRuleTriggerMetadata
-> [AutoModerationRuleAction]
-> Bool
-> [RoleId]
-> [ChannelId]
-> MakeAutoModerationRule
MakeAutoModerationRule (String
-> AutoModerationRuleEventType
-> AutoModerationRuleTriggerType
-> Maybe AutoModerationRuleTriggerMetadata
-> [AutoModerationRuleAction]
-> Bool
-> [RoleId]
-> [ChannelId]
-> MakeAutoModerationRule)
-> Parser String
-> Parser
(AutoModerationRuleEventType
-> AutoModerationRuleTriggerType
-> Maybe AutoModerationRuleTriggerMetadata
-> [AutoModerationRuleAction]
-> Bool
-> [RoleId]
-> [ChannelId]
-> MakeAutoModerationRule)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser String
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"name"
Parser
(AutoModerationRuleEventType
-> AutoModerationRuleTriggerType
-> Maybe AutoModerationRuleTriggerMetadata
-> [AutoModerationRuleAction]
-> Bool
-> [RoleId]
-> [ChannelId]
-> MakeAutoModerationRule)
-> Parser AutoModerationRuleEventType
-> Parser
(AutoModerationRuleTriggerType
-> Maybe AutoModerationRuleTriggerMetadata
-> [AutoModerationRuleAction]
-> Bool
-> [RoleId]
-> [ChannelId]
-> MakeAutoModerationRule)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser AutoModerationRuleEventType
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"event_type"
Parser
(AutoModerationRuleTriggerType
-> Maybe AutoModerationRuleTriggerMetadata
-> [AutoModerationRuleAction]
-> Bool
-> [RoleId]
-> [ChannelId]
-> MakeAutoModerationRule)
-> Parser AutoModerationRuleTriggerType
-> Parser
(Maybe AutoModerationRuleTriggerMetadata
-> [AutoModerationRuleAction]
-> Bool
-> [RoleId]
-> [ChannelId]
-> MakeAutoModerationRule)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser AutoModerationRuleTriggerType
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"trigger_type"
Parser
(Maybe AutoModerationRuleTriggerMetadata
-> [AutoModerationRuleAction]
-> Bool
-> [RoleId]
-> [ChannelId]
-> MakeAutoModerationRule)
-> Parser (Maybe AutoModerationRuleTriggerMetadata)
-> Parser
([AutoModerationRuleAction]
-> Bool -> [RoleId] -> [ChannelId] -> MakeAutoModerationRule)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe AutoModerationRuleTriggerMetadata)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"trigger_metadata"
Parser
([AutoModerationRuleAction]
-> Bool -> [RoleId] -> [ChannelId] -> MakeAutoModerationRule)
-> Parser [AutoModerationRuleAction]
-> Parser
(Bool -> [RoleId] -> [ChannelId] -> MakeAutoModerationRule)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [AutoModerationRuleAction]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"actions"
Parser (Bool -> [RoleId] -> [ChannelId] -> MakeAutoModerationRule)
-> Parser Bool
-> Parser ([RoleId] -> [ChannelId] -> MakeAutoModerationRule)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"enabled"
Parser ([RoleId] -> [ChannelId] -> MakeAutoModerationRule)
-> Parser [RoleId]
-> Parser ([ChannelId] -> MakeAutoModerationRule)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [RoleId]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"exempt_roles"
Parser ([ChannelId] -> MakeAutoModerationRule)
-> Parser [ChannelId] -> Parser MakeAutoModerationRule
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [ChannelId]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"exempt_channels"
instance ToJSON MakeAutoModerationRule where
toJSON :: MakeAutoModerationRule -> Value
toJSON MakeAutoModerationRule{Bool
String
[RoleId]
[ChannelId]
[AutoModerationRuleAction]
Maybe AutoModerationRuleTriggerMetadata
AutoModerationRuleTriggerType
AutoModerationRuleEventType
makeAutoModerationRuleName :: MakeAutoModerationRule -> String
makeAutoModerationRuleEventType :: MakeAutoModerationRule -> AutoModerationRuleEventType
makeAutoModerationRuleTriggerType :: MakeAutoModerationRule -> AutoModerationRuleTriggerType
makeAutoModerationRuleTriggerMetadata :: MakeAutoModerationRule -> Maybe AutoModerationRuleTriggerMetadata
makeAutoModerationRuleActions :: MakeAutoModerationRule -> [AutoModerationRuleAction]
makeAutoModerationRuleEnabled :: MakeAutoModerationRule -> Bool
makeAutoModerationRuleExemptRoles :: MakeAutoModerationRule -> [RoleId]
makeAutoModerationRuleExemptChannels :: MakeAutoModerationRule -> [ChannelId]
makeAutoModerationRuleName :: String
makeAutoModerationRuleEventType :: AutoModerationRuleEventType
makeAutoModerationRuleTriggerType :: AutoModerationRuleTriggerType
makeAutoModerationRuleTriggerMetadata :: Maybe AutoModerationRuleTriggerMetadata
makeAutoModerationRuleActions :: [AutoModerationRuleAction]
makeAutoModerationRuleEnabled :: Bool
makeAutoModerationRuleExemptRoles :: [RoleId]
makeAutoModerationRuleExemptChannels :: [ChannelId]
..} = [Maybe Pair] -> Value
objectFromMaybes
[ Key
"name" Key -> String -> Maybe Pair
forall a. ToJSON a => Key -> a -> Maybe Pair
.== String
makeAutoModerationRuleName
, Key
"event_type" Key -> AutoModerationRuleEventType -> Maybe Pair
forall a. ToJSON a => Key -> a -> Maybe Pair
.== AutoModerationRuleEventType
makeAutoModerationRuleEventType
, Key
"trigger_type" Key -> AutoModerationRuleTriggerType -> Maybe Pair
forall a. ToJSON a => Key -> a -> Maybe Pair
.== AutoModerationRuleTriggerType
makeAutoModerationRuleTriggerType
, Key
"trigger_metadata" Key -> Maybe AutoModerationRuleTriggerMetadata -> Maybe Pair
forall a. ToJSON a => Key -> Maybe a -> Maybe Pair
.=? Maybe AutoModerationRuleTriggerMetadata
makeAutoModerationRuleTriggerMetadata
, Key
"actions" Key -> [AutoModerationRuleAction] -> Maybe Pair
forall a. ToJSON a => Key -> a -> Maybe Pair
.== [AutoModerationRuleAction]
makeAutoModerationRuleActions
, Key
"enabled" Key -> Bool -> Maybe Pair
forall a. ToJSON a => Key -> a -> Maybe Pair
.== Bool
makeAutoModerationRuleEnabled
, Key
"exempt_roles" Key -> [RoleId] -> Maybe Pair
forall a. ToJSON a => Key -> a -> Maybe Pair
.== [RoleId]
makeAutoModerationRuleExemptRoles
, Key
"exempt_channels" Key -> [ChannelId] -> Maybe Pair
forall a. ToJSON a => Key -> a -> Maybe Pair
.== [ChannelId]
makeAutoModerationRuleExemptChannels
]
autoModerationMajorRoute :: AutoModerationRequest a -> String
autoModerationMajorRoute :: forall a. AutoModerationRequest a -> String
autoModerationMajorRoute AutoModerationRequest a
c = case AutoModerationRequest a
c of
(ListAutoModerationRules GuildId
g) -> String
"guild " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> GuildId -> String
forall a. Show a => a -> String
show GuildId
g
(GetAutoModerationRule GuildId
g AutoModerationRuleId
_) -> String
"guild " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> GuildId -> String
forall a. Show a => a -> String
show GuildId
g
(CreateAutoModerationRule GuildId
g MakeAutoModerationRule
_) -> String
"guild " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> GuildId -> String
forall a. Show a => a -> String
show GuildId
g
(ModifyAutoModerationRule GuildId
g AutoModerationRuleId
_ MakeAutoModerationRule
_) -> String
"guild " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> GuildId -> String
forall a. Show a => a -> String
show GuildId
g
(DeleteAutoModerationRule GuildId
g AutoModerationRuleId
_) -> String
"guild " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> GuildId -> String
forall a. Show a => a -> String
show GuildId
g
autoModerationJsonRequest :: AutoModerationRequest r -> JsonRequest
autoModerationJsonRequest :: forall a. AutoModerationRequest a -> JsonRequest
autoModerationJsonRequest AutoModerationRequest r
c = case AutoModerationRequest r
c of
(ListAutoModerationRules GuildId
guild) ->
Url 'Https -> Option 'Https -> JsonRequest
Get (Url 'Https
guilds Url 'Https -> GuildId -> Url 'Https
forall a (scheme :: Scheme).
ToHttpApiData a =>
Url scheme -> a -> Url scheme
/~ GuildId
guild Url 'Https -> Text -> Url 'Https
forall (scheme :: Scheme). Url scheme -> Text -> Url scheme
/: Text
"auto-moderation" Url 'Https -> Text -> Url 'Https
forall (scheme :: Scheme). Url scheme -> Text -> Url scheme
/: Text
"rules") Option 'Https
forall a. Monoid a => a
mempty
(GetAutoModerationRule GuildId
guild AutoModerationRuleId
amid) ->
Url 'Https -> Option 'Https -> JsonRequest
Get (Url 'Https
guilds Url 'Https -> GuildId -> Url 'Https
forall a (scheme :: Scheme).
ToHttpApiData a =>
Url scheme -> a -> Url scheme
/~ GuildId
guild Url 'Https -> Text -> Url 'Https
forall (scheme :: Scheme). Url scheme -> Text -> Url scheme
/: Text
"auto-moderation" Url 'Https -> Text -> Url 'Https
forall (scheme :: Scheme). Url scheme -> Text -> Url scheme
/: Text
"rules" Url 'Https -> AutoModerationRuleId -> Url 'Https
forall a (scheme :: Scheme).
ToHttpApiData a =>
Url scheme -> a -> Url scheme
/~ AutoModerationRuleId
amid) Option 'Https
forall a. Monoid a => a
mempty
(CreateAutoModerationRule GuildId
guild MakeAutoModerationRule
autoModRule) ->
let body :: RestIO (ReqBodyJson MakeAutoModerationRule)
body = ReqBodyJson MakeAutoModerationRule
-> RestIO (ReqBodyJson MakeAutoModerationRule)
forall a. a -> RestIO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (MakeAutoModerationRule -> ReqBodyJson MakeAutoModerationRule
forall a. a -> ReqBodyJson a
R.ReqBodyJson MakeAutoModerationRule
autoModRule)
in Url 'Https
-> RestIO (ReqBodyJson MakeAutoModerationRule)
-> Option 'Https
-> JsonRequest
forall a.
HttpBody a =>
Url 'Https -> RestIO a -> Option 'Https -> JsonRequest
Post (Url 'Https
guilds Url 'Https -> GuildId -> Url 'Https
forall a (scheme :: Scheme).
ToHttpApiData a =>
Url scheme -> a -> Url scheme
/~ GuildId
guild Url 'Https -> Text -> Url 'Https
forall (scheme :: Scheme). Url scheme -> Text -> Url scheme
/: Text
"auto-moderation" Url 'Https -> Text -> Url 'Https
forall (scheme :: Scheme). Url scheme -> Text -> Url scheme
/: Text
"rules") RestIO (ReqBodyJson MakeAutoModerationRule)
body Option 'Https
forall a. Monoid a => a
mempty
(ModifyAutoModerationRule GuildId
guild AutoModerationRuleId
amid MakeAutoModerationRule
patch) ->
let body :: RestIO (ReqBodyJson MakeAutoModerationRule)
body = ReqBodyJson MakeAutoModerationRule
-> RestIO (ReqBodyJson MakeAutoModerationRule)
forall a. a -> RestIO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (MakeAutoModerationRule -> ReqBodyJson MakeAutoModerationRule
forall a. a -> ReqBodyJson a
R.ReqBodyJson MakeAutoModerationRule
patch)
in Url 'Https
-> RestIO (ReqBodyJson MakeAutoModerationRule)
-> Option 'Https
-> JsonRequest
forall a.
HttpBody a =>
Url 'Https -> RestIO a -> Option 'Https -> JsonRequest
Patch (Url 'Https
guilds Url 'Https -> GuildId -> Url 'Https
forall a (scheme :: Scheme).
ToHttpApiData a =>
Url scheme -> a -> Url scheme
/~ GuildId
guild Url 'Https -> Text -> Url 'Https
forall (scheme :: Scheme). Url scheme -> Text -> Url scheme
/: Text
"auto-moderation" Url 'Https -> Text -> Url 'Https
forall (scheme :: Scheme). Url scheme -> Text -> Url scheme
/: Text
"rules" Url 'Https -> AutoModerationRuleId -> Url 'Https
forall a (scheme :: Scheme).
ToHttpApiData a =>
Url scheme -> a -> Url scheme
/~ AutoModerationRuleId
amid) RestIO (ReqBodyJson MakeAutoModerationRule)
body Option 'Https
forall a. Monoid a => a
mempty
(DeleteAutoModerationRule GuildId
guild AutoModerationRuleId
amid) ->
Url 'Https -> Option 'Https -> JsonRequest
Delete (Url 'Https
guilds Url 'Https -> GuildId -> Url 'Https
forall a (scheme :: Scheme).
ToHttpApiData a =>
Url scheme -> a -> Url scheme
/~ GuildId
guild Url 'Https -> Text -> Url 'Https
forall (scheme :: Scheme). Url scheme -> Text -> Url scheme
/: Text
"auto-moderation" Url 'Https -> Text -> Url 'Https
forall (scheme :: Scheme). Url scheme -> Text -> Url scheme
/: Text
"rules" Url 'Https -> AutoModerationRuleId -> Url 'Https
forall a (scheme :: Scheme).
ToHttpApiData a =>
Url scheme -> a -> Url scheme
/~ AutoModerationRuleId
amid) Option 'Https
forall a. Monoid a => a
mempty
where
guilds :: R.Url 'R.Https
guilds :: Url 'Https
guilds = Url 'Https
baseUrl Url 'Https -> Text -> Url 'Https
forall (scheme :: Scheme). Url scheme -> Text -> Url scheme
/: Text
"guilds"