-- | Channel endpoints
module Calamity.HTTP.Channel (
  ChannelRequest (..),
  CreateMessageOptions (..),
  EditMessageData (..),
  editMessageContent,
  editMessageEmbed,
  editMessageFlags,
  editMessageAllowedMentions,
  ChannelUpdate (..),
  AllowedMentionType (..),
  AllowedMentions (..),
  ChannelMessagesFilter (..),
  ChannelMessagesLimit (..),
  GetReactionsOptions (..),
  CreateChannelInviteOptions (..),
  GroupDMAddRecipientOptions (..),
) where

import Calamity.HTTP.Internal.Request
import Calamity.HTTP.Internal.Route
import Calamity.Internal.AesonThings
import Calamity.Types.Model.Channel
import Calamity.Types.Model.Guild
import Calamity.Types.Model.User
import Calamity.Types.Snowflake
import Control.Lens hiding ((.=))
import Data.Aeson
import Data.ByteString.Lazy (ByteString)
import Data.Default.Class
import Data.Generics.Product.Subtype (upcast)
import qualified Data.HashMap.Strict as H
import Data.Text (Text)
import qualified Data.Text as S
import Data.Word
import GHC.Generics
import Network.HTTP.Client.MultipartFormData
import Network.HTTP.Req
import Network.Mime
import TextShow

data CreateMessageOptions = CreateMessageOptions
  { CreateMessageOptions -> Maybe Text
content :: Maybe Text
  , CreateMessageOptions -> Maybe Text
nonce :: Maybe Text
  , CreateMessageOptions -> Maybe Bool
tts :: Maybe Bool
  , CreateMessageOptions -> Maybe (Text, ByteString)
file :: Maybe (Text, ByteString)
  , CreateMessageOptions -> Maybe Embed
embed :: Maybe Embed
  , CreateMessageOptions -> Maybe AllowedMentions
allowedMentions :: Maybe AllowedMentions
  }
  deriving (Int -> CreateMessageOptions -> ShowS
[CreateMessageOptions] -> ShowS
CreateMessageOptions -> String
(Int -> CreateMessageOptions -> ShowS)
-> (CreateMessageOptions -> String)
-> ([CreateMessageOptions] -> ShowS)
-> Show CreateMessageOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateMessageOptions] -> ShowS
$cshowList :: [CreateMessageOptions] -> ShowS
show :: CreateMessageOptions -> String
$cshow :: CreateMessageOptions -> String
showsPrec :: Int -> CreateMessageOptions -> ShowS
$cshowsPrec :: Int -> CreateMessageOptions -> ShowS
Show, (forall x. CreateMessageOptions -> Rep CreateMessageOptions x)
-> (forall x. Rep CreateMessageOptions x -> CreateMessageOptions)
-> Generic CreateMessageOptions
forall x. Rep CreateMessageOptions x -> CreateMessageOptions
forall x. CreateMessageOptions -> Rep CreateMessageOptions x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateMessageOptions x -> CreateMessageOptions
$cfrom :: forall x. CreateMessageOptions -> Rep CreateMessageOptions x
Generic, CreateMessageOptions
CreateMessageOptions -> Default CreateMessageOptions
forall a. a -> Default a
def :: CreateMessageOptions
$cdef :: CreateMessageOptions
Default)

data AllowedMentionType
  = AllowedMentionRoles
  | AllowedMentionUsers
  | AllowedMentionEveryone
  deriving (Int -> AllowedMentionType -> ShowS
[AllowedMentionType] -> ShowS
AllowedMentionType -> String
(Int -> AllowedMentionType -> ShowS)
-> (AllowedMentionType -> String)
-> ([AllowedMentionType] -> ShowS)
-> Show AllowedMentionType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AllowedMentionType] -> ShowS
$cshowList :: [AllowedMentionType] -> ShowS
show :: AllowedMentionType -> String
$cshow :: AllowedMentionType -> String
showsPrec :: Int -> AllowedMentionType -> ShowS
$cshowsPrec :: Int -> AllowedMentionType -> ShowS
Show, (forall x. AllowedMentionType -> Rep AllowedMentionType x)
-> (forall x. Rep AllowedMentionType x -> AllowedMentionType)
-> Generic AllowedMentionType
forall x. Rep AllowedMentionType x -> AllowedMentionType
forall x. AllowedMentionType -> Rep AllowedMentionType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AllowedMentionType x -> AllowedMentionType
$cfrom :: forall x. AllowedMentionType -> Rep AllowedMentionType x
Generic)

instance ToJSON AllowedMentionType where
  toJSON :: AllowedMentionType -> Value
toJSON AllowedMentionType
AllowedMentionRoles = Text -> Value
String Text
"roles"
  toJSON AllowedMentionType
AllowedMentionUsers = Text -> Value
String Text
"users"
  toJSON AllowedMentionType
AllowedMentionEveryone = Text -> Value
String Text
"everyone"

data AllowedMentions = AllowedMentions
  { AllowedMentions -> [AllowedMentionType]
parse :: [AllowedMentionType]
  , AllowedMentions -> [Snowflake Role]
roles :: [Snowflake Role]
  , AllowedMentions -> [Snowflake User]
users :: [Snowflake User]
  }
  deriving (Int -> AllowedMentions -> ShowS
[AllowedMentions] -> ShowS
AllowedMentions -> String
(Int -> AllowedMentions -> ShowS)
-> (AllowedMentions -> String)
-> ([AllowedMentions] -> ShowS)
-> Show AllowedMentions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AllowedMentions] -> ShowS
$cshowList :: [AllowedMentions] -> ShowS
show :: AllowedMentions -> String
$cshow :: AllowedMentions -> String
showsPrec :: Int -> AllowedMentions -> ShowS
$cshowsPrec :: Int -> AllowedMentions -> ShowS
Show, (forall x. AllowedMentions -> Rep AllowedMentions x)
-> (forall x. Rep AllowedMentions x -> AllowedMentions)
-> Generic AllowedMentions
forall x. Rep AllowedMentions x -> AllowedMentions
forall x. AllowedMentions -> Rep AllowedMentions x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AllowedMentions x -> AllowedMentions
$cfrom :: forall x. AllowedMentions -> Rep AllowedMentions x
Generic, AllowedMentions
AllowedMentions -> Default AllowedMentions
forall a. a -> Default a
def :: AllowedMentions
$cdef :: AllowedMentions
Default)
  deriving ([AllowedMentions] -> Encoding
[AllowedMentions] -> Value
AllowedMentions -> Encoding
AllowedMentions -> Value
(AllowedMentions -> Value)
-> (AllowedMentions -> Encoding)
-> ([AllowedMentions] -> Value)
-> ([AllowedMentions] -> Encoding)
-> ToJSON AllowedMentions
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [AllowedMentions] -> Encoding
$ctoEncodingList :: [AllowedMentions] -> Encoding
toJSONList :: [AllowedMentions] -> Value
$ctoJSONList :: [AllowedMentions] -> Value
toEncoding :: AllowedMentions -> Encoding
$ctoEncoding :: AllowedMentions -> Encoding
toJSON :: AllowedMentions -> Value
$ctoJSON :: AllowedMentions -> Value
ToJSON) via CalamityJSON AllowedMentions

instance Semigroup AllowedMentions where
  AllowedMentions [AllowedMentionType]
p0 [Snowflake Role]
r0 [Snowflake User]
u0 <> :: AllowedMentions -> AllowedMentions -> AllowedMentions
<> AllowedMentions [AllowedMentionType]
p1 [Snowflake Role]
r1 [Snowflake User]
u1 =
    [AllowedMentionType]
-> [Snowflake Role] -> [Snowflake User] -> AllowedMentions
AllowedMentions ([AllowedMentionType]
p0 [AllowedMentionType]
-> [AllowedMentionType] -> [AllowedMentionType]
forall a. Semigroup a => a -> a -> a
<> [AllowedMentionType]
p1) ([Snowflake Role]
r0 [Snowflake Role] -> [Snowflake Role] -> [Snowflake Role]
forall a. Semigroup a => a -> a -> a
<> [Snowflake Role]
r1) ([Snowflake User]
u0 [Snowflake User] -> [Snowflake User] -> [Snowflake User]
forall a. Semigroup a => a -> a -> a
<> [Snowflake User]
u1)

instance Monoid AllowedMentions where
  mempty :: AllowedMentions
mempty = AllowedMentions
forall a. Default a => a
def

data CreateMessageJson = CreateMessageJson
  { CreateMessageJson -> Maybe Text
content :: Maybe Text
  , CreateMessageJson -> Maybe Text
nonce :: Maybe Text
  , CreateMessageJson -> Maybe Bool
tts :: Maybe Bool
  , CreateMessageJson -> Maybe Embed
embed :: Maybe Embed
  }
  deriving (Int -> CreateMessageJson -> ShowS
[CreateMessageJson] -> ShowS
CreateMessageJson -> String
(Int -> CreateMessageJson -> ShowS)
-> (CreateMessageJson -> String)
-> ([CreateMessageJson] -> ShowS)
-> Show CreateMessageJson
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateMessageJson] -> ShowS
$cshowList :: [CreateMessageJson] -> ShowS
show :: CreateMessageJson -> String
$cshow :: CreateMessageJson -> String
showsPrec :: Int -> CreateMessageJson -> ShowS
$cshowsPrec :: Int -> CreateMessageJson -> ShowS
Show, (forall x. CreateMessageJson -> Rep CreateMessageJson x)
-> (forall x. Rep CreateMessageJson x -> CreateMessageJson)
-> Generic CreateMessageJson
forall x. Rep CreateMessageJson x -> CreateMessageJson
forall x. CreateMessageJson -> Rep CreateMessageJson x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateMessageJson x -> CreateMessageJson
$cfrom :: forall x. CreateMessageJson -> Rep CreateMessageJson x
Generic)
  deriving ([CreateMessageJson] -> Encoding
[CreateMessageJson] -> Value
CreateMessageJson -> Encoding
CreateMessageJson -> Value
(CreateMessageJson -> Value)
-> (CreateMessageJson -> Encoding)
-> ([CreateMessageJson] -> Value)
-> ([CreateMessageJson] -> Encoding)
-> ToJSON CreateMessageJson
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [CreateMessageJson] -> Encoding
$ctoEncodingList :: [CreateMessageJson] -> Encoding
toJSONList :: [CreateMessageJson] -> Value
$ctoJSONList :: [CreateMessageJson] -> Value
toEncoding :: CreateMessageJson -> Encoding
$ctoEncoding :: CreateMessageJson -> Encoding
toJSON :: CreateMessageJson -> Value
$ctoJSON :: CreateMessageJson -> Value
ToJSON) via CalamityJSON CreateMessageJson

{- | Parameters to the Edit Message endpoint.

 Use the provided methods (@editMessageX@) to create a value with the
 field set, use the Semigroup instance to union the values.

 ==== Examples

 >>> encode $ editMessageContent (Just "test") <> editMessageFlags Nothing
 "{\"nick\":\"test\",\"deaf\":null}"
-}
newtype EditMessageData = EditMessageData Object
  deriving (Int -> EditMessageData -> ShowS
[EditMessageData] -> ShowS
EditMessageData -> String
(Int -> EditMessageData -> ShowS)
-> (EditMessageData -> String)
-> ([EditMessageData] -> ShowS)
-> Show EditMessageData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EditMessageData] -> ShowS
$cshowList :: [EditMessageData] -> ShowS
show :: EditMessageData -> String
$cshow :: EditMessageData -> String
showsPrec :: Int -> EditMessageData -> ShowS
$cshowsPrec :: Int -> EditMessageData -> ShowS
Show, (forall x. EditMessageData -> Rep EditMessageData x)
-> (forall x. Rep EditMessageData x -> EditMessageData)
-> Generic EditMessageData
forall x. Rep EditMessageData x -> EditMessageData
forall x. EditMessageData -> Rep EditMessageData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep EditMessageData x -> EditMessageData
$cfrom :: forall x. EditMessageData -> Rep EditMessageData x
Generic)
  deriving newtype ([EditMessageData] -> Encoding
[EditMessageData] -> Value
EditMessageData -> Encoding
EditMessageData -> Value
(EditMessageData -> Value)
-> (EditMessageData -> Encoding)
-> ([EditMessageData] -> Value)
-> ([EditMessageData] -> Encoding)
-> ToJSON EditMessageData
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [EditMessageData] -> Encoding
$ctoEncodingList :: [EditMessageData] -> Encoding
toJSONList :: [EditMessageData] -> Value
$ctoJSONList :: [EditMessageData] -> Value
toEncoding :: EditMessageData -> Encoding
$ctoEncoding :: EditMessageData -> Encoding
toJSON :: EditMessageData -> Value
$ctoJSON :: EditMessageData -> Value
ToJSON, b -> EditMessageData -> EditMessageData
NonEmpty EditMessageData -> EditMessageData
EditMessageData -> EditMessageData -> EditMessageData
(EditMessageData -> EditMessageData -> EditMessageData)
-> (NonEmpty EditMessageData -> EditMessageData)
-> (forall b.
    Integral b =>
    b -> EditMessageData -> EditMessageData)
-> Semigroup EditMessageData
forall b. Integral b => b -> EditMessageData -> EditMessageData
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
stimes :: b -> EditMessageData -> EditMessageData
$cstimes :: forall b. Integral b => b -> EditMessageData -> EditMessageData
sconcat :: NonEmpty EditMessageData -> EditMessageData
$csconcat :: NonEmpty EditMessageData -> EditMessageData
<> :: EditMessageData -> EditMessageData -> EditMessageData
$c<> :: EditMessageData -> EditMessageData -> EditMessageData
Semigroup, Semigroup EditMessageData
EditMessageData
Semigroup EditMessageData
-> EditMessageData
-> (EditMessageData -> EditMessageData -> EditMessageData)
-> ([EditMessageData] -> EditMessageData)
-> Monoid EditMessageData
[EditMessageData] -> EditMessageData
EditMessageData -> EditMessageData -> EditMessageData
forall a.
Semigroup a -> a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
mconcat :: [EditMessageData] -> EditMessageData
$cmconcat :: [EditMessageData] -> EditMessageData
mappend :: EditMessageData -> EditMessageData -> EditMessageData
$cmappend :: EditMessageData -> EditMessageData -> EditMessageData
mempty :: EditMessageData
$cmempty :: EditMessageData
$cp1Monoid :: Semigroup EditMessageData
Monoid)

editMessageContent :: Maybe Text -> EditMessageData
editMessageContent :: Maybe Text -> EditMessageData
editMessageContent Maybe Text
v = Object -> EditMessageData
EditMessageData (Object -> EditMessageData) -> Object -> EditMessageData
forall a b. (a -> b) -> a -> b
$ [(Text, Value)] -> Object
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
H.fromList [(Text
"content", Maybe Text -> Value
forall a. ToJSON a => a -> Value
toJSON Maybe Text
v)]

editMessageEmbed :: Maybe Embed -> EditMessageData
editMessageEmbed :: Maybe Embed -> EditMessageData
editMessageEmbed Maybe Embed
v = Object -> EditMessageData
EditMessageData (Object -> EditMessageData) -> Object -> EditMessageData
forall a b. (a -> b) -> a -> b
$ [(Text, Value)] -> Object
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
H.fromList [(Text
"embed", Maybe Embed -> Value
forall a. ToJSON a => a -> Value
toJSON Maybe Embed
v)]

editMessageFlags :: Maybe Word64 -> EditMessageData
editMessageFlags :: Maybe Word64 -> EditMessageData
editMessageFlags Maybe Word64
v = Object -> EditMessageData
EditMessageData (Object -> EditMessageData) -> Object -> EditMessageData
forall a b. (a -> b) -> a -> b
$ [(Text, Value)] -> Object
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
H.fromList [(Text
"flags", Maybe Word64 -> Value
forall a. ToJSON a => a -> Value
toJSON Maybe Word64
v)]

editMessageAllowedMentions :: Maybe AllowedMentions -> EditMessageData
editMessageAllowedMentions :: Maybe AllowedMentions -> EditMessageData
editMessageAllowedMentions Maybe AllowedMentions
v = Object -> EditMessageData
EditMessageData (Object -> EditMessageData) -> Object -> EditMessageData
forall a b. (a -> b) -> a -> b
$ [(Text, Value)] -> Object
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
H.fromList [(Text
"allowed_mentions", Maybe AllowedMentions -> Value
forall a. ToJSON a => a -> Value
toJSON Maybe AllowedMentions
v)]

data ChannelUpdate = ChannelUpdate
  { ChannelUpdate -> Maybe Text
name :: Maybe Text
  , ChannelUpdate -> Maybe Int
position :: Maybe Int
  , ChannelUpdate -> Maybe Text
topic :: Maybe Text
  , ChannelUpdate -> Maybe Bool
nsfw :: Maybe Bool
  , ChannelUpdate -> Maybe Int
rateLimitPerUser :: Maybe Int
  , ChannelUpdate -> Maybe Int
bitrate :: Maybe Int
  , ChannelUpdate -> Maybe Int
userLimit :: Maybe Int
  , ChannelUpdate -> Maybe [Overwrite]
permissionOverwrites :: Maybe [Overwrite]
  , ChannelUpdate -> Maybe (Snowflake Channel)
parentID :: Maybe (Snowflake Channel)
  }
  deriving ((forall x. ChannelUpdate -> Rep ChannelUpdate x)
-> (forall x. Rep ChannelUpdate x -> ChannelUpdate)
-> Generic ChannelUpdate
forall x. Rep ChannelUpdate x -> ChannelUpdate
forall x. ChannelUpdate -> Rep ChannelUpdate x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ChannelUpdate x -> ChannelUpdate
$cfrom :: forall x. ChannelUpdate -> Rep ChannelUpdate x
Generic, Int -> ChannelUpdate -> ShowS
[ChannelUpdate] -> ShowS
ChannelUpdate -> String
(Int -> ChannelUpdate -> ShowS)
-> (ChannelUpdate -> String)
-> ([ChannelUpdate] -> ShowS)
-> Show ChannelUpdate
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ChannelUpdate] -> ShowS
$cshowList :: [ChannelUpdate] -> ShowS
show :: ChannelUpdate -> String
$cshow :: ChannelUpdate -> String
showsPrec :: Int -> ChannelUpdate -> ShowS
$cshowsPrec :: Int -> ChannelUpdate -> ShowS
Show, ChannelUpdate
ChannelUpdate -> Default ChannelUpdate
forall a. a -> Default a
def :: ChannelUpdate
$cdef :: ChannelUpdate
Default)
  deriving ([ChannelUpdate] -> Encoding
[ChannelUpdate] -> Value
ChannelUpdate -> Encoding
ChannelUpdate -> Value
(ChannelUpdate -> Value)
-> (ChannelUpdate -> Encoding)
-> ([ChannelUpdate] -> Value)
-> ([ChannelUpdate] -> Encoding)
-> ToJSON ChannelUpdate
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [ChannelUpdate] -> Encoding
$ctoEncodingList :: [ChannelUpdate] -> Encoding
toJSONList :: [ChannelUpdate] -> Value
$ctoJSONList :: [ChannelUpdate] -> Value
toEncoding :: ChannelUpdate -> Encoding
$ctoEncoding :: ChannelUpdate -> Encoding
toJSON :: ChannelUpdate -> Value
$ctoJSON :: ChannelUpdate -> Value
ToJSON) via CalamityJSON ChannelUpdate

data ChannelMessagesFilter
  = ChannelMessagesAround
      { ChannelMessagesFilter -> Snowflake Message
around :: Snowflake Message
      }
  | ChannelMessagesBefore
      { ChannelMessagesFilter -> Snowflake Message
before :: Snowflake Message
      }
  | ChannelMessagesAfter
      { ChannelMessagesFilter -> Snowflake Message
after :: Snowflake Message
      }
  deriving ((forall x. ChannelMessagesFilter -> Rep ChannelMessagesFilter x)
-> (forall x. Rep ChannelMessagesFilter x -> ChannelMessagesFilter)
-> Generic ChannelMessagesFilter
forall x. Rep ChannelMessagesFilter x -> ChannelMessagesFilter
forall x. ChannelMessagesFilter -> Rep ChannelMessagesFilter x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ChannelMessagesFilter x -> ChannelMessagesFilter
$cfrom :: forall x. ChannelMessagesFilter -> Rep ChannelMessagesFilter x
Generic, Int -> ChannelMessagesFilter -> ShowS
[ChannelMessagesFilter] -> ShowS
ChannelMessagesFilter -> String
(Int -> ChannelMessagesFilter -> ShowS)
-> (ChannelMessagesFilter -> String)
-> ([ChannelMessagesFilter] -> ShowS)
-> Show ChannelMessagesFilter
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ChannelMessagesFilter] -> ShowS
$cshowList :: [ChannelMessagesFilter] -> ShowS
show :: ChannelMessagesFilter -> String
$cshow :: ChannelMessagesFilter -> String
showsPrec :: Int -> ChannelMessagesFilter -> ShowS
$cshowsPrec :: Int -> ChannelMessagesFilter -> ShowS
Show)
  deriving ([ChannelMessagesFilter] -> Encoding
[ChannelMessagesFilter] -> Value
ChannelMessagesFilter -> Encoding
ChannelMessagesFilter -> Value
(ChannelMessagesFilter -> Value)
-> (ChannelMessagesFilter -> Encoding)
-> ([ChannelMessagesFilter] -> Value)
-> ([ChannelMessagesFilter] -> Encoding)
-> ToJSON ChannelMessagesFilter
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [ChannelMessagesFilter] -> Encoding
$ctoEncodingList :: [ChannelMessagesFilter] -> Encoding
toJSONList :: [ChannelMessagesFilter] -> Value
$ctoJSONList :: [ChannelMessagesFilter] -> Value
toEncoding :: ChannelMessagesFilter -> Encoding
$ctoEncoding :: ChannelMessagesFilter -> Encoding
toJSON :: ChannelMessagesFilter -> Value
$ctoJSON :: ChannelMessagesFilter -> Value
ToJSON) via CalamityJSON ChannelMessagesFilter

newtype ChannelMessagesLimit = ChannelMessagesLimit
  { ChannelMessagesLimit -> Integer
limit :: Integer
  }
  deriving ((forall x. ChannelMessagesLimit -> Rep ChannelMessagesLimit x)
-> (forall x. Rep ChannelMessagesLimit x -> ChannelMessagesLimit)
-> Generic ChannelMessagesLimit
forall x. Rep ChannelMessagesLimit x -> ChannelMessagesLimit
forall x. ChannelMessagesLimit -> Rep ChannelMessagesLimit x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ChannelMessagesLimit x -> ChannelMessagesLimit
$cfrom :: forall x. ChannelMessagesLimit -> Rep ChannelMessagesLimit x
Generic, Int -> ChannelMessagesLimit -> ShowS
[ChannelMessagesLimit] -> ShowS
ChannelMessagesLimit -> String
(Int -> ChannelMessagesLimit -> ShowS)
-> (ChannelMessagesLimit -> String)
-> ([ChannelMessagesLimit] -> ShowS)
-> Show ChannelMessagesLimit
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ChannelMessagesLimit] -> ShowS
$cshowList :: [ChannelMessagesLimit] -> ShowS
show :: ChannelMessagesLimit -> String
$cshow :: ChannelMessagesLimit -> String
showsPrec :: Int -> ChannelMessagesLimit -> ShowS
$cshowsPrec :: Int -> ChannelMessagesLimit -> ShowS
Show)

data GetReactionsOptions = GetReactionsOptions
  { GetReactionsOptions -> Maybe (Snowflake User)
before :: Maybe (Snowflake User)
  , GetReactionsOptions -> Maybe (Snowflake User)
after :: Maybe (Snowflake User)
  , GetReactionsOptions -> Maybe Integer
limit :: Maybe Integer
  }
  deriving (Int -> GetReactionsOptions -> ShowS
[GetReactionsOptions] -> ShowS
GetReactionsOptions -> String
(Int -> GetReactionsOptions -> ShowS)
-> (GetReactionsOptions -> String)
-> ([GetReactionsOptions] -> ShowS)
-> Show GetReactionsOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetReactionsOptions] -> ShowS
$cshowList :: [GetReactionsOptions] -> ShowS
show :: GetReactionsOptions -> String
$cshow :: GetReactionsOptions -> String
showsPrec :: Int -> GetReactionsOptions -> ShowS
$cshowsPrec :: Int -> GetReactionsOptions -> ShowS
Show, (forall x. GetReactionsOptions -> Rep GetReactionsOptions x)
-> (forall x. Rep GetReactionsOptions x -> GetReactionsOptions)
-> Generic GetReactionsOptions
forall x. Rep GetReactionsOptions x -> GetReactionsOptions
forall x. GetReactionsOptions -> Rep GetReactionsOptions x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetReactionsOptions x -> GetReactionsOptions
$cfrom :: forall x. GetReactionsOptions -> Rep GetReactionsOptions x
Generic, GetReactionsOptions
GetReactionsOptions -> Default GetReactionsOptions
forall a. a -> Default a
def :: GetReactionsOptions
$cdef :: GetReactionsOptions
Default)

data CreateChannelInviteOptions = CreateChannelInviteOptions
  { CreateChannelInviteOptions -> Maybe Int
maxAge :: Maybe Int
  , CreateChannelInviteOptions -> Maybe Int
maxUses :: Maybe Int
  , CreateChannelInviteOptions -> Maybe Bool
temporary :: Maybe Bool
  , CreateChannelInviteOptions -> Maybe Bool
unique :: Maybe Bool
  }
  deriving (Int -> CreateChannelInviteOptions -> ShowS
[CreateChannelInviteOptions] -> ShowS
CreateChannelInviteOptions -> String
(Int -> CreateChannelInviteOptions -> ShowS)
-> (CreateChannelInviteOptions -> String)
-> ([CreateChannelInviteOptions] -> ShowS)
-> Show CreateChannelInviteOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateChannelInviteOptions] -> ShowS
$cshowList :: [CreateChannelInviteOptions] -> ShowS
show :: CreateChannelInviteOptions -> String
$cshow :: CreateChannelInviteOptions -> String
showsPrec :: Int -> CreateChannelInviteOptions -> ShowS
$cshowsPrec :: Int -> CreateChannelInviteOptions -> ShowS
Show, (forall x.
 CreateChannelInviteOptions -> Rep CreateChannelInviteOptions x)
-> (forall x.
    Rep CreateChannelInviteOptions x -> CreateChannelInviteOptions)
-> Generic CreateChannelInviteOptions
forall x.
Rep CreateChannelInviteOptions x -> CreateChannelInviteOptions
forall x.
CreateChannelInviteOptions -> Rep CreateChannelInviteOptions x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateChannelInviteOptions x -> CreateChannelInviteOptions
$cfrom :: forall x.
CreateChannelInviteOptions -> Rep CreateChannelInviteOptions x
Generic, CreateChannelInviteOptions
CreateChannelInviteOptions -> Default CreateChannelInviteOptions
forall a. a -> Default a
def :: CreateChannelInviteOptions
$cdef :: CreateChannelInviteOptions
Default)
  deriving ([CreateChannelInviteOptions] -> Encoding
[CreateChannelInviteOptions] -> Value
CreateChannelInviteOptions -> Encoding
CreateChannelInviteOptions -> Value
(CreateChannelInviteOptions -> Value)
-> (CreateChannelInviteOptions -> Encoding)
-> ([CreateChannelInviteOptions] -> Value)
-> ([CreateChannelInviteOptions] -> Encoding)
-> ToJSON CreateChannelInviteOptions
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [CreateChannelInviteOptions] -> Encoding
$ctoEncodingList :: [CreateChannelInviteOptions] -> Encoding
toJSONList :: [CreateChannelInviteOptions] -> Value
$ctoJSONList :: [CreateChannelInviteOptions] -> Value
toEncoding :: CreateChannelInviteOptions -> Encoding
$ctoEncoding :: CreateChannelInviteOptions -> Encoding
toJSON :: CreateChannelInviteOptions -> Value
$ctoJSON :: CreateChannelInviteOptions -> Value
ToJSON) via CalamityJSON CreateChannelInviteOptions

data GroupDMAddRecipientOptions = GroupDMAddRecipientOptions
  { GroupDMAddRecipientOptions -> Text
accessToken :: Text
  , GroupDMAddRecipientOptions -> Text
nick :: Text
  }
  deriving (Int -> GroupDMAddRecipientOptions -> ShowS
[GroupDMAddRecipientOptions] -> ShowS
GroupDMAddRecipientOptions -> String
(Int -> GroupDMAddRecipientOptions -> ShowS)
-> (GroupDMAddRecipientOptions -> String)
-> ([GroupDMAddRecipientOptions] -> ShowS)
-> Show GroupDMAddRecipientOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GroupDMAddRecipientOptions] -> ShowS
$cshowList :: [GroupDMAddRecipientOptions] -> ShowS
show :: GroupDMAddRecipientOptions -> String
$cshow :: GroupDMAddRecipientOptions -> String
showsPrec :: Int -> GroupDMAddRecipientOptions -> ShowS
$cshowsPrec :: Int -> GroupDMAddRecipientOptions -> ShowS
Show, (forall x.
 GroupDMAddRecipientOptions -> Rep GroupDMAddRecipientOptions x)
-> (forall x.
    Rep GroupDMAddRecipientOptions x -> GroupDMAddRecipientOptions)
-> Generic GroupDMAddRecipientOptions
forall x.
Rep GroupDMAddRecipientOptions x -> GroupDMAddRecipientOptions
forall x.
GroupDMAddRecipientOptions -> Rep GroupDMAddRecipientOptions x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GroupDMAddRecipientOptions x -> GroupDMAddRecipientOptions
$cfrom :: forall x.
GroupDMAddRecipientOptions -> Rep GroupDMAddRecipientOptions x
Generic)
  deriving ([GroupDMAddRecipientOptions] -> Encoding
[GroupDMAddRecipientOptions] -> Value
GroupDMAddRecipientOptions -> Encoding
GroupDMAddRecipientOptions -> Value
(GroupDMAddRecipientOptions -> Value)
-> (GroupDMAddRecipientOptions -> Encoding)
-> ([GroupDMAddRecipientOptions] -> Value)
-> ([GroupDMAddRecipientOptions] -> Encoding)
-> ToJSON GroupDMAddRecipientOptions
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [GroupDMAddRecipientOptions] -> Encoding
$ctoEncodingList :: [GroupDMAddRecipientOptions] -> Encoding
toJSONList :: [GroupDMAddRecipientOptions] -> Value
$ctoJSONList :: [GroupDMAddRecipientOptions] -> Value
toEncoding :: GroupDMAddRecipientOptions -> Encoding
$ctoEncoding :: GroupDMAddRecipientOptions -> Encoding
toJSON :: GroupDMAddRecipientOptions -> Value
$ctoJSON :: GroupDMAddRecipientOptions -> Value
ToJSON) via CalamityJSON GroupDMAddRecipientOptions

data ChannelRequest a where
  CreateMessage :: (HasID Channel c) => c -> CreateMessageOptions -> ChannelRequest Message
  GetMessage :: (HasID Channel c, HasID Message m) => c -> m -> ChannelRequest Message
  EditMessage :: (HasID Channel c, HasID Message m) => c -> m -> EditMessageData -> ChannelRequest Message
  DeleteMessage :: (HasID Channel c, HasID Message m) => c -> m -> ChannelRequest ()
  BulkDeleteMessages :: (HasID Channel c, HasID Message m) => c -> [m] -> ChannelRequest ()
  GetChannel :: (HasID Channel c) => c -> ChannelRequest Channel
  ModifyChannel :: (HasID Channel c) => c -> ChannelUpdate -> ChannelRequest Channel
  DeleteChannel :: (HasID Channel c) => c -> ChannelRequest ()
  GetChannelMessages :: (HasID Channel c) => c -> Maybe ChannelMessagesFilter -> Maybe ChannelMessagesLimit -> ChannelRequest [Message]
  CreateReaction :: (HasID Channel c, HasID Message m) => c -> m -> RawEmoji -> ChannelRequest ()
  DeleteOwnReaction :: (HasID Channel c, HasID Message m) => c -> m -> RawEmoji -> ChannelRequest ()
  DeleteUserReaction :: (HasID Channel c, HasID Message m, HasID User u) => c -> m -> RawEmoji -> u -> ChannelRequest ()
  GetReactions :: (HasID Channel c, HasID Message m) => c -> m -> RawEmoji -> GetReactionsOptions -> ChannelRequest [User]
  DeleteAllReactions :: (HasID Channel c, HasID Message m) => c -> m -> ChannelRequest ()
  GetChannelInvites :: (HasID Channel c) => c -> ChannelRequest [Invite]
  CreateChannelInvite :: (HasID Channel c) => c -> CreateChannelInviteOptions -> ChannelRequest Invite
  EditChannelPermissions :: (HasID Channel c) => c -> Overwrite -> ChannelRequest ()
  DeleteChannelPermission :: (HasID Channel c, HasID Overwrite o) => c -> o -> ChannelRequest ()
  TriggerTyping :: (HasID Channel c) => c -> ChannelRequest ()
  GetPinnedMessages :: (HasID Channel c) => c -> ChannelRequest [Message]
  AddPinnedMessage :: (HasID Channel c, HasID Message m) => c -> m -> ChannelRequest ()
  DeletePinnedMessage :: (HasID Channel c, HasID Message m) => c -> m -> ChannelRequest ()
  GroupDMAddRecipient :: (HasID Channel c, HasID User u) => c -> u -> GroupDMAddRecipientOptions -> ChannelRequest ()
  GroupDMRemoveRecipient :: (HasID Channel c, HasID User u) => c -> u -> ChannelRequest ()

baseRoute :: Snowflake Channel -> RouteBuilder _
baseRoute :: Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
id =
  RouteBuilder '[]
mkRouteBuilder RouteBuilder '[] -> S -> ConsRes S '[]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"channels" RouteBuilder '[] -> ID Channel -> ConsRes (ID Channel) '[]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Channel
forall k (a :: k). ID a
ID @Channel
    RouteBuilder '[ '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Required)]
    -> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Required)]
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Channel
id

instance Request (ChannelRequest a) where
  type Result (ChannelRequest a) = a

  route :: ChannelRequest a -> Route
route (CreateMessage (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
id) CreateMessageOptions
_) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
id RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"messages"
      RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (GetChannel (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
id)) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
id
      RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (ModifyChannel (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
id) ChannelUpdate
_) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
id
      RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (DeleteChannel (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
id)) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
id
      RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (GetChannelMessages (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
id) Maybe ChannelMessagesFilter
_ Maybe ChannelMessagesLimit
_) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
id RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"messages"
      RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (GetMessage (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall b a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid)) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message
      RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(Message, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (CreateReaction (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall b a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid) RawEmoji
emoji) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"reactions" RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S (RawEmoji -> Text
forall a. TextShow a => a -> Text
showt RawEmoji
emoji) RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"@me"
      RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(Message, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (DeleteOwnReaction (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall b a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid) RawEmoji
emoji) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"reactions" RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S (RawEmoji -> Text
forall a. TextShow a => a -> Text
showt RawEmoji
emoji) RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"@me"
      RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(Message, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (DeleteUserReaction (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall b a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid) RawEmoji
emoji (forall a. HasID User a => a -> Snowflake User
forall b a. HasID b a => a -> Snowflake b
getID @User -> Snowflake User
uid)) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"reactions" RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S (RawEmoji -> Text
forall a. TextShow a => a -> Text
showt RawEmoji
emoji) RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> ID User
-> ConsRes
     (ID User)
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID User
forall k (a :: k). ID a
ID @User
      RouteBuilder
  '[ '(User, 'Required), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(User, 'Required), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(User, 'Required),
            '(Message, 'Required), '(Channel, 'Satisfied),
            '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(User, 'Required),
        '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(User, 'Required), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(User, 'Required),
        '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '(Message, 'Satisfied), '(User, 'Required),
     '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(User, 'Required),
         '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(User, 'Satisfied), '(Message, 'Satisfied), '(User, 'Required),
            '(Message, 'Required), '(Channel, 'Satisfied),
            '(Channel, 'Required)])
-> RouteBuilder
     '[ '(User, 'Satisfied), '(Message, 'Satisfied), '(User, 'Required),
        '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake User
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(User, 'Required),
        '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(User, 'Satisfied), '(Message, 'Satisfied), '(User, 'Required),
        '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake User
uid
      RouteBuilder
  '[ '(User, 'Satisfied), '(Message, 'Satisfied), '(User, 'Required),
     '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(User, 'Satisfied), '(Message, 'Satisfied), '(User, 'Required),
         '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(User, 'Satisfied), '(Message, 'Satisfied), '(User, 'Required),
     '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (GetReactions (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall b a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid) RawEmoji
emoji GetReactionsOptions
_) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"reactions" RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S (RawEmoji -> Text
forall a. TextShow a => a -> Text
showt RawEmoji
emoji)
      RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(Message, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (DeleteAllReactions (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall b a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid)) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"reactions"
      RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(Message, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (EditMessage (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall b a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid) EditMessageData
_) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message
      RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(Message, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (DeleteMessage (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall b a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid)) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message
      RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(Message, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (BulkDeleteMessages (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) [m]
_) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"bulk-delete"
      RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (GetChannelInvites (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid)) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"invites"
      RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (CreateChannelInvite (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) CreateChannelInviteOptions
_) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"invites"
      RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (EditChannelPermissions (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Overwrite a => a -> Snowflake Overwrite
forall b a. HasID b a => a -> Snowflake b
getID @Overwrite -> Snowflake Overwrite
oid)) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"permissions" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Overwrite
-> ConsRes
     (ID Overwrite) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Overwrite
forall k (a :: k). ID a
ID @Overwrite
      RouteBuilder
  '[ '(Overwrite, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Overwrite, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Overwrite
-> RouteBuilder
     '[ '(Overwrite, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Overwrite
oid
      RouteBuilder
  '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (DeleteChannelPermission (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Overwrite a => a -> Snowflake Overwrite
forall b a. HasID b a => a -> Snowflake b
getID @Overwrite -> Snowflake Overwrite
oid)) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"permissions" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Overwrite
-> ConsRes
     (ID Overwrite) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Overwrite
forall k (a :: k). ID a
ID @Overwrite
      RouteBuilder
  '[ '(Overwrite, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Overwrite, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Overwrite
-> RouteBuilder
     '[ '(Overwrite, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Overwrite
oid
      RouteBuilder
  '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (TriggerTyping (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid)) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"typing"
      RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (GetPinnedMessages (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid)) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"pins"
      RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (AddPinnedMessage (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall b a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid)) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"pins" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message
      RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(Message, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (DeletePinnedMessage (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall b a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid)) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"pins" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message
      RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(Message, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (GroupDMAddRecipient (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID User a => a -> Snowflake User
forall b a. HasID b a => a -> Snowflake b
getID @User -> Snowflake User
uid) GroupDMAddRecipientOptions
_) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"recipients" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID User
-> ConsRes
     (ID User) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID User
forall k (a :: k). ID a
ID @User
      RouteBuilder
  '[ '(User, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(User, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
            '(Channel, 'Required)])
-> RouteBuilder
     '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake User
-> RouteBuilder
     '[ '(User, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake User
uid
      RouteBuilder
  '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  route (GroupDMRemoveRecipient (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID User a => a -> Snowflake User
forall b a. HasID b a => a -> Snowflake b
getID @User -> Snowflake User
uid)) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S Text
"recipients" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID User
-> ConsRes
     (ID User) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID User
forall k (a :: k). ID a
ID @User
      RouteBuilder
  '[ '(User, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(User, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
            '(Channel, 'Required)])
-> RouteBuilder
     '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake User
-> RouteBuilder
     '[ '(User, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake User
uid
      RouteBuilder
  '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute

  action :: ChannelRequest a -> Url 'Https -> Option 'Https -> Req LbsResponse
action (CreateMessage c
_ o :: CreateMessageOptions
o@CreateMessageOptions{$sel:file:CreateMessageOptions :: CreateMessageOptions -> Maybe (Text, ByteString)
file = Maybe (Text, ByteString)
Nothing}) =
    ReqBodyJson CreateMessageJson
-> Url 'Https -> Option 'Https -> Req LbsResponse
forall a.
HttpBody a =>
a -> Url 'Https -> Option 'Https -> Req LbsResponse
postWith'
      (CreateMessageJson -> ReqBodyJson CreateMessageJson
forall a. a -> ReqBodyJson a
ReqBodyJson (CreateMessageJson -> ReqBodyJson CreateMessageJson)
-> (CreateMessageOptions -> CreateMessageJson)
-> CreateMessageOptions
-> ReqBodyJson CreateMessageJson
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall sub.
Subtype CreateMessageJson sub =>
sub -> CreateMessageJson
forall sup sub. Subtype sup sub => sub -> sup
upcast @CreateMessageJson (CreateMessageOptions -> ReqBodyJson CreateMessageJson)
-> CreateMessageOptions -> ReqBodyJson CreateMessageJson
forall a b. (a -> b) -> a -> b
$ CreateMessageOptions
o)
  action (CreateMessage c
_ cm :: CreateMessageOptions
cm@CreateMessageOptions{$sel:file:CreateMessageOptions :: CreateMessageOptions -> Maybe (Text, ByteString)
file = Just (Text, ByteString)
f}) = \Url 'Https
u Option 'Https
o -> do
    let filePart :: PartM IO
filePart =
          (Text -> ByteString -> PartM IO
forall (m :: * -> *).
Applicative m =>
Text -> ByteString -> PartM m
partLBS @IO Text
"file" ((Text, ByteString) -> ByteString
forall a b. (a, b) -> b
snd (Text, ByteString)
f))
            { partFilename :: Maybe String
partFilename = String -> Maybe String
forall a. a -> Maybe a
Just (Text -> String
S.unpack (Text -> String) -> Text -> String
forall a b. (a -> b) -> a -> b
$ (Text, ByteString) -> Text
forall a b. (a, b) -> a
fst (Text, ByteString)
f)
            , partContentType :: Maybe MimeType
partContentType = MimeType -> Maybe MimeType
forall a. a -> Maybe a
Just (Text -> MimeType
defaultMimeLookup (Text -> MimeType) -> Text -> MimeType
forall a b. (a -> b) -> a -> b
$ (Text, ByteString) -> Text
forall a b. (a, b) -> a
fst (Text, ByteString)
f)
            }
    ReqBodyMultipart
body <- [PartM IO] -> Req ReqBodyMultipart
forall (m :: * -> *). MonadIO m => [PartM IO] -> m ReqBodyMultipart
reqBodyMultipart [PartM IO
filePart, Text -> ByteString -> PartM IO
forall (m :: * -> *).
Applicative m =>
Text -> ByteString -> PartM m
partLBS Text
"payload_json" (CreateMessageJson -> ByteString
forall a. ToJSON a => a -> ByteString
encode (CreateMessageJson -> ByteString)
-> (CreateMessageOptions -> CreateMessageJson)
-> CreateMessageOptions
-> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall sub.
Subtype CreateMessageJson sub =>
sub -> CreateMessageJson
forall sup sub. Subtype sup sub => sub -> sup
upcast @CreateMessageJson (CreateMessageOptions -> ByteString)
-> CreateMessageOptions -> ByteString
forall a b. (a -> b) -> a -> b
$ CreateMessageOptions
cm)]
    ReqBodyMultipart -> Url 'Https -> Option 'Https -> Req LbsResponse
forall a.
HttpBody a =>
a -> Url 'Https -> Option 'Https -> Req LbsResponse
postWith' ReqBodyMultipart
body Url 'Https
u Option 'Https
o
  action (GetChannel c
_) = Url 'Https -> Option 'Https -> Req LbsResponse
getWith
  action (ModifyChannel c
_ ChannelUpdate
p) = ReqBodyJson ChannelUpdate
-> Url 'Https -> Option 'Https -> Req LbsResponse
forall a.
HttpBody a =>
a -> Url 'Https -> Option 'Https -> Req LbsResponse
putWith' (ChannelUpdate -> ReqBodyJson ChannelUpdate
forall a. a -> ReqBodyJson a
ReqBodyJson ChannelUpdate
p)
  action (DeleteChannel c
_) = Url 'Https -> Option 'Https -> Req LbsResponse
deleteWith
  action (GetChannelMessages c
_ (Just (ChannelMessagesAround (Word64 -> Text
forall a. TextShow a => a -> Text
showt (Word64 -> Text)
-> (Snowflake Message -> Word64) -> Snowflake Message -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Snowflake Message -> Word64
forall t. Snowflake t -> Word64
fromSnowflake -> Text
a))) Maybe ChannelMessagesLimit
l) =
    Option 'Https -> Url 'Https -> Option 'Https -> Req LbsResponse
getWithP (Text
"around" Text -> Text -> Option 'Https
forall param a.
(QueryParam param, ToHttpApiData a) =>
Text -> a -> param
=: Text
a Option 'Https -> Option 'Https -> Option 'Https
forall a. Semigroup a => a -> a -> a
<> Text
"limit" Text -> Maybe Text -> Option 'Https
=:? (Integer -> Text
forall a. TextShow a => a -> Text
showt (Integer -> Text)
-> (ChannelMessagesLimit -> Integer)
-> ChannelMessagesLimit
-> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ChannelMessagesLimit
-> Getting Integer ChannelMessagesLimit Integer -> Integer
forall s a. s -> Getting a s a -> a
^. IsLabel "limit" (Getting Integer ChannelMessagesLimit Integer)
Getting Integer ChannelMessagesLimit Integer
#limit) (ChannelMessagesLimit -> Text)
-> Maybe ChannelMessagesLimit -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ChannelMessagesLimit
l))
  action (GetChannelMessages c
_ (Just (ChannelMessagesBefore (Word64 -> Text
forall a. TextShow a => a -> Text
showt (Word64 -> Text)
-> (Snowflake Message -> Word64) -> Snowflake Message -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Snowflake Message -> Word64
forall t. Snowflake t -> Word64
fromSnowflake -> Text
a))) Maybe ChannelMessagesLimit
l) =
    Option 'Https -> Url 'Https -> Option 'Https -> Req LbsResponse
getWithP (Text
"before" Text -> Text -> Option 'Https
forall param a.
(QueryParam param, ToHttpApiData a) =>
Text -> a -> param
=: Text
a Option 'Https -> Option 'Https -> Option 'Https
forall a. Semigroup a => a -> a -> a
<> Text
"limit" Text -> Maybe Text -> Option 'Https
=:? (Integer -> Text
forall a. TextShow a => a -> Text
showt (Integer -> Text)
-> (ChannelMessagesLimit -> Integer)
-> ChannelMessagesLimit
-> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ChannelMessagesLimit
-> Getting Integer ChannelMessagesLimit Integer -> Integer
forall s a. s -> Getting a s a -> a
^. IsLabel "limit" (Getting Integer ChannelMessagesLimit Integer)
Getting Integer ChannelMessagesLimit Integer
#limit) (ChannelMessagesLimit -> Text)
-> Maybe ChannelMessagesLimit -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ChannelMessagesLimit
l))
  action (GetChannelMessages c
_ (Just (ChannelMessagesAfter (Word64 -> Text
forall a. TextShow a => a -> Text
showt (Word64 -> Text)
-> (Snowflake Message -> Word64) -> Snowflake Message -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Snowflake Message -> Word64
forall t. Snowflake t -> Word64
fromSnowflake -> Text
a))) Maybe ChannelMessagesLimit
l) =
    Option 'Https -> Url 'Https -> Option 'Https -> Req LbsResponse
getWithP (Text
"after" Text -> Text -> Option 'Https
forall param a.
(QueryParam param, ToHttpApiData a) =>
Text -> a -> param
=: Text
a Option 'Https -> Option 'Https -> Option 'Https
forall a. Semigroup a => a -> a -> a
<> Text
"limit" Text -> Maybe Text -> Option 'Https
=:? (Integer -> Text
forall a. TextShow a => a -> Text
showt (Integer -> Text)
-> (ChannelMessagesLimit -> Integer)
-> ChannelMessagesLimit
-> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ChannelMessagesLimit
-> Getting Integer ChannelMessagesLimit Integer -> Integer
forall s a. s -> Getting a s a -> a
^. IsLabel "limit" (Getting Integer ChannelMessagesLimit Integer)
Getting Integer ChannelMessagesLimit Integer
#limit) (ChannelMessagesLimit -> Text)
-> Maybe ChannelMessagesLimit -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ChannelMessagesLimit
l))
  action (GetChannelMessages c
_ Maybe ChannelMessagesFilter
Nothing Maybe ChannelMessagesLimit
l) = Option 'Https -> Url 'Https -> Option 'Https -> Req LbsResponse
getWithP (Text
"limit" Text -> Maybe Text -> Option 'Https
=:? (Integer -> Text
forall a. TextShow a => a -> Text
showt (Integer -> Text)
-> (ChannelMessagesLimit -> Integer)
-> ChannelMessagesLimit
-> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ChannelMessagesLimit
-> Getting Integer ChannelMessagesLimit Integer -> Integer
forall s a. s -> Getting a s a -> a
^. IsLabel "limit" (Getting Integer ChannelMessagesLimit Integer)
Getting Integer ChannelMessagesLimit Integer
#limit) (ChannelMessagesLimit -> Text)
-> Maybe ChannelMessagesLimit -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ChannelMessagesLimit
l))
  action (GetMessage c
_ m
_) = Url 'Https -> Option 'Https -> Req LbsResponse
getWith
  action CreateReaction{} = Url 'Https -> Option 'Https -> Req LbsResponse
putEmpty
  action DeleteOwnReaction{} = Url 'Https -> Option 'Https -> Req LbsResponse
deleteWith
  action DeleteUserReaction{} = Url 'Https -> Option 'Https -> Req LbsResponse
deleteWith
  action (GetReactions c
_ m
_ RawEmoji
_ GetReactionsOptions{Maybe (Snowflake User)
before :: Maybe (Snowflake User)
$sel:before:GetReactionsOptions :: GetReactionsOptions -> Maybe (Snowflake User)
before, Maybe (Snowflake User)
after :: Maybe (Snowflake User)
$sel:after:GetReactionsOptions :: GetReactionsOptions -> Maybe (Snowflake User)
after, Maybe Integer
limit :: Maybe Integer
$sel:limit:GetReactionsOptions :: GetReactionsOptions -> Maybe Integer
limit}) =
    Option 'Https -> Url 'Https -> Option 'Https -> Req LbsResponse
getWithP
      ( Text
"before" Text -> Maybe Text -> Option 'Https
=:? (Snowflake User -> Text
forall a. TextShow a => a -> Text
showt (Snowflake User -> Text) -> Maybe (Snowflake User) -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (Snowflake User)
before)
          Option 'Https -> Option 'Https -> Option 'Https
forall a. Semigroup a => a -> a -> a
<> Text
"after" Text -> Maybe Text -> Option 'Https
=:? (Snowflake User -> Text
forall a. TextShow a => a -> Text
showt (Snowflake User -> Text) -> Maybe (Snowflake User) -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (Snowflake User)
after)
          Option 'Https -> Option 'Https -> Option 'Https
forall a. Semigroup a => a -> a -> a
<> Text
"limit" Text -> Maybe Text -> Option 'Https
=:? (Integer -> Text
forall a. TextShow a => a -> Text
showt (Integer -> Text) -> Maybe Integer -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Integer
limit)
      )
  action (DeleteAllReactions c
_ m
_) = Url 'Https -> Option 'Https -> Req LbsResponse
deleteWith
  action (EditMessage c
_ m
_ EditMessageData
o) = ReqBodyJson EditMessageData
-> Url 'Https -> Option 'Https -> Req LbsResponse
forall a.
HttpBody a =>
a -> Url 'Https -> Option 'Https -> Req LbsResponse
patchWith' (EditMessageData -> ReqBodyJson EditMessageData
forall a. a -> ReqBodyJson a
ReqBodyJson EditMessageData
o)
  action (DeleteMessage c
_ m
_) = Url 'Https -> Option 'Https -> Req LbsResponse
deleteWith
  action (BulkDeleteMessages c
_ ((m -> Snowflake Message) -> [m] -> [Snowflake Message]
forall a b. (a -> b) -> [a] -> [b]
map (forall a. HasID Message a => a -> Snowflake Message
forall b a. HasID b a => a -> Snowflake b
getID @Message) -> [Snowflake Message]
ids)) = ReqBodyJson Value -> Url 'Https -> Option 'Https -> Req LbsResponse
forall a.
HttpBody a =>
a -> Url 'Https -> Option 'Https -> Req LbsResponse
postWith' (Value -> ReqBodyJson Value
forall a. a -> ReqBodyJson a
ReqBodyJson (Value -> ReqBodyJson Value) -> Value -> ReqBodyJson Value
forall a b. (a -> b) -> a -> b
$ [(Text, Value)] -> Value
object [Text
"messages" Text -> [Snowflake Message] -> (Text, Value)
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
.= [Snowflake Message]
ids])
  action (GetChannelInvites c
_) = Url 'Https -> Option 'Https -> Req LbsResponse
getWith
  action (CreateChannelInvite c
_ CreateChannelInviteOptions
o) = ReqBodyJson CreateChannelInviteOptions
-> Url 'Https -> Option 'Https -> Req LbsResponse
forall a.
HttpBody a =>
a -> Url 'Https -> Option 'Https -> Req LbsResponse
postWith' (CreateChannelInviteOptions
-> ReqBodyJson CreateChannelInviteOptions
forall a. a -> ReqBodyJson a
ReqBodyJson CreateChannelInviteOptions
o)
  action (EditChannelPermissions c
_ Overwrite
o) = ReqBodyJson Overwrite
-> Url 'Https -> Option 'Https -> Req LbsResponse
forall a.
HttpBody a =>
a -> Url 'Https -> Option 'Https -> Req LbsResponse
putWith' (Overwrite -> ReqBodyJson Overwrite
forall a. a -> ReqBodyJson a
ReqBodyJson Overwrite
o)
  action (DeleteChannelPermission c
_ o
_) = Url 'Https -> Option 'Https -> Req LbsResponse
deleteWith
  action (TriggerTyping c
_) = Url 'Https -> Option 'Https -> Req LbsResponse
postEmpty
  action (GetPinnedMessages c
_) = Url 'Https -> Option 'Https -> Req LbsResponse
getWith
  action (AddPinnedMessage c
_ m
_) = Url 'Https -> Option 'Https -> Req LbsResponse
putEmpty
  action (DeletePinnedMessage c
_ m
_) = Url 'Https -> Option 'Https -> Req LbsResponse
deleteWith
  action (GroupDMAddRecipient c
_ u
_ GroupDMAddRecipientOptions
o) = ReqBodyJson GroupDMAddRecipientOptions
-> Url 'Https -> Option 'Https -> Req LbsResponse
forall a.
HttpBody a =>
a -> Url 'Https -> Option 'Https -> Req LbsResponse
putWith' (GroupDMAddRecipientOptions
-> ReqBodyJson GroupDMAddRecipientOptions
forall a. a -> ReqBodyJson a
ReqBodyJson GroupDMAddRecipientOptions
o)
  action (GroupDMRemoveRecipient c
_ u
_) = Url 'Https -> Option 'Https -> Req LbsResponse
deleteWith