-- | 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
  , CreateMessageOptions -> Maybe MessageReference
messageReference :: Maybe MessageReference
  }
  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]
  , AllowedMentions -> Bool
repliedUser :: Bool
  }
  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)
  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 Default AllowedMentions where
  def :: AllowedMentions
def = [AllowedMentionType]
-> [Snowflake Role] -> [Snowflake User] -> Bool -> AllowedMentions
AllowedMentions [AllowedMentionType]
forall a. Default a => a
def [Snowflake Role]
forall a. Default a => a
def [Snowflake User]
forall a. Default a => a
def Bool
False

instance Semigroup AllowedMentions where
  AllowedMentions [AllowedMentionType]
p0 [Snowflake Role]
r0 [Snowflake User]
u0 Bool
ru0 <> :: AllowedMentions -> AllowedMentions -> AllowedMentions
<> AllowedMentions [AllowedMentionType]
p1 [Snowflake Role]
r1 [Snowflake User]
u1 Bool
ru1 =
    [AllowedMentionType]
-> [Snowflake Role] -> [Snowflake User] -> Bool -> 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) (Bool
ru0 Bool -> Bool -> Bool
|| Bool
ru1)

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
  , CreateMessageJson -> Maybe AllowedMentions
allowedMentions :: Maybe AllowedMentions
  , CreateMessageJson -> Maybe MessageReference
messageReference :: Maybe MessageReference
  }
  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
  CrosspostMessage :: (HasID Channel c, HasID Message m) => c -> m -> 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
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
id =
  RouteBuilder '[]
mkRouteBuilder RouteBuilder '[] -> S -> ConsRes S '[]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"channels" RouteBuilder '[] -> ID Channel -> ConsRes (ID Channel) '[]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// ID Channel
forall k (a :: k). ID a
ID @Channel
    RouteBuilder '[ '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder '[ '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Channel
-> RouteBuilder '[ '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall t (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Channel
id

renderEmoji :: RawEmoji -> Text
renderEmoji :: RawEmoji -> Text
renderEmoji (UnicodeEmoji Text
e) = Text
e Text -> Getting Text Text Text -> Text
forall s a. s -> Getting a s a -> a
^. Getting Text Text Text
forall lazy strict. Strict lazy strict => Iso' lazy strict
strict
renderEmoji (CustomEmoji Partial Emoji
e) = Partial Emoji
e Partial Emoji -> Getting Text (Partial Emoji) Text -> Text
forall s a. s -> Getting a s a -> a
^. IsLabel
  "name"
  ((Text -> Const Text Text)
   -> Partial Emoji -> Const Text (Partial Emoji))
(Text -> Const Text Text)
-> Partial Emoji -> Const Text (Partial Emoji)
#name ((Text -> Const Text Text)
 -> Partial Emoji -> Const Text (Partial Emoji))
-> Getting Text Text Text -> Getting Text (Partial Emoji) Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Getting Text Text Text
forall lazy strict. Strict lazy strict => Iso' lazy strict
strict Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
":" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Snowflake Emoji -> Text
forall a. TextShow a => a -> Text
showt (Partial Emoji
e Partial Emoji
-> Getting (Snowflake Emoji) (Partial Emoji) (Snowflake Emoji)
-> Snowflake Emoji
forall s a. s -> Getting a s a -> a
^. IsLabel
  "id" (Getting (Snowflake Emoji) (Partial Emoji) (Snowflake Emoji))
Getting (Snowflake Emoji) (Partial Emoji) (Snowflake Emoji)
#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
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
id RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"messages"
      RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> Route
buildRoute
  route (CrosspostMessage (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
id) (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
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
id RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"messages" RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message)
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// ID Message
forall k (a :: k). ID a
ID @Message
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement Message, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall t (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> Route
buildRoute
  route (GetChannel (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
id)) =
    Snowflake Channel
-> RouteBuilder
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
id
      RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> Route
buildRoute
  route (ModifyChannel (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
id) ChannelUpdate
_) =
    Snowflake Channel
-> RouteBuilder
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
id
      RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> Route
buildRoute
  route (DeleteChannel (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
id)) =
    Snowflake Channel
-> RouteBuilder
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
id
      RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> 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
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
id RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"messages"
      RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> 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
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"messages" RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message)
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// ID Message
forall k (a :: k). ID a
ID @Message
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement Message, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall t (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> 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
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"messages" RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message)
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// ID Message
forall k (a :: k). ID a
ID @Message RouteBuilder
  '[ '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"reactions" RouteBuilder
  '[ '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> PS "emoji"
-> ConsRes
     (PS "emoji")
     '[ '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// PS "emoji"
forall (s :: Symbol). PS s
PS @"emoji" RouteBuilder
  '[ '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"@me"
      RouteBuilder
  '[ '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'PSRequirement "emoji", 'Required),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'PSRequirement "emoji", 'Required),
            '( 'IDRequirement Message, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall t (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'PSRequirement "emoji", 'Required),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'PSRequirement "emoji", 'Satisfied),
            '( 'IDRequirement Message, 'Satisfied),
            '( 'PSRequirement "emoji", 'Required),
            '( 'IDRequirement Message, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'PSRequirement "emoji", 'Satisfied),
        '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Text
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'PSRequirement "emoji", 'Satisfied),
        '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (s :: Symbol)
       (reqs :: [(RequirementType, RouteRequirement)]).
KnownSymbol s =>
Text
-> RouteBuilder reqs
-> RouteBuilder ('( 'PSRequirement s, 'Satisfied) : reqs)
giveParam @"emoji" (RawEmoji -> Text
renderEmoji RawEmoji
emoji)
      RouteBuilder
  '[ '( 'PSRequirement "emoji", 'Satisfied),
     '( 'IDRequirement Message, 'Satisfied),
     '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'PSRequirement "emoji", 'Satisfied),
         '( 'IDRequirement Message, 'Satisfied),
         '( 'PSRequirement "emoji", 'Required),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'PSRequirement "emoji", 'Satisfied),
     '( 'IDRequirement Message, 'Satisfied),
     '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> 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
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"messages" RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message)
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// ID Message
forall k (a :: k). ID a
ID @Message RouteBuilder
  '[ '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"reactions" RouteBuilder
  '[ '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> PS "emoji"
-> ConsRes
     (PS "emoji")
     '[ '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// PS "emoji"
forall (s :: Symbol). PS s
PS @"emoji" RouteBuilder
  '[ '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"@me"
      RouteBuilder
  '[ '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'PSRequirement "emoji", 'Required),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'PSRequirement "emoji", 'Required),
            '( 'IDRequirement Message, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall t (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'PSRequirement "emoji", 'Required),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'PSRequirement "emoji", 'Satisfied),
            '( 'IDRequirement Message, 'Satisfied),
            '( 'PSRequirement "emoji", 'Required),
            '( 'IDRequirement Message, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'PSRequirement "emoji", 'Satisfied),
        '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Text
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'PSRequirement "emoji", 'Satisfied),
        '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (s :: Symbol)
       (reqs :: [(RequirementType, RouteRequirement)]).
KnownSymbol s =>
Text
-> RouteBuilder reqs
-> RouteBuilder ('( 'PSRequirement s, 'Satisfied) : reqs)
giveParam @"emoji" (RawEmoji -> Text
renderEmoji RawEmoji
emoji)
      RouteBuilder
  '[ '( 'PSRequirement "emoji", 'Satisfied),
     '( 'IDRequirement Message, 'Satisfied),
     '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'PSRequirement "emoji", 'Satisfied),
         '( 'IDRequirement Message, 'Satisfied),
         '( 'PSRequirement "emoji", 'Required),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'PSRequirement "emoji", 'Satisfied),
     '( 'IDRequirement Message, 'Satisfied),
     '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> 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
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"messages" RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message)
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// ID Message
forall k (a :: k). ID a
ID @Message RouteBuilder
  '[ '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"reactions" RouteBuilder
  '[ '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> PS "emoji"
-> ConsRes
     (PS "emoji")
     '[ '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// PS "emoji"
forall (s :: Symbol). PS s
PS @"emoji" RouteBuilder
  '[ '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> ID User
-> ConsRes
     (ID User)
     '[ '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// ID User
forall k (a :: k). ID a
ID @User
      RouteBuilder
  '[ '( 'IDRequirement User, 'Required),
     '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement User, 'Required),
         '( 'PSRequirement "emoji", 'Required),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement User, 'Required),
            '( 'PSRequirement "emoji", 'Required),
            '( 'IDRequirement Message, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement User, 'Required),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'IDRequirement User, 'Required),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement User, 'Required),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall t (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement User, 'Required),
     '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement User, 'Required),
         '( 'PSRequirement "emoji", 'Required),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement User, 'Satisfied),
            '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement User, 'Required),
            '( 'PSRequirement "emoji", 'Required),
            '( 'IDRequirement Message, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement User, 'Satisfied),
        '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement User, 'Required),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake User
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement User, 'Required),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement User, 'Satisfied),
        '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement User, 'Required),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall t (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake User
uid
      RouteBuilder
  '[ '( 'IDRequirement User, 'Satisfied),
     '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement User, 'Required),
     '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement User, 'Satisfied),
         '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement User, 'Required),
         '( 'PSRequirement "emoji", 'Required),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'PSRequirement "emoji", 'Satisfied),
            '( 'IDRequirement User, 'Satisfied),
            '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement User, 'Required),
            '( 'PSRequirement "emoji", 'Required),
            '( 'IDRequirement Message, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'PSRequirement "emoji", 'Satisfied),
        '( 'IDRequirement User, 'Satisfied),
        '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement User, 'Required),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Text
-> RouteBuilder
     '[ '( 'IDRequirement User, 'Satisfied),
        '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement User, 'Required),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'PSRequirement "emoji", 'Satisfied),
        '( 'IDRequirement User, 'Satisfied),
        '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement User, 'Required),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (s :: Symbol)
       (reqs :: [(RequirementType, RouteRequirement)]).
KnownSymbol s =>
Text
-> RouteBuilder reqs
-> RouteBuilder ('( 'PSRequirement s, 'Satisfied) : reqs)
giveParam @"emoji" (RawEmoji -> Text
renderEmoji RawEmoji
emoji)
      RouteBuilder
  '[ '( 'PSRequirement "emoji", 'Satisfied),
     '( 'IDRequirement User, 'Satisfied),
     '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement User, 'Required),
     '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'PSRequirement "emoji", 'Satisfied),
         '( 'IDRequirement User, 'Satisfied),
         '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement User, 'Required),
         '( 'PSRequirement "emoji", 'Required),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'PSRequirement "emoji", 'Satisfied),
     '( 'IDRequirement User, 'Satisfied),
     '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement User, 'Required),
     '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> 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
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"messages" RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message)
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// ID Message
forall k (a :: k). ID a
ID @Message RouteBuilder
  '[ '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"reactions" RouteBuilder
  '[ '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> PS "emoji"
-> ConsRes
     (PS "emoji")
     '[ '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// PS "emoji"
forall (s :: Symbol). PS s
PS @"emoji"
      RouteBuilder
  '[ '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'PSRequirement "emoji", 'Required),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'PSRequirement "emoji", 'Required),
            '( 'IDRequirement Message, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall t (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'PSRequirement "emoji", 'Required),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'PSRequirement "emoji", 'Satisfied),
            '( 'IDRequirement Message, 'Satisfied),
            '( 'PSRequirement "emoji", 'Required),
            '( 'IDRequirement Message, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'PSRequirement "emoji", 'Satisfied),
        '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Text
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'PSRequirement "emoji", 'Satisfied),
        '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji", 'Required),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (s :: Symbol)
       (reqs :: [(RequirementType, RouteRequirement)]).
KnownSymbol s =>
Text
-> RouteBuilder reqs
-> RouteBuilder ('( 'PSRequirement s, 'Satisfied) : reqs)
giveParam @"emoji" (RawEmoji -> Text
renderEmoji RawEmoji
emoji)
      RouteBuilder
  '[ '( 'PSRequirement "emoji", 'Satisfied),
     '( 'IDRequirement Message, 'Satisfied),
     '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'PSRequirement "emoji", 'Satisfied),
         '( 'IDRequirement Message, 'Satisfied),
         '( 'PSRequirement "emoji", 'Required),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'PSRequirement "emoji", 'Satisfied),
     '( 'IDRequirement Message, 'Satisfied),
     '( 'PSRequirement "emoji", 'Required),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> 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
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"messages" RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message)
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// ID Message
forall k (a :: k). ID a
ID @Message RouteBuilder
  '[ '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"reactions"
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement Message, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall t (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> 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
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"messages" RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message)
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// ID Message
forall k (a :: k). ID a
ID @Message
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement Message, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall t (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> 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
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"messages" RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message)
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// ID Message
forall k (a :: k). ID a
ID @Message
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement Message, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall t (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> Route
buildRoute
  route (BulkDeleteMessages (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) [m]
_) =
    Snowflake Channel
-> RouteBuilder
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"messages" RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"bulk-delete"
      RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> Route
buildRoute
  route (GetChannelInvites (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid)) =
    Snowflake Channel
-> RouteBuilder
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"invites"
      RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> Route
buildRoute
  route (CreateChannelInvite (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) CreateChannelInviteOptions
_) =
    Snowflake Channel
-> RouteBuilder
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"invites"
      RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> 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
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"permissions" RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> ID Overwrite
-> ConsRes
     (ID Overwrite)
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// ID Overwrite
forall k (a :: k). ID a
ID @Overwrite
      RouteBuilder
  '[ '( 'IDRequirement Overwrite, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Overwrite, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Overwrite, 'Satisfied),
            '( 'IDRequirement Overwrite, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Overwrite, 'Satisfied),
        '( 'IDRequirement Overwrite, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Overwrite
-> RouteBuilder
     '[ '( 'IDRequirement Overwrite, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Overwrite, 'Satisfied),
        '( 'IDRequirement Overwrite, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall t (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Overwrite
oid
      RouteBuilder
  '[ '( 'IDRequirement Overwrite, 'Satisfied),
     '( 'IDRequirement Overwrite, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Overwrite, 'Satisfied),
         '( 'IDRequirement Overwrite, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Overwrite, 'Satisfied),
     '( 'IDRequirement Overwrite, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> 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
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"permissions" RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> ID Overwrite
-> ConsRes
     (ID Overwrite)
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// ID Overwrite
forall k (a :: k). ID a
ID @Overwrite
      RouteBuilder
  '[ '( 'IDRequirement Overwrite, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Overwrite, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Overwrite, 'Satisfied),
            '( 'IDRequirement Overwrite, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Overwrite, 'Satisfied),
        '( 'IDRequirement Overwrite, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Overwrite
-> RouteBuilder
     '[ '( 'IDRequirement Overwrite, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Overwrite, 'Satisfied),
        '( 'IDRequirement Overwrite, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall t (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Overwrite
oid
      RouteBuilder
  '[ '( 'IDRequirement Overwrite, 'Satisfied),
     '( 'IDRequirement Overwrite, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Overwrite, 'Satisfied),
         '( 'IDRequirement Overwrite, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Overwrite, 'Satisfied),
     '( 'IDRequirement Overwrite, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> Route
buildRoute
  route (TriggerTyping (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid)) =
    Snowflake Channel
-> RouteBuilder
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"typing"
      RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> Route
buildRoute
  route (GetPinnedMessages (c -> Snowflake Channel
forall b a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid)) =
    Snowflake Channel
-> RouteBuilder
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"pins"
      RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> 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
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"pins" RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message)
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// ID Message
forall k (a :: k). ID a
ID @Message
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement Message, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall t (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> 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
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"pins" RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message)
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// ID Message
forall k (a :: k). ID a
ID @Message
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement Message, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall t (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement Message, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> 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
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"recipients" RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> ID User
-> ConsRes
     (ID User)
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// ID User
forall k (a :: k). ID a
ID @User
      RouteBuilder
  '[ '( 'IDRequirement User, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement User, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement User, 'Satisfied),
            '( 'IDRequirement User, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement User, 'Satisfied),
        '( 'IDRequirement User, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake User
-> RouteBuilder
     '[ '( 'IDRequirement User, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement User, 'Satisfied),
        '( 'IDRequirement User, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall t (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake User
uid
      RouteBuilder
  '[ '( 'IDRequirement User, 'Satisfied),
     '( 'IDRequirement User, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement User, 'Satisfied),
         '( 'IDRequirement User, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement User, 'Satisfied),
     '( 'IDRequirement User, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> 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
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"recipients" RouteBuilder
  '[ '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> ID User
-> ConsRes
     (ID User)
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// ID User
forall k (a :: k). ID a
ID @User
      RouteBuilder
  '[ '( 'IDRequirement User, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement User, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement User, 'Satisfied),
            '( 'IDRequirement User, 'Required),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement User, 'Satisfied),
        '( 'IDRequirement User, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake User
-> RouteBuilder
     '[ '( 'IDRequirement User, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement User, 'Satisfied),
        '( 'IDRequirement User, 'Required),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall t (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake User
uid
      RouteBuilder
  '[ '( 'IDRequirement User, 'Satisfied),
     '( 'IDRequirement User, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement User, 'Satisfied),
         '( 'IDRequirement User, 'Required),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement User, 'Satisfied),
     '( 'IDRequirement User, 'Required),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> Route
forall (reqs :: [(RequirementType, RouteRequirement)]).
EnsureFulfilled reqs =>
RouteBuilder reqs -> 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 (CrosspostMessage c
_ m
_) = Url 'Https -> Option 'Https -> Req LbsResponse
postEmpty
  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 (Snowflake Message -> Word64
forall t. Snowflake t -> Word64
fromSnowflake -> Word64
a))) Maybe ChannelMessagesLimit
l) =
    Option 'Https -> Url 'Https -> Option 'Https -> Req LbsResponse
getWithP (Text
"around" Text -> Word64 -> Option 'Https
forall param a.
(QueryParam param, ToHttpApiData a) =>
Text -> a -> param
=: Word64
a Option 'Https -> Option 'Https -> Option 'Https
forall a. Semigroup a => a -> a -> a
<> Text
"limit" Text -> Maybe Integer -> Option 'Https
forall a. ToHttpApiData a => Text -> Maybe a -> Option 'Https
=:? (Maybe ChannelMessagesLimit
l Maybe ChannelMessagesLimit
-> Getting (First Integer) (Maybe ChannelMessagesLimit) Integer
-> Maybe Integer
forall s a. s -> Getting (First a) s a -> Maybe a
^? (ChannelMessagesLimit
 -> Const (First Integer) ChannelMessagesLimit)
-> Maybe ChannelMessagesLimit
-> Const (First Integer) (Maybe ChannelMessagesLimit)
forall a b. Prism (Maybe a) (Maybe b) a b
_Just ((ChannelMessagesLimit
  -> Const (First Integer) ChannelMessagesLimit)
 -> Maybe ChannelMessagesLimit
 -> Const (First Integer) (Maybe ChannelMessagesLimit))
-> ((Integer -> Const (First Integer) Integer)
    -> ChannelMessagesLimit
    -> Const (First Integer) ChannelMessagesLimit)
-> Getting (First Integer) (Maybe ChannelMessagesLimit) Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. IsLabel
  "limit"
  ((Integer -> Const (First Integer) Integer)
   -> ChannelMessagesLimit
   -> Const (First Integer) ChannelMessagesLimit)
(Integer -> Const (First Integer) Integer)
-> ChannelMessagesLimit
-> Const (First Integer) ChannelMessagesLimit
#limit))
  action (GetChannelMessages c
_ (Just (ChannelMessagesBefore (Snowflake Message -> Word64
forall t. Snowflake t -> Word64
fromSnowflake -> Word64
a))) Maybe ChannelMessagesLimit
l) =
    Option 'Https -> Url 'Https -> Option 'Https -> Req LbsResponse
getWithP (Text
"before" Text -> Word64 -> Option 'Https
forall param a.
(QueryParam param, ToHttpApiData a) =>
Text -> a -> param
=: Word64
a Option 'Https -> Option 'Https -> Option 'Https
forall a. Semigroup a => a -> a -> a
<> Text
"limit" Text -> Maybe Integer -> Option 'Https
forall a. ToHttpApiData a => Text -> Maybe a -> Option 'Https
=:? (Maybe ChannelMessagesLimit
l Maybe ChannelMessagesLimit
-> Getting (First Integer) (Maybe ChannelMessagesLimit) Integer
-> Maybe Integer
forall s a. s -> Getting (First a) s a -> Maybe a
^? (ChannelMessagesLimit
 -> Const (First Integer) ChannelMessagesLimit)
-> Maybe ChannelMessagesLimit
-> Const (First Integer) (Maybe ChannelMessagesLimit)
forall a b. Prism (Maybe a) (Maybe b) a b
_Just ((ChannelMessagesLimit
  -> Const (First Integer) ChannelMessagesLimit)
 -> Maybe ChannelMessagesLimit
 -> Const (First Integer) (Maybe ChannelMessagesLimit))
-> ((Integer -> Const (First Integer) Integer)
    -> ChannelMessagesLimit
    -> Const (First Integer) ChannelMessagesLimit)
-> Getting (First Integer) (Maybe ChannelMessagesLimit) Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. IsLabel
  "limit"
  ((Integer -> Const (First Integer) Integer)
   -> ChannelMessagesLimit
   -> Const (First Integer) ChannelMessagesLimit)
(Integer -> Const (First Integer) Integer)
-> ChannelMessagesLimit
-> Const (First Integer) ChannelMessagesLimit
#limit))
  action (GetChannelMessages c
_ (Just (ChannelMessagesAfter (Snowflake Message -> Word64
forall t. Snowflake t -> Word64
fromSnowflake -> Word64
a))) Maybe ChannelMessagesLimit
l) =
    Option 'Https -> Url 'Https -> Option 'Https -> Req LbsResponse
getWithP (Text
"after" Text -> Word64 -> Option 'Https
forall param a.
(QueryParam param, ToHttpApiData a) =>
Text -> a -> param
=: Word64
a Option 'Https -> Option 'Https -> Option 'Https
forall a. Semigroup a => a -> a -> a
<> Text
"limit" Text -> Maybe Integer -> Option 'Https
forall a. ToHttpApiData a => Text -> Maybe a -> Option 'Https
=:? (Maybe ChannelMessagesLimit
l Maybe ChannelMessagesLimit
-> Getting (First Integer) (Maybe ChannelMessagesLimit) Integer
-> Maybe Integer
forall s a. s -> Getting (First a) s a -> Maybe a
^? (ChannelMessagesLimit
 -> Const (First Integer) ChannelMessagesLimit)
-> Maybe ChannelMessagesLimit
-> Const (First Integer) (Maybe ChannelMessagesLimit)
forall a b. Prism (Maybe a) (Maybe b) a b
_Just ((ChannelMessagesLimit
  -> Const (First Integer) ChannelMessagesLimit)
 -> Maybe ChannelMessagesLimit
 -> Const (First Integer) (Maybe ChannelMessagesLimit))
-> ((Integer -> Const (First Integer) Integer)
    -> ChannelMessagesLimit
    -> Const (First Integer) ChannelMessagesLimit)
-> Getting (First Integer) (Maybe ChannelMessagesLimit) Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. IsLabel
  "limit"
  ((Integer -> Const (First Integer) Integer)
   -> ChannelMessagesLimit
   -> Const (First Integer) ChannelMessagesLimit)
(Integer -> Const (First Integer) Integer)
-> ChannelMessagesLimit
-> Const (First Integer) ChannelMessagesLimit
#limit))
  action (GetChannelMessages c
_ Maybe ChannelMessagesFilter
Nothing Maybe ChannelMessagesLimit
l) = Option 'Https -> Url 'Https -> Option 'Https -> Req LbsResponse
getWithP (Text
"limit" Text -> Maybe Integer -> Option 'Https
forall a. ToHttpApiData a => Text -> Maybe a -> Option 'Https
=:? (Maybe ChannelMessagesLimit
l Maybe ChannelMessagesLimit
-> Getting (First Integer) (Maybe ChannelMessagesLimit) Integer
-> Maybe Integer
forall s a. s -> Getting (First a) s a -> Maybe a
^? (ChannelMessagesLimit
 -> Const (First Integer) ChannelMessagesLimit)
-> Maybe ChannelMessagesLimit
-> Const (First Integer) (Maybe ChannelMessagesLimit)
forall a b. Prism (Maybe a) (Maybe b) a b
_Just ((ChannelMessagesLimit
  -> Const (First Integer) ChannelMessagesLimit)
 -> Maybe ChannelMessagesLimit
 -> Const (First Integer) (Maybe ChannelMessagesLimit))
-> ((Integer -> Const (First Integer) Integer)
    -> ChannelMessagesLimit
    -> Const (First Integer) ChannelMessagesLimit)
-> Getting (First Integer) (Maybe ChannelMessagesLimit) Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. IsLabel
  "limit"
  ((Integer -> Const (First Integer) Integer)
   -> ChannelMessagesLimit
   -> Const (First Integer) ChannelMessagesLimit)
(Integer -> Const (First Integer) Integer)
-> ChannelMessagesLimit
-> Const (First Integer) ChannelMessagesLimit
#limit))
  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 Word64 -> Option 'Https
forall a. ToHttpApiData a => Text -> Maybe a -> Option 'Https
=:? (Snowflake User -> Word64
forall t. Snowflake t -> Word64
fromSnowflake (Snowflake User -> Word64)
-> Maybe (Snowflake User) -> Maybe Word64
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 Word64 -> Option 'Https
forall a. ToHttpApiData a => Text -> Maybe a -> Option 'Https
=:? (Snowflake User -> Word64
forall t. Snowflake t -> Word64
fromSnowflake (Snowflake User -> Word64)
-> Maybe (Snowflake User) -> Maybe Word64
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 Integer -> Option 'Https
forall a. ToHttpApiData a => Text -> Maybe a -> Option 'Https
=:? 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