module Network.Discord.Rest.Guild
(
GuildRequest(..)
) where
import Data.Aeson
import Data.Hashable
import Data.Monoid (mempty)
import Data.Text as T
import Network.HTTP.Req ((=:))
import Network.Discord.Rest.Prelude
import Network.Discord.Types
import Network.Discord.Rest.HTTP
data GuildRequest a where
GetGuild :: Snowflake -> GuildRequest Guild
ModifyGuild :: ToJSON a => Snowflake -> a -> GuildRequest Guild
DeleteGuild :: Snowflake -> GuildRequest Guild
GetGuildChannels :: Snowflake -> GuildRequest [Channel]
CreateGuildChannel :: ToJSON a => Snowflake -> a -> GuildRequest Channel
ModifyChanPosition :: ToJSON a => Snowflake -> a -> GuildRequest [Channel]
GetGuildMember :: Snowflake -> Snowflake -> GuildRequest Member
ListGuildMembers :: Snowflake -> Range -> GuildRequest [Member]
AddGuildMember :: ToJSON a => Snowflake -> Snowflake -> a
-> GuildRequest Member
ModifyGuildMember :: ToJSON a => Snowflake -> Snowflake -> a
-> GuildRequest ()
RemoveGuildMember :: Snowflake -> Snowflake -> GuildRequest ()
GetGuildBans :: Snowflake -> GuildRequest [User]
CreateGuildBan :: Snowflake -> Snowflake -> Integer -> GuildRequest ()
RemoveGuildBan :: Snowflake -> Snowflake -> GuildRequest ()
GetGuildRoles :: Snowflake -> GuildRequest [Role]
CreateGuildRole :: Snowflake -> GuildRequest Role
ModifyGuildRolePositions :: ToJSON a => Snowflake -> [a] -> GuildRequest [Role]
ModifyGuildRole :: ToJSON a => Snowflake -> Snowflake -> a
-> GuildRequest Role
DeleteGuildRole :: Snowflake -> Snowflake -> GuildRequest Role
GetGuildPruneCount :: Snowflake -> Integer -> GuildRequest Object
BeginGuildPrune :: Snowflake -> Integer -> GuildRequest Object
GetGuildVoiceRegions :: Snowflake -> GuildRequest [VoiceRegion]
GetGuildInvites :: Snowflake -> GuildRequest [Invite]
GetGuildIntegrations :: Snowflake -> GuildRequest [Integration]
CreateGuildIntegration :: ToJSON a => Snowflake -> a -> GuildRequest ()
ModifyGuildIntegration :: ToJSON a => Snowflake -> Snowflake -> a -> GuildRequest ()
DeleteGuildIntegration :: Snowflake -> Snowflake -> GuildRequest ()
SyncGuildIntegration :: Snowflake -> Snowflake -> GuildRequest ()
GetGuildEmbed :: Snowflake -> GuildRequest GuildEmbed
ModifyGuildEmbed :: Snowflake -> GuildEmbed -> GuildRequest GuildEmbed
instance Hashable (GuildRequest a) where
hashWithSalt s (GetGuild g) = hashWithSalt s ("guild"::Text, g)
hashWithSalt s (ModifyGuild g _) = hashWithSalt s ("guild"::Text, g)
hashWithSalt s (DeleteGuild g) = hashWithSalt s ("guild"::Text, g)
hashWithSalt s (GetGuildChannels g) = hashWithSalt s ("guild_chan"::Text, g)
hashWithSalt s (CreateGuildChannel g _) = hashWithSalt s ("guild_chan"::Text, g)
hashWithSalt s (ModifyChanPosition g _) = hashWithSalt s ("guild_chan"::Text, g)
hashWithSalt s (GetGuildMember g _) = hashWithSalt s ("guild_memb"::Text, g)
hashWithSalt s (ListGuildMembers g _) = hashWithSalt s ("guild_membs"::Text, g)
hashWithSalt s (AddGuildMember g _ _) = hashWithSalt s ("guild_memb"::Text, g)
hashWithSalt s (ModifyGuildMember g _ _) = hashWithSalt s ("guild_memb"::Text, g)
hashWithSalt s (RemoveGuildMember g _) = hashWithSalt s ("guild_memb"::Text, g)
hashWithSalt s (GetGuildBans g) = hashWithSalt s ("guild_bans"::Text, g)
hashWithSalt s (CreateGuildBan g _ _) = hashWithSalt s ("guild_ban" ::Text, g)
hashWithSalt s (RemoveGuildBan g _) = hashWithSalt s ("guild_ban" ::Text, g)
hashWithSalt s (GetGuildRoles g) = hashWithSalt s ("guild_roles"::Text, g)
hashWithSalt s (CreateGuildRole g) = hashWithSalt s ("guild_roles"::Text, g)
hashWithSalt s (ModifyGuildRolePositions g _)
= hashWithSalt s ("guild_roles"::Text, g)
hashWithSalt s (ModifyGuildRole g _ _) = hashWithSalt s ("guild_role" ::Text, g)
hashWithSalt s (DeleteGuildRole g _ ) = hashWithSalt s ("guild_role" ::Text, g)
hashWithSalt s (GetGuildPruneCount g _) = hashWithSalt s ("guild_prune"::Text, g)
hashWithSalt s (BeginGuildPrune g _) = hashWithSalt s ("guild_prune"::Text, g)
hashWithSalt s (GetGuildVoiceRegions g) = hashWithSalt s ("guild_voice"::Text, g)
hashWithSalt s (GetGuildInvites g) = hashWithSalt s ("guild_invit"::Text, g)
hashWithSalt s (GetGuildIntegrations g) = hashWithSalt s ("guild_integ"::Text, g)
hashWithSalt s (CreateGuildIntegration g _)
= hashWithSalt s ("guild_integ"::Text, g)
hashWithSalt s (ModifyGuildIntegration g _ _)
= hashWithSalt s ("guild_intgr"::Text, g)
hashWithSalt s (DeleteGuildIntegration g _)
= hashWithSalt s ("guild_intgr"::Text, g)
hashWithSalt s (SyncGuildIntegration g _)= hashWithSalt s ("guild_sync" ::Text, g)
hashWithSalt s (GetGuildEmbed g) = hashWithSalt s ("guild_embed"::Text, g)
hashWithSalt s (ModifyGuildEmbed g _) = hashWithSalt s ("guild_embed"::Text, g)
instance (FromJSON a) => DoFetch GuildRequest a where
doFetch = go
where
url = baseUrl /: "guilds"
go :: DiscordRest m => GuildRequest a -> m a
go r@(GetGuild guild) = makeRequest r
$ Get (url // guild) mempty
go r@(ModifyGuild guild patch) = makeRequest r
$ Patch (url // guild) (ReqBodyJson patch) mempty
go r@(DeleteGuild guild) = makeRequest r
$ Delete (url // guild) mempty
go r@(GetGuildChannels guild) = makeRequest r
$ Get (url // guild /: "channels") mempty
go r@(CreateGuildChannel guild patch) = makeRequest r
$ Post (url // guild /: "channels") (ReqBodyJson patch) mempty
go r@(ModifyChanPosition guild patch) = makeRequest r
$ Post (url // guild /: "channels") (ReqBodyJson patch) mempty
go r@(GetGuildMember guild member) = makeRequest r
$ Get (url // guild /: "members" // member) mempty
go r@(ListGuildMembers guild range) = makeRequest r
$ Get (url // guild /: "members") (toQueryString range)
go r@(AddGuildMember guild user patch) = makeRequest r
$ Put (url // guild /: "members" // user) (ReqBodyJson patch) mempty
go r@(ModifyGuildMember guild member patch) = makeRequest r
$ Patch (url // guild /: "members" // member) (ReqBodyJson patch) mempty
go r@(RemoveGuildMember guild user) = makeRequest r
$ Delete (url // guild /: "members" // user) mempty
go r@(GetGuildBans guild) = makeRequest r
$ Get (url // guild /: "bans") mempty
go r@(CreateGuildBan guild user msgs) = makeRequest r
$ Put (url // guild /: "bans" // user)
(ReqBodyJson $ object [ "delete-message-days" .= msgs])
mempty
go r@(RemoveGuildBan guild ban) = makeRequest r
$ Delete (url // guild /: "bans" // ban) mempty
go r@(GetGuildRoles guild) = makeRequest r
$ Get (url // guild /: "roles") mempty
go r@(CreateGuildRole guild) = makeRequest r
$ Post (url // guild /: "roles")
NoReqBody mempty
go r@(ModifyGuildRolePositions guild patch) = makeRequest r
$ Post (url // guild /: "roles")
(ReqBodyJson patch) mempty
go r@(ModifyGuildRole guild role patch) = makeRequest r
$ Post (url // guild /: "roles" // role)
(ReqBodyJson patch) mempty
go r@(DeleteGuildRole guild role) = makeRequest r
$ Delete (url // guild /: "roles" // role) mempty
go r@(GetGuildPruneCount guild days) = makeRequest r
$ Get (url // guild /: "prune") ("days" =: days)
go r@(BeginGuildPrune guild days) = makeRequest r
$ Post (url // guild /: "prune")
NoReqBody ("days" =: days)
go r@(GetGuildVoiceRegions guild) = makeRequest r
$ Get (url // guild /: "regions") mempty
go r@(GetGuildInvites guild) = makeRequest r
$ Get (url // guild /: "invites") mempty
go r@(GetGuildIntegrations guild) = makeRequest r
$ Get (url // guild /: "integrations") mempty
go r@(CreateGuildIntegration guild patch) = makeRequest r
$ Post (url // guild /: "integrations")
(ReqBodyJson patch) mempty
go r@(ModifyGuildIntegration guild integ patch) = makeRequest r
$ Patch (url // guild /: "integrations" // integ)
(ReqBodyJson patch) mempty
go r@(DeleteGuildIntegration guild integ) = makeRequest r
$ Delete (url // guild /: "integrations" // integ)
mempty
go r@(SyncGuildIntegration guild integ) = makeRequest r
$ Post (url // guild /: "integrations" // integ)
NoReqBody mempty
go r@(GetGuildEmbed guild) = makeRequest r
$ Get (url // guild /: "integrations") mempty
go r@(ModifyGuildEmbed guild patch) = makeRequest r
$ Patch (url // guild /: "embed")
(ReqBodyJson patch) mempty