{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS_GHC -Wno-partial-type-signatures #-}

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

import Calamity.HTTP.Internal.Request
import Calamity.HTTP.Internal.Route
import Calamity.Internal.Utils (CalamityToJSON (..), CalamityToJSON' (..), (.=), (.?=))
import Calamity.Types.Model.Channel
import Calamity.Types.Model.Guild.Emoji (RawEmoji (..))
import Calamity.Types.Model.Guild.Invite (Invite)
import Calamity.Types.Model.Guild.Overwrite (Overwrite)
import Calamity.Types.Model.Guild.Role (Role)
import Calamity.Types.Model.User
import Calamity.Types.Snowflake
import Data.Aeson qualified as Aeson
import Data.Aeson.KeyMap qualified as K
import Data.ByteString.Lazy (ByteString)
import Data.Default.Class
import Data.Maybe (fromMaybe)
import Data.Text (Text)
import Data.Text qualified as T
import Data.Word
import Network.HTTP.Client.MultipartFormData
import Network.HTTP.Req
import Network.Mime
import Optics
import TextShow

data CreateMessageAttachment = CreateMessageAttachment
  { CreateMessageAttachment -> Text
filename :: Text
  , CreateMessageAttachment -> Maybe Text
description :: Maybe Text
  , CreateMessageAttachment -> ByteString
content :: ByteString
  }
  deriving (Int -> CreateMessageAttachment -> ShowS
[CreateMessageAttachment] -> ShowS
CreateMessageAttachment -> String
(Int -> CreateMessageAttachment -> ShowS)
-> (CreateMessageAttachment -> String)
-> ([CreateMessageAttachment] -> ShowS)
-> Show CreateMessageAttachment
forall (a :: OpticKind).
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CreateMessageAttachment -> ShowS
showsPrec :: Int -> CreateMessageAttachment -> ShowS
$cshow :: CreateMessageAttachment -> String
show :: CreateMessageAttachment -> String
$cshowList :: [CreateMessageAttachment] -> ShowS
showList :: [CreateMessageAttachment] -> ShowS
Show)

data CreateMessageOptions = CreateMessageOptions
  { CreateMessageOptions -> Maybe Text
content :: Maybe Text
  , CreateMessageOptions -> Maybe Text
nonce :: Maybe Text
  , CreateMessageOptions -> Maybe Bool
tts :: Maybe Bool
  , CreateMessageOptions -> Maybe [CreateMessageAttachment]
attachments :: Maybe [CreateMessageAttachment]
  , CreateMessageOptions -> Maybe [Embed]
embeds :: Maybe [Embed]
  , CreateMessageOptions -> Maybe AllowedMentions
allowedMentions :: Maybe AllowedMentions
  , CreateMessageOptions -> Maybe MessageReference
messageReference :: Maybe MessageReference
  , CreateMessageOptions -> Maybe [Component]
components :: Maybe [Component]
  }
  deriving (Int -> CreateMessageOptions -> ShowS
[CreateMessageOptions] -> ShowS
CreateMessageOptions -> String
(Int -> CreateMessageOptions -> ShowS)
-> (CreateMessageOptions -> String)
-> ([CreateMessageOptions] -> ShowS)
-> Show CreateMessageOptions
forall (a :: OpticKind).
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CreateMessageOptions -> ShowS
showsPrec :: Int -> CreateMessageOptions -> ShowS
$cshow :: CreateMessageOptions -> String
show :: CreateMessageOptions -> String
$cshowList :: [CreateMessageOptions] -> ShowS
showList :: [CreateMessageOptions] -> ShowS
Show)

instance Default CreateMessageOptions where
  def :: CreateMessageOptions
def = Maybe Text
-> Maybe Text
-> Maybe Bool
-> Maybe [CreateMessageAttachment]
-> Maybe [Embed]
-> Maybe AllowedMentions
-> Maybe MessageReference
-> Maybe [Component]
-> CreateMessageOptions
CreateMessageOptions Maybe Text
forall (a :: OpticKind). Maybe a
Nothing Maybe Text
forall (a :: OpticKind). Maybe a
Nothing Maybe Bool
forall (a :: OpticKind). Maybe a
Nothing Maybe [CreateMessageAttachment]
forall (a :: OpticKind). Maybe a
Nothing Maybe [Embed]
forall (a :: OpticKind). Maybe a
Nothing Maybe AllowedMentions
forall (a :: OpticKind). Maybe a
Nothing Maybe MessageReference
forall (a :: OpticKind). Maybe a
Nothing Maybe [Component]
forall (a :: OpticKind). Maybe a
Nothing

data CreateMessageAttachmentJson = CreateMessageAttachmentJson
  { CreateMessageAttachmentJson -> Int
id :: Int
  , CreateMessageAttachmentJson -> Text
filename :: Text
  , CreateMessageAttachmentJson -> Maybe Text
description :: Maybe Text
  }
  deriving (Int -> CreateMessageAttachmentJson -> ShowS
[CreateMessageAttachmentJson] -> ShowS
CreateMessageAttachmentJson -> String
(Int -> CreateMessageAttachmentJson -> ShowS)
-> (CreateMessageAttachmentJson -> String)
-> ([CreateMessageAttachmentJson] -> ShowS)
-> Show CreateMessageAttachmentJson
forall (a :: OpticKind).
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CreateMessageAttachmentJson -> ShowS
showsPrec :: Int -> CreateMessageAttachmentJson -> ShowS
$cshow :: CreateMessageAttachmentJson -> String
show :: CreateMessageAttachmentJson -> String
$cshowList :: [CreateMessageAttachmentJson] -> ShowS
showList :: [CreateMessageAttachmentJson] -> ShowS
Show)
  deriving ([CreateMessageAttachmentJson] -> Value
[CreateMessageAttachmentJson] -> Encoding
CreateMessageAttachmentJson -> Value
CreateMessageAttachmentJson -> Encoding
(CreateMessageAttachmentJson -> Value)
-> (CreateMessageAttachmentJson -> Encoding)
-> ([CreateMessageAttachmentJson] -> Value)
-> ([CreateMessageAttachmentJson] -> Encoding)
-> ToJSON CreateMessageAttachmentJson
forall (a :: OpticKind).
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: CreateMessageAttachmentJson -> Value
toJSON :: CreateMessageAttachmentJson -> Value
$ctoEncoding :: CreateMessageAttachmentJson -> Encoding
toEncoding :: CreateMessageAttachmentJson -> Encoding
$ctoJSONList :: [CreateMessageAttachmentJson] -> Value
toJSONList :: [CreateMessageAttachmentJson] -> Value
$ctoEncodingList :: [CreateMessageAttachmentJson] -> Encoding
toEncodingList :: [CreateMessageAttachmentJson] -> Encoding
Aeson.ToJSON) via CalamityToJSON CreateMessageAttachmentJson

instance CalamityToJSON' CreateMessageAttachmentJson where
  toPairs :: forall (kv :: OpticKind).
KeyValue kv =>
CreateMessageAttachmentJson -> [Maybe kv]
toPairs CreateMessageAttachmentJson {Int
Maybe Text
Text
$sel:id:CreateMessageAttachmentJson :: CreateMessageAttachmentJson -> Int
$sel:filename:CreateMessageAttachmentJson :: CreateMessageAttachmentJson -> Text
$sel:description:CreateMessageAttachmentJson :: CreateMessageAttachmentJson -> Maybe Text
id :: Int
filename :: Text
description :: Maybe Text
..} =
    [ Key
"filename" Key -> Text -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> v -> Maybe kv
.= Text
filename
    , Key
"description" Key -> Maybe Text -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe Text
description
    , Key
"id" Key -> Int -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> v -> Maybe kv
.= Int
id
    ]

data CreateMessageJson = CreateMessageJson
  { CreateMessageJson -> Maybe Text
content :: Maybe Text
  , CreateMessageJson -> Maybe Text
nonce :: Maybe Text
  , CreateMessageJson -> Maybe Bool
tts :: Maybe Bool
  , CreateMessageJson -> Maybe [Embed]
embeds :: Maybe [Embed]
  , CreateMessageJson -> Maybe AllowedMentions
allowedMentions :: Maybe AllowedMentions
  , CreateMessageJson -> Maybe MessageReference
messageReference :: Maybe MessageReference
  , CreateMessageJson -> Maybe [Component]
components :: Maybe [Component]
  , CreateMessageJson -> Maybe [CreateMessageAttachmentJson]
attachments :: Maybe [CreateMessageAttachmentJson]
  }
  deriving (Int -> CreateMessageJson -> ShowS
[CreateMessageJson] -> ShowS
CreateMessageJson -> String
(Int -> CreateMessageJson -> ShowS)
-> (CreateMessageJson -> String)
-> ([CreateMessageJson] -> ShowS)
-> Show CreateMessageJson
forall (a :: OpticKind).
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CreateMessageJson -> ShowS
showsPrec :: Int -> CreateMessageJson -> ShowS
$cshow :: CreateMessageJson -> String
show :: CreateMessageJson -> String
$cshowList :: [CreateMessageJson] -> ShowS
showList :: [CreateMessageJson] -> ShowS
Show)
  deriving ([CreateMessageJson] -> Value
[CreateMessageJson] -> Encoding
CreateMessageJson -> Value
CreateMessageJson -> Encoding
(CreateMessageJson -> Value)
-> (CreateMessageJson -> Encoding)
-> ([CreateMessageJson] -> Value)
-> ([CreateMessageJson] -> Encoding)
-> ToJSON CreateMessageJson
forall (a :: OpticKind).
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: CreateMessageJson -> Value
toJSON :: CreateMessageJson -> Value
$ctoEncoding :: CreateMessageJson -> Encoding
toEncoding :: CreateMessageJson -> Encoding
$ctoJSONList :: [CreateMessageJson] -> Value
toJSONList :: [CreateMessageJson] -> Value
$ctoEncodingList :: [CreateMessageJson] -> Encoding
toEncodingList :: [CreateMessageJson] -> Encoding
Aeson.ToJSON) via CalamityToJSON CreateMessageJson

instance CalamityToJSON' CreateMessageJson where
  toPairs :: forall (kv :: OpticKind).
KeyValue kv =>
CreateMessageJson -> [Maybe kv]
toPairs CreateMessageJson {Maybe Bool
Maybe [Embed]
Maybe [Component]
Maybe [CreateMessageAttachmentJson]
Maybe Text
Maybe MessageReference
Maybe AllowedMentions
$sel:content:CreateMessageJson :: CreateMessageJson -> Maybe Text
$sel:nonce:CreateMessageJson :: CreateMessageJson -> Maybe Text
$sel:tts:CreateMessageJson :: CreateMessageJson -> Maybe Bool
$sel:embeds:CreateMessageJson :: CreateMessageJson -> Maybe [Embed]
$sel:allowedMentions:CreateMessageJson :: CreateMessageJson -> Maybe AllowedMentions
$sel:messageReference:CreateMessageJson :: CreateMessageJson -> Maybe MessageReference
$sel:components:CreateMessageJson :: CreateMessageJson -> Maybe [Component]
$sel:attachments:CreateMessageJson :: CreateMessageJson -> Maybe [CreateMessageAttachmentJson]
content :: Maybe Text
nonce :: Maybe Text
tts :: Maybe Bool
embeds :: Maybe [Embed]
allowedMentions :: Maybe AllowedMentions
messageReference :: Maybe MessageReference
components :: Maybe [Component]
attachments :: Maybe [CreateMessageAttachmentJson]
..} =
    [ Key
"content" Key -> Maybe Text -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe Text
content
    , Key
"nonce" Key -> Maybe Text -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe Text
nonce
    , Key
"tts" Key -> Maybe Bool -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe Bool
tts
    , Key
"embeds" Key -> Maybe [Embed] -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe [Embed]
embeds
    , Key
"allowed_mentions" Key -> Maybe AllowedMentions -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe AllowedMentions
allowedMentions
    , Key
"message_reference" Key -> Maybe MessageReference -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe MessageReference
messageReference
    , Key
"components" Key -> Maybe [Component] -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe [Component]
components
    , Key
"attachments" Key -> Maybe [CreateMessageAttachmentJson] -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe [CreateMessageAttachmentJson]
attachments
    ]

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

instance Aeson.ToJSON AllowedMentionType where
  toJSON :: AllowedMentionType -> Value
toJSON AllowedMentionType
AllowedMentionRoles = Text -> Value
Aeson.String Text
"roles"
  toJSON AllowedMentionType
AllowedMentionUsers = Text -> Value
Aeson.String Text
"users"
  toJSON AllowedMentionType
AllowedMentionEveryone = Text -> Value
Aeson.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 :: OpticKind).
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AllowedMentions -> ShowS
showsPrec :: Int -> AllowedMentions -> ShowS
$cshow :: AllowedMentions -> String
show :: AllowedMentions -> String
$cshowList :: [AllowedMentions] -> ShowS
showList :: [AllowedMentions] -> ShowS
Show)
  deriving ([AllowedMentions] -> Value
[AllowedMentions] -> Encoding
AllowedMentions -> Value
AllowedMentions -> Encoding
(AllowedMentions -> Value)
-> (AllowedMentions -> Encoding)
-> ([AllowedMentions] -> Value)
-> ([AllowedMentions] -> Encoding)
-> ToJSON AllowedMentions
forall (a :: OpticKind).
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: AllowedMentions -> Value
toJSON :: AllowedMentions -> Value
$ctoEncoding :: AllowedMentions -> Encoding
toEncoding :: AllowedMentions -> Encoding
$ctoJSONList :: [AllowedMentions] -> Value
toJSONList :: [AllowedMentions] -> Value
$ctoEncodingList :: [AllowedMentions] -> Encoding
toEncodingList :: [AllowedMentions] -> Encoding
Aeson.ToJSON) via CalamityToJSON AllowedMentions

instance CalamityToJSON' AllowedMentions where
  toPairs :: forall (kv :: OpticKind).
KeyValue kv =>
AllowedMentions -> [Maybe kv]
toPairs AllowedMentions {Bool
[Snowflake Role]
[Snowflake User]
[AllowedMentionType]
$sel:parse:AllowedMentions :: AllowedMentions -> [AllowedMentionType]
$sel:roles:AllowedMentions :: AllowedMentions -> [Snowflake Role]
$sel:users:AllowedMentions :: AllowedMentions -> [Snowflake User]
$sel:repliedUser:AllowedMentions :: AllowedMentions -> Bool
parse :: [AllowedMentionType]
roles :: [Snowflake Role]
users :: [Snowflake User]
repliedUser :: Bool
..} =
    [ Key
"parse" Key -> [AllowedMentionType] -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> v -> Maybe kv
.= [AllowedMentionType]
parse
    , Key
"roles" Key -> [Snowflake Role] -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> v -> Maybe kv
.= [Snowflake Role]
roles
    , Key
"users" Key -> [Snowflake User] -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> v -> Maybe kv
.= [Snowflake User]
users
    , Key
"replied_user" Key -> Bool -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> v -> Maybe kv
.= Bool
repliedUser
    ]

instance Default AllowedMentions where
  def :: AllowedMentions
def = [AllowedMentionType]
-> [Snowflake Role] -> [Snowflake User] -> Bool -> AllowedMentions
AllowedMentions [AllowedMentionType]
forall (a :: OpticKind). Default a => a
def [Snowflake Role]
forall (a :: OpticKind). Default a => a
def [Snowflake User]
forall (a :: OpticKind). 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 :: OpticKind). Semigroup a => a -> a -> a
<> [AllowedMentionType]
p1) ([Snowflake Role]
r0 [Snowflake Role] -> [Snowflake Role] -> [Snowflake Role]
forall (a :: OpticKind). Semigroup a => a -> a -> a
<> [Snowflake Role]
r1) ([Snowflake User]
u0 [Snowflake User] -> [Snowflake User] -> [Snowflake User]
forall (a :: OpticKind). 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 :: OpticKind). Default a => a
def

{- | 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 Aeson.Object
  deriving stock (Int -> EditMessageData -> ShowS
[EditMessageData] -> ShowS
EditMessageData -> String
(Int -> EditMessageData -> ShowS)
-> (EditMessageData -> String)
-> ([EditMessageData] -> ShowS)
-> Show EditMessageData
forall (a :: OpticKind).
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> EditMessageData -> ShowS
showsPrec :: Int -> EditMessageData -> ShowS
$cshow :: EditMessageData -> String
show :: EditMessageData -> String
$cshowList :: [EditMessageData] -> ShowS
showList :: [EditMessageData] -> ShowS
Show)
  deriving newtype ([EditMessageData] -> Value
[EditMessageData] -> Encoding
EditMessageData -> Value
EditMessageData -> Encoding
(EditMessageData -> Value)
-> (EditMessageData -> Encoding)
-> ([EditMessageData] -> Value)
-> ([EditMessageData] -> Encoding)
-> ToJSON EditMessageData
forall (a :: OpticKind).
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: EditMessageData -> Value
toJSON :: EditMessageData -> Value
$ctoEncoding :: EditMessageData -> Encoding
toEncoding :: EditMessageData -> Encoding
$ctoJSONList :: [EditMessageData] -> Value
toJSONList :: [EditMessageData] -> Value
$ctoEncodingList :: [EditMessageData] -> Encoding
toEncodingList :: [EditMessageData] -> Encoding
Aeson.ToJSON, NonEmpty EditMessageData -> EditMessageData
EditMessageData -> EditMessageData -> EditMessageData
(EditMessageData -> EditMessageData -> EditMessageData)
-> (NonEmpty EditMessageData -> EditMessageData)
-> (forall (b :: OpticKind).
    Integral b =>
    b -> EditMessageData -> EditMessageData)
-> Semigroup EditMessageData
forall (b :: OpticKind).
Integral b =>
b -> EditMessageData -> EditMessageData
forall (a :: OpticKind).
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall (b :: OpticKind). Integral b => b -> a -> a)
-> Semigroup a
$c<> :: EditMessageData -> EditMessageData -> EditMessageData
<> :: EditMessageData -> EditMessageData -> EditMessageData
$csconcat :: NonEmpty EditMessageData -> EditMessageData
sconcat :: NonEmpty EditMessageData -> EditMessageData
$cstimes :: forall (b :: OpticKind).
Integral b =>
b -> EditMessageData -> EditMessageData
stimes :: forall (b :: OpticKind).
Integral b =>
b -> EditMessageData -> EditMessageData
Semigroup, Semigroup EditMessageData
EditMessageData
Semigroup EditMessageData
-> EditMessageData
-> (EditMessageData -> EditMessageData -> EditMessageData)
-> ([EditMessageData] -> EditMessageData)
-> Monoid EditMessageData
[EditMessageData] -> EditMessageData
EditMessageData -> EditMessageData -> EditMessageData
forall (a :: OpticKind).
Semigroup a -> a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
$cmempty :: EditMessageData
mempty :: EditMessageData
$cmappend :: EditMessageData -> EditMessageData -> EditMessageData
mappend :: EditMessageData -> EditMessageData -> EditMessageData
$cmconcat :: [EditMessageData] -> EditMessageData
mconcat :: [EditMessageData] -> EditMessageData
Monoid)

editMessageContent :: Maybe Text -> EditMessageData
editMessageContent :: Maybe Text -> EditMessageData
editMessageContent Maybe Text
v = Object -> EditMessageData
EditMessageData (Object -> EditMessageData) -> Object -> EditMessageData
forall (a :: OpticKind) b. (a -> b) -> a -> b
$ [(Key, Value)] -> Object
forall (v :: OpticKind). [(Key, v)] -> KeyMap v
K.fromList [(Key
"content", Maybe Text -> Value
forall (a :: OpticKind). ToJSON a => a -> Value
Aeson.toJSON Maybe Text
v)]

editMessageEmbeds :: [Embed] -> EditMessageData
editMessageEmbeds :: [Embed] -> EditMessageData
editMessageEmbeds [Embed]
v = Object -> EditMessageData
EditMessageData (Object -> EditMessageData) -> Object -> EditMessageData
forall (a :: OpticKind) b. (a -> b) -> a -> b
$ [(Key, Value)] -> Object
forall (v :: OpticKind). [(Key, v)] -> KeyMap v
K.fromList [(Key
"embeds", [Embed] -> Value
forall (a :: OpticKind). ToJSON a => a -> Value
Aeson.toJSON [Embed]
v)]

editMessageFlags :: Maybe Word64 -> EditMessageData
editMessageFlags :: Maybe Word64 -> EditMessageData
editMessageFlags Maybe Word64
v = Object -> EditMessageData
EditMessageData (Object -> EditMessageData) -> Object -> EditMessageData
forall (a :: OpticKind) b. (a -> b) -> a -> b
$ [(Key, Value)] -> Object
forall (v :: OpticKind). [(Key, v)] -> KeyMap v
K.fromList [(Key
"flags", Maybe Word64 -> Value
forall (a :: OpticKind). ToJSON a => a -> Value
Aeson.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 :: OpticKind) b. (a -> b) -> a -> b
$ [(Key, Value)] -> Object
forall (v :: OpticKind). [(Key, v)] -> KeyMap v
K.fromList [(Key
"allowed_mentions", Maybe AllowedMentions -> Value
forall (a :: OpticKind). ToJSON a => a -> Value
Aeson.toJSON Maybe AllowedMentions
v)]

editMessageComponents :: [Component] -> EditMessageData
editMessageComponents :: [Component] -> EditMessageData
editMessageComponents [Component]
v = Object -> EditMessageData
EditMessageData (Object -> EditMessageData) -> Object -> EditMessageData
forall (a :: OpticKind) b. (a -> b) -> a -> b
$ [(Key, Value)] -> Object
forall (v :: OpticKind). [(Key, v)] -> KeyMap v
K.fromList [(Key
"components", [Component] -> Value
forall (a :: OpticKind). ToJSON a => a -> Value
Aeson.toJSON [Component]
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 (Int -> ChannelUpdate -> ShowS
[ChannelUpdate] -> ShowS
ChannelUpdate -> String
(Int -> ChannelUpdate -> ShowS)
-> (ChannelUpdate -> String)
-> ([ChannelUpdate] -> ShowS)
-> Show ChannelUpdate
forall (a :: OpticKind).
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ChannelUpdate -> ShowS
showsPrec :: Int -> ChannelUpdate -> ShowS
$cshow :: ChannelUpdate -> String
show :: ChannelUpdate -> String
$cshowList :: [ChannelUpdate] -> ShowS
showList :: [ChannelUpdate] -> ShowS
Show)
  deriving ([ChannelUpdate] -> Value
[ChannelUpdate] -> Encoding
ChannelUpdate -> Value
ChannelUpdate -> Encoding
(ChannelUpdate -> Value)
-> (ChannelUpdate -> Encoding)
-> ([ChannelUpdate] -> Value)
-> ([ChannelUpdate] -> Encoding)
-> ToJSON ChannelUpdate
forall (a :: OpticKind).
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: ChannelUpdate -> Value
toJSON :: ChannelUpdate -> Value
$ctoEncoding :: ChannelUpdate -> Encoding
toEncoding :: ChannelUpdate -> Encoding
$ctoJSONList :: [ChannelUpdate] -> Value
toJSONList :: [ChannelUpdate] -> Value
$ctoEncodingList :: [ChannelUpdate] -> Encoding
toEncodingList :: [ChannelUpdate] -> Encoding
Aeson.ToJSON) via CalamityToJSON ChannelUpdate

instance Default ChannelUpdate where
  def :: ChannelUpdate
def = Maybe Text
-> Maybe Int
-> Maybe Text
-> Maybe Bool
-> Maybe Int
-> Maybe Int
-> Maybe Int
-> Maybe [Overwrite]
-> Maybe (Snowflake Channel)
-> ChannelUpdate
ChannelUpdate Maybe Text
forall (a :: OpticKind). Maybe a
Nothing Maybe Int
forall (a :: OpticKind). Maybe a
Nothing Maybe Text
forall (a :: OpticKind). Maybe a
Nothing Maybe Bool
forall (a :: OpticKind). Maybe a
Nothing Maybe Int
forall (a :: OpticKind). Maybe a
Nothing Maybe Int
forall (a :: OpticKind). Maybe a
Nothing Maybe Int
forall (a :: OpticKind). Maybe a
Nothing Maybe [Overwrite]
forall (a :: OpticKind). Maybe a
Nothing Maybe (Snowflake Channel)
forall (a :: OpticKind). Maybe a
Nothing

instance CalamityToJSON' ChannelUpdate where
  toPairs :: forall (kv :: OpticKind).
KeyValue kv =>
ChannelUpdate -> [Maybe kv]
toPairs ChannelUpdate {Maybe Bool
Maybe Int
Maybe [Overwrite]
Maybe Text
Maybe (Snowflake Channel)
$sel:name:ChannelUpdate :: ChannelUpdate -> Maybe Text
$sel:position:ChannelUpdate :: ChannelUpdate -> Maybe Int
$sel:topic:ChannelUpdate :: ChannelUpdate -> Maybe Text
$sel:nsfw:ChannelUpdate :: ChannelUpdate -> Maybe Bool
$sel:rateLimitPerUser:ChannelUpdate :: ChannelUpdate -> Maybe Int
$sel:bitrate:ChannelUpdate :: ChannelUpdate -> Maybe Int
$sel:userLimit:ChannelUpdate :: ChannelUpdate -> Maybe Int
$sel:permissionOverwrites:ChannelUpdate :: ChannelUpdate -> Maybe [Overwrite]
$sel:parentID:ChannelUpdate :: ChannelUpdate -> Maybe (Snowflake Channel)
name :: Maybe Text
position :: Maybe Int
topic :: Maybe Text
nsfw :: Maybe Bool
rateLimitPerUser :: Maybe Int
bitrate :: Maybe Int
userLimit :: Maybe Int
permissionOverwrites :: Maybe [Overwrite]
parentID :: Maybe (Snowflake Channel)
..} =
    [ Key
"name" Key -> Maybe Text -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe Text
name
    , Key
"position" Key -> Maybe Int -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe Int
position
    , Key
"topic" Key -> Maybe Text -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe Text
topic
    , Key
"nsfw" Key -> Maybe Bool -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe Bool
nsfw
    , Key
"rate_limit_per_user" Key -> Maybe Int -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe Int
rateLimitPerUser
    , Key
"bitrate" Key -> Maybe Int -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe Int
bitrate
    , Key
"user_limit" Key -> Maybe Int -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe Int
userLimit
    , Key
"permission_overwrites" Key -> Maybe [Overwrite] -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe [Overwrite]
permissionOverwrites
    , Key
"parent_id" Key -> Maybe (Snowflake Channel) -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe (Snowflake Channel)
parentID
    ]

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

instance CalamityToJSON' ChannelMessagesFilter where
  toPairs :: forall (kv :: OpticKind).
KeyValue kv =>
ChannelMessagesFilter -> [Maybe kv]
toPairs ChannelMessagesAround {Snowflake Message
$sel:around:ChannelMessagesAround :: ChannelMessagesFilter -> Snowflake Message
around :: Snowflake Message
around} = [Key
"around" Key -> Snowflake Message -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> v -> Maybe kv
.= Snowflake Message
around]
  toPairs ChannelMessagesBefore {Snowflake Message
$sel:before:ChannelMessagesAround :: ChannelMessagesFilter -> Snowflake Message
before :: Snowflake Message
before} = [Key
"before" Key -> Snowflake Message -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> v -> Maybe kv
.= Snowflake Message
before]
  toPairs ChannelMessagesAfter {Snowflake Message
$sel:after:ChannelMessagesAround :: ChannelMessagesFilter -> Snowflake Message
after :: Snowflake Message
after} = [Key
"after" Key -> Snowflake Message -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> v -> Maybe kv
.= Snowflake Message
after]

newtype ChannelMessagesLimit = ChannelMessagesLimit
  { ChannelMessagesLimit -> Integer
limit :: Integer
  }
  deriving stock (Int -> ChannelMessagesLimit -> ShowS
[ChannelMessagesLimit] -> ShowS
ChannelMessagesLimit -> String
(Int -> ChannelMessagesLimit -> ShowS)
-> (ChannelMessagesLimit -> String)
-> ([ChannelMessagesLimit] -> ShowS)
-> Show ChannelMessagesLimit
forall (a :: OpticKind).
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ChannelMessagesLimit -> ShowS
showsPrec :: Int -> ChannelMessagesLimit -> ShowS
$cshow :: ChannelMessagesLimit -> String
show :: ChannelMessagesLimit -> String
$cshowList :: [ChannelMessagesLimit] -> ShowS
showList :: [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 :: OpticKind).
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GetReactionsOptions -> ShowS
showsPrec :: Int -> GetReactionsOptions -> ShowS
$cshow :: GetReactionsOptions -> String
show :: GetReactionsOptions -> String
$cshowList :: [GetReactionsOptions] -> ShowS
showList :: [GetReactionsOptions] -> ShowS
Show)

instance Default GetReactionsOptions where
  def :: GetReactionsOptions
def = Maybe (Snowflake User)
-> Maybe (Snowflake User) -> Maybe Integer -> GetReactionsOptions
GetReactionsOptions Maybe (Snowflake User)
forall (a :: OpticKind). Maybe a
Nothing Maybe (Snowflake User)
forall (a :: OpticKind). Maybe a
Nothing Maybe Integer
forall (a :: OpticKind). Maybe a
Nothing

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 :: OpticKind).
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CreateChannelInviteOptions -> ShowS
showsPrec :: Int -> CreateChannelInviteOptions -> ShowS
$cshow :: CreateChannelInviteOptions -> String
show :: CreateChannelInviteOptions -> String
$cshowList :: [CreateChannelInviteOptions] -> ShowS
showList :: [CreateChannelInviteOptions] -> ShowS
Show)
  deriving ([CreateChannelInviteOptions] -> Value
[CreateChannelInviteOptions] -> Encoding
CreateChannelInviteOptions -> Value
CreateChannelInviteOptions -> Encoding
(CreateChannelInviteOptions -> Value)
-> (CreateChannelInviteOptions -> Encoding)
-> ([CreateChannelInviteOptions] -> Value)
-> ([CreateChannelInviteOptions] -> Encoding)
-> ToJSON CreateChannelInviteOptions
forall (a :: OpticKind).
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: CreateChannelInviteOptions -> Value
toJSON :: CreateChannelInviteOptions -> Value
$ctoEncoding :: CreateChannelInviteOptions -> Encoding
toEncoding :: CreateChannelInviteOptions -> Encoding
$ctoJSONList :: [CreateChannelInviteOptions] -> Value
toJSONList :: [CreateChannelInviteOptions] -> Value
$ctoEncodingList :: [CreateChannelInviteOptions] -> Encoding
toEncodingList :: [CreateChannelInviteOptions] -> Encoding
Aeson.ToJSON) via CalamityToJSON CreateChannelInviteOptions

instance Default CreateChannelInviteOptions where
  def :: CreateChannelInviteOptions
def = Maybe Int
-> Maybe Int
-> Maybe Bool
-> Maybe Bool
-> CreateChannelInviteOptions
CreateChannelInviteOptions Maybe Int
forall (a :: OpticKind). Maybe a
Nothing Maybe Int
forall (a :: OpticKind). Maybe a
Nothing Maybe Bool
forall (a :: OpticKind). Maybe a
Nothing Maybe Bool
forall (a :: OpticKind). Maybe a
Nothing

instance CalamityToJSON' CreateChannelInviteOptions where
  toPairs :: forall (kv :: OpticKind).
KeyValue kv =>
CreateChannelInviteOptions -> [Maybe kv]
toPairs CreateChannelInviteOptions {Maybe Bool
Maybe Int
$sel:maxAge:CreateChannelInviteOptions :: CreateChannelInviteOptions -> Maybe Int
$sel:maxUses:CreateChannelInviteOptions :: CreateChannelInviteOptions -> Maybe Int
$sel:temporary:CreateChannelInviteOptions :: CreateChannelInviteOptions -> Maybe Bool
$sel:unique:CreateChannelInviteOptions :: CreateChannelInviteOptions -> Maybe Bool
maxAge :: Maybe Int
maxUses :: Maybe Int
temporary :: Maybe Bool
unique :: Maybe Bool
..} =
    [ Key
"max_age" Key -> Maybe Int -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe Int
maxAge
    , Key
"max_uses" Key -> Maybe Int -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe Int
maxUses
    , Key
"temporary" Key -> Maybe Bool -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe Bool
temporary
    , Key
"unique" Key -> Maybe Bool -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> Maybe v -> Maybe kv
.?= Maybe Bool
unique
    ]

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 :: OpticKind).
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GroupDMAddRecipientOptions -> ShowS
showsPrec :: Int -> GroupDMAddRecipientOptions -> ShowS
$cshow :: GroupDMAddRecipientOptions -> String
show :: GroupDMAddRecipientOptions -> String
$cshowList :: [GroupDMAddRecipientOptions] -> ShowS
showList :: [GroupDMAddRecipientOptions] -> ShowS
Show)
  deriving ([GroupDMAddRecipientOptions] -> Value
[GroupDMAddRecipientOptions] -> Encoding
GroupDMAddRecipientOptions -> Value
GroupDMAddRecipientOptions -> Encoding
(GroupDMAddRecipientOptions -> Value)
-> (GroupDMAddRecipientOptions -> Encoding)
-> ([GroupDMAddRecipientOptions] -> Value)
-> ([GroupDMAddRecipientOptions] -> Encoding)
-> ToJSON GroupDMAddRecipientOptions
forall (a :: OpticKind).
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: GroupDMAddRecipientOptions -> Value
toJSON :: GroupDMAddRecipientOptions -> Value
$ctoEncoding :: GroupDMAddRecipientOptions -> Encoding
toEncoding :: GroupDMAddRecipientOptions -> Encoding
$ctoJSONList :: [GroupDMAddRecipientOptions] -> Value
toJSONList :: [GroupDMAddRecipientOptions] -> Value
$ctoEncodingList :: [GroupDMAddRecipientOptions] -> Encoding
toEncodingList :: [GroupDMAddRecipientOptions] -> Encoding
Aeson.ToJSON) via CalamityToJSON GroupDMAddRecipientOptions

instance CalamityToJSON' GroupDMAddRecipientOptions where
  toPairs :: forall (kv :: OpticKind).
KeyValue kv =>
GroupDMAddRecipientOptions -> [Maybe kv]
toPairs GroupDMAddRecipientOptions {Text
$sel:accessToken:GroupDMAddRecipientOptions :: GroupDMAddRecipientOptions -> Text
$sel:nick:GroupDMAddRecipientOptions :: GroupDMAddRecipientOptions -> Text
accessToken :: Text
nick :: Text
..} =
    [ Key
"access_token" Key -> Text -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> v -> Maybe kv
.= Text
accessToken
    , Key
"nick" Key -> Text -> Maybe kv
forall (v :: OpticKind) (kv :: OpticKind).
(ToJSON v, KeyValue kv) =>
Key -> v -> Maybe kv
.= Text
nick
    ]

$(makeFieldLabelsNoPrefix ''CreateMessageAttachment)
$(makeFieldLabelsNoPrefix ''CreateMessageOptions)
$(makeFieldLabelsNoPrefix ''CreateMessageAttachmentJson)
$(makeFieldLabelsNoPrefix ''AllowedMentions)
$(makeFieldLabelsNoPrefix ''ChannelUpdate)
$(makeFieldLabelsNoPrefix ''ChannelMessagesFilter)
$(makeFieldLabelsNoPrefix ''ChannelMessagesLimit)
$(makeFieldLabelsNoPrefix ''GetReactionsOptions)
$(makeFieldLabelsNoPrefix ''CreateChannelInviteOptions)
$(makeFieldLabelsNoPrefix ''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,
           AddRequiredInner (Lookup ('IDRequirement Channel) '[]))]
baseRoute Snowflake Channel
id =
  RouteBuilder '[]
mkRouteBuilder RouteBuilder '[] -> S -> ConsRes S '[]
forall (a :: OpticKind)
       (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 :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (a :: OpticKind). ID a
forall {k :: OpticKind} (a :: k). ID a
ID @Channel
    RouteBuilder
  '[ '( 'IDRequirement Channel,
        AddRequiredInner (Lookup ('IDRequirement Channel) '[]))]
-> (RouteBuilder
      '[ '( 'IDRequirement Channel,
            AddRequiredInner (Lookup ('IDRequirement Channel) '[]))]
    -> RouteBuilder
         '[ '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel,
               AddRequiredInner (Lookup ('IDRequirement Channel) '[]))])
-> RouteBuilder
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel,
           AddRequiredInner (Lookup ('IDRequirement Channel) '[]))]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& Snowflake Channel
-> RouteBuilder
     '[ '( 'IDRequirement Channel,
           AddRequiredInner (Lookup ('IDRequirement Channel) '[]))]
-> RouteBuilder
     '[ '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel,
           AddRequiredInner (Lookup ('IDRequirement Channel) '[]))]
forall (t :: OpticKind)
       (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
renderEmoji (CustomEmoji Partial Emoji
e) = Partial Emoji
e Partial Emoji -> Optic' A_Lens NoIx (Partial Emoji) Text -> Text
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
       (a :: OpticKind).
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx (Partial Emoji) Text
#name Text -> Text -> Text
forall (a :: OpticKind). Semigroup a => a -> a -> a
<> Text
":" Text -> Text -> Text
forall (a :: OpticKind). Semigroup a => a -> a -> a
<> Snowflake Emoji -> Text
forall (a :: OpticKind). TextShow a => a -> Text
showt (Partial Emoji
e Partial Emoji
-> Optic' A_Lens NoIx (Partial Emoji) (Snowflake Emoji)
-> Snowflake Emoji
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
       (a :: OpticKind).
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx (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 :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind) (b :: OpticKind). 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 :: OpticKind) (a :: OpticKind).
HasID b a =>
a -> Snowflake b
getID -> Snowflake Channel
id) (forall (b :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (a :: OpticKind). ID a
forall {k :: OpticKind} (a :: k). ID a
ID @Message
      RouteBuilder
  '[ '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement Message,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement Message)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (t :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, '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 :: OpticKind) (a :: OpticKind).
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 :: OpticKind) (b :: OpticKind). 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 :: OpticKind) (a :: OpticKind).
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 :: OpticKind) (b :: OpticKind). 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 :: OpticKind) (a :: OpticKind).
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 :: OpticKind) (b :: OpticKind). 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 :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind) (b :: OpticKind). 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 :: OpticKind) (a :: OpticKind).
HasID b a =>
a -> Snowflake b
getID -> Snowflake Channel
cid) (forall (b :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (a :: OpticKind). ID a
forall {k :: OpticKind} (a :: k). ID a
ID @Message
      RouteBuilder
  '[ '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement Message,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement Message)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (t :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, '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 :: OpticKind) (a :: OpticKind).
HasID b a =>
a -> Snowflake b
getID -> Snowflake Channel
cid) (forall (b :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (a :: OpticKind). ID a
forall {k :: OpticKind} (a :: k). ID a
ID @Message RouteBuilder
  '[ '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"reactions" RouteBuilder
  '[ '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> PS "emoji"
-> ConsRes
     (PS "emoji")
     '[ '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (s :: Symbol). PS s
PS @"emoji" RouteBuilder
  '[ '( 'PSRequirement "emoji",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"@me"
      RouteBuilder
  '[ '( 'PSRequirement "emoji",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'PSRequirement "emoji",
            AddRequiredInner
              (Lookup
                 ('PSRequirement "emoji")
                 '[ '( 'IDRequirement Message,
                       AddRequiredInner
                         (Lookup
                            ('IDRequirement Message)
                            '[ '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'PSRequirement "emoji",
               AddRequiredInner
                 (Lookup
                    ('PSRequirement "emoji")
                    '[ '( 'IDRequirement Message,
                          AddRequiredInner
                            (Lookup
                               ('IDRequirement Message)
                               '[ '( 'IDRequirement Channel, 'Satisfied),
                                  '( 'IDRequirement Channel, 'Required)])),
                       '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Message,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement Message)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (t :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'PSRequirement "emoji",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'PSRequirement "emoji",
            AddRequiredInner
              (Lookup
                 ('PSRequirement "emoji")
                 '[ '( 'IDRequirement Message,
                       AddRequiredInner
                         (Lookup
                            ('IDRequirement Message)
                            '[ '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'PSRequirement "emoji", 'Satisfied),
            '( 'IDRequirement Message, 'Satisfied),
            '( 'PSRequirement "emoji",
               AddRequiredInner
                 (Lookup
                    ('PSRequirement "emoji")
                    '[ '( 'IDRequirement Message,
                          AddRequiredInner
                            (Lookup
                               ('IDRequirement Message)
                               '[ '( 'IDRequirement Channel, 'Satisfied),
                                  '( 'IDRequirement Channel, 'Required)])),
                       '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Message,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement Message)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'PSRequirement "emoji", 'Satisfied),
        '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& 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",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'PSRequirement "emoji", 'Satisfied),
         '( 'IDRequirement Message, 'Satisfied),
         '( 'PSRequirement "emoji",
            AddRequiredInner
              (Lookup
                 ('PSRequirement "emoji")
                 '[ '( 'IDRequirement Message,
                       AddRequiredInner
                         (Lookup
                            ('IDRequirement Message)
                            '[ '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'PSRequirement "emoji", 'Satisfied),
     '( 'IDRequirement Message, 'Satisfied),
     '( 'PSRequirement "emoji",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, '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 :: OpticKind) (a :: OpticKind).
HasID b a =>
a -> Snowflake b
getID -> Snowflake Channel
cid) (forall (b :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (a :: OpticKind). ID a
forall {k :: OpticKind} (a :: k). ID a
ID @Message RouteBuilder
  '[ '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"reactions" RouteBuilder
  '[ '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> PS "emoji"
-> ConsRes
     (PS "emoji")
     '[ '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (s :: Symbol). PS s
PS @"emoji" RouteBuilder
  '[ '( 'PSRequirement "emoji",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"@me"
      RouteBuilder
  '[ '( 'PSRequirement "emoji",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'PSRequirement "emoji",
            AddRequiredInner
              (Lookup
                 ('PSRequirement "emoji")
                 '[ '( 'IDRequirement Message,
                       AddRequiredInner
                         (Lookup
                            ('IDRequirement Message)
                            '[ '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'PSRequirement "emoji",
               AddRequiredInner
                 (Lookup
                    ('PSRequirement "emoji")
                    '[ '( 'IDRequirement Message,
                          AddRequiredInner
                            (Lookup
                               ('IDRequirement Message)
                               '[ '( 'IDRequirement Channel, 'Satisfied),
                                  '( 'IDRequirement Channel, 'Required)])),
                       '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Message,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement Message)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (t :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'PSRequirement "emoji",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'PSRequirement "emoji",
            AddRequiredInner
              (Lookup
                 ('PSRequirement "emoji")
                 '[ '( 'IDRequirement Message,
                       AddRequiredInner
                         (Lookup
                            ('IDRequirement Message)
                            '[ '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'PSRequirement "emoji", 'Satisfied),
            '( 'IDRequirement Message, 'Satisfied),
            '( 'PSRequirement "emoji",
               AddRequiredInner
                 (Lookup
                    ('PSRequirement "emoji")
                    '[ '( 'IDRequirement Message,
                          AddRequiredInner
                            (Lookup
                               ('IDRequirement Message)
                               '[ '( 'IDRequirement Channel, 'Satisfied),
                                  '( 'IDRequirement Channel, 'Required)])),
                       '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Message,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement Message)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'PSRequirement "emoji", 'Satisfied),
        '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& 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",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'PSRequirement "emoji", 'Satisfied),
         '( 'IDRequirement Message, 'Satisfied),
         '( 'PSRequirement "emoji",
            AddRequiredInner
              (Lookup
                 ('PSRequirement "emoji")
                 '[ '( 'IDRequirement Message,
                       AddRequiredInner
                         (Lookup
                            ('IDRequirement Message)
                            '[ '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'PSRequirement "emoji", 'Satisfied),
     '( 'IDRequirement Message, 'Satisfied),
     '( 'PSRequirement "emoji",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, '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 :: OpticKind) (a :: OpticKind).
HasID b a =>
a -> Snowflake b
getID -> Snowflake Channel
cid) (forall (b :: OpticKind) (a :: OpticKind).
HasID b a =>
a -> Snowflake b
getID @Message -> Snowflake Message
mid) RawEmoji
emoji (forall (b :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (a :: OpticKind). ID a
forall {k :: OpticKind} (a :: k). ID a
ID @Message RouteBuilder
  '[ '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"reactions" RouteBuilder
  '[ '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> PS "emoji"
-> ConsRes
     (PS "emoji")
     '[ '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (s :: Symbol). PS s
PS @"emoji" RouteBuilder
  '[ '( 'PSRequirement "emoji",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> ID User
-> ConsRes
     (ID User)
     '[ '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (a :: OpticKind). ID a
forall {k :: OpticKind} (a :: k). ID a
ID @User
      RouteBuilder
  '[ '( 'IDRequirement User,
        AddRequiredInner
          (Lookup
             ('IDRequirement User)
             '[ '( 'PSRequirement "emoji",
                   AddRequiredInner
                     (Lookup
                        ('PSRequirement "emoji")
                        '[ '( 'IDRequirement Message,
                              AddRequiredInner
                                (Lookup
                                   ('IDRequirement Message)
                                   '[ '( 'IDRequirement Channel, 'Satisfied),
                                      '( 'IDRequirement Channel, 'Required)])),
                           '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'PSRequirement "emoji",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement User,
            AddRequiredInner
              (Lookup
                 ('IDRequirement User)
                 '[ '( 'PSRequirement "emoji",
                       AddRequiredInner
                         (Lookup
                            ('PSRequirement "emoji")
                            '[ '( 'IDRequirement Message,
                                  AddRequiredInner
                                    (Lookup
                                       ('IDRequirement Message)
                                       '[ '( 'IDRequirement Channel, 'Satisfied),
                                          '( 'IDRequirement Channel, 'Required)])),
                               '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Message,
                       AddRequiredInner
                         (Lookup
                            ('IDRequirement Message)
                            '[ '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'PSRequirement "emoji",
            AddRequiredInner
              (Lookup
                 ('PSRequirement "emoji")
                 '[ '( 'IDRequirement Message,
                       AddRequiredInner
                         (Lookup
                            ('IDRequirement Message)
                            '[ '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement User,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement User)
                    '[ '( 'PSRequirement "emoji",
                          AddRequiredInner
                            (Lookup
                               ('PSRequirement "emoji")
                               '[ '( 'IDRequirement Message,
                                     AddRequiredInner
                                       (Lookup
                                          ('IDRequirement Message)
                                          '[ '( 'IDRequirement Channel, 'Satisfied),
                                             '( 'IDRequirement Channel, 'Required)])),
                                  '( 'IDRequirement Channel, 'Satisfied),
                                  '( 'IDRequirement Channel, 'Required)])),
                       '( 'IDRequirement Message,
                          AddRequiredInner
                            (Lookup
                               ('IDRequirement Message)
                               '[ '( 'IDRequirement Channel, 'Satisfied),
                                  '( 'IDRequirement Channel, 'Required)])),
                       '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'PSRequirement "emoji",
               AddRequiredInner
                 (Lookup
                    ('PSRequirement "emoji")
                    '[ '( 'IDRequirement Message,
                          AddRequiredInner
                            (Lookup
                               ('IDRequirement Message)
                               '[ '( 'IDRequirement Channel, 'Satisfied),
                                  '( 'IDRequirement Channel, 'Required)])),
                       '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Message,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement Message)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement User,
           AddRequiredInner
             (Lookup
                ('IDRequirement User)
                '[ '( 'PSRequirement "emoji",
                      AddRequiredInner
                        (Lookup
                           ('PSRequirement "emoji")
                           '[ '( 'IDRequirement Message,
                                 AddRequiredInner
                                   (Lookup
                                      ('IDRequirement Message)
                                      '[ '( 'IDRequirement Channel, 'Satisfied),
                                         '( 'IDRequirement Channel, 'Required)])),
                              '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'IDRequirement User,
           AddRequiredInner
             (Lookup
                ('IDRequirement User)
                '[ '( 'PSRequirement "emoji",
                      AddRequiredInner
                        (Lookup
                           ('PSRequirement "emoji")
                           '[ '( 'IDRequirement Message,
                                 AddRequiredInner
                                   (Lookup
                                      ('IDRequirement Message)
                                      '[ '( 'IDRequirement Channel, 'Satisfied),
                                         '( 'IDRequirement Channel, 'Required)])),
                              '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement User,
           AddRequiredInner
             (Lookup
                ('IDRequirement User)
                '[ '( 'PSRequirement "emoji",
                      AddRequiredInner
                        (Lookup
                           ('PSRequirement "emoji")
                           '[ '( 'IDRequirement Message,
                                 AddRequiredInner
                                   (Lookup
                                      ('IDRequirement Message)
                                      '[ '( 'IDRequirement Channel, 'Satisfied),
                                         '( 'IDRequirement Channel, 'Required)])),
                              '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (t :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement User,
        AddRequiredInner
          (Lookup
             ('IDRequirement User)
             '[ '( 'PSRequirement "emoji",
                   AddRequiredInner
                     (Lookup
                        ('PSRequirement "emoji")
                        '[ '( 'IDRequirement Message,
                              AddRequiredInner
                                (Lookup
                                   ('IDRequirement Message)
                                   '[ '( 'IDRequirement Channel, 'Satisfied),
                                      '( 'IDRequirement Channel, 'Required)])),
                           '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'PSRequirement "emoji",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement User,
            AddRequiredInner
              (Lookup
                 ('IDRequirement User)
                 '[ '( 'PSRequirement "emoji",
                       AddRequiredInner
                         (Lookup
                            ('PSRequirement "emoji")
                            '[ '( 'IDRequirement Message,
                                  AddRequiredInner
                                    (Lookup
                                       ('IDRequirement Message)
                                       '[ '( 'IDRequirement Channel, 'Satisfied),
                                          '( 'IDRequirement Channel, 'Required)])),
                               '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Message,
                       AddRequiredInner
                         (Lookup
                            ('IDRequirement Message)
                            '[ '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'PSRequirement "emoji",
            AddRequiredInner
              (Lookup
                 ('PSRequirement "emoji")
                 '[ '( 'IDRequirement Message,
                       AddRequiredInner
                         (Lookup
                            ('IDRequirement Message)
                            '[ '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement User, 'Satisfied),
            '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement User,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement User)
                    '[ '( 'PSRequirement "emoji",
                          AddRequiredInner
                            (Lookup
                               ('PSRequirement "emoji")
                               '[ '( 'IDRequirement Message,
                                     AddRequiredInner
                                       (Lookup
                                          ('IDRequirement Message)
                                          '[ '( 'IDRequirement Channel, 'Satisfied),
                                             '( 'IDRequirement Channel, 'Required)])),
                                  '( 'IDRequirement Channel, 'Satisfied),
                                  '( 'IDRequirement Channel, 'Required)])),
                       '( 'IDRequirement Message,
                          AddRequiredInner
                            (Lookup
                               ('IDRequirement Message)
                               '[ '( 'IDRequirement Channel, 'Satisfied),
                                  '( 'IDRequirement Channel, 'Required)])),
                       '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'PSRequirement "emoji",
               AddRequiredInner
                 (Lookup
                    ('PSRequirement "emoji")
                    '[ '( 'IDRequirement Message,
                          AddRequiredInner
                            (Lookup
                               ('IDRequirement Message)
                               '[ '( 'IDRequirement Channel, 'Satisfied),
                                  '( 'IDRequirement Channel, 'Required)])),
                       '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Message,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement Message)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement User, 'Satisfied),
        '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement User,
           AddRequiredInner
             (Lookup
                ('IDRequirement User)
                '[ '( 'PSRequirement "emoji",
                      AddRequiredInner
                        (Lookup
                           ('PSRequirement "emoji")
                           '[ '( 'IDRequirement Message,
                                 AddRequiredInner
                                   (Lookup
                                      ('IDRequirement Message)
                                      '[ '( 'IDRequirement Channel, 'Satisfied),
                                         '( 'IDRequirement Channel, 'Required)])),
                              '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& Snowflake User
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement User,
           AddRequiredInner
             (Lookup
                ('IDRequirement User)
                '[ '( 'PSRequirement "emoji",
                      AddRequiredInner
                        (Lookup
                           ('PSRequirement "emoji")
                           '[ '( 'IDRequirement Message,
                                 AddRequiredInner
                                   (Lookup
                                      ('IDRequirement Message)
                                      '[ '( 'IDRequirement Channel, 'Satisfied),
                                         '( 'IDRequirement Channel, 'Required)])),
                              '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement User, 'Satisfied),
        '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement User,
           AddRequiredInner
             (Lookup
                ('IDRequirement User)
                '[ '( 'PSRequirement "emoji",
                      AddRequiredInner
                        (Lookup
                           ('PSRequirement "emoji")
                           '[ '( 'IDRequirement Message,
                                 AddRequiredInner
                                   (Lookup
                                      ('IDRequirement Message)
                                      '[ '( 'IDRequirement Channel, 'Satisfied),
                                         '( 'IDRequirement Channel, 'Required)])),
                              '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (t :: OpticKind)
       (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,
        AddRequiredInner
          (Lookup
             ('IDRequirement User)
             '[ '( 'PSRequirement "emoji",
                   AddRequiredInner
                     (Lookup
                        ('PSRequirement "emoji")
                        '[ '( 'IDRequirement Message,
                              AddRequiredInner
                                (Lookup
                                   ('IDRequirement Message)
                                   '[ '( 'IDRequirement Channel, 'Satisfied),
                                      '( 'IDRequirement Channel, 'Required)])),
                           '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'PSRequirement "emoji",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement User, 'Satisfied),
         '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement User,
            AddRequiredInner
              (Lookup
                 ('IDRequirement User)
                 '[ '( 'PSRequirement "emoji",
                       AddRequiredInner
                         (Lookup
                            ('PSRequirement "emoji")
                            '[ '( 'IDRequirement Message,
                                  AddRequiredInner
                                    (Lookup
                                       ('IDRequirement Message)
                                       '[ '( 'IDRequirement Channel, 'Satisfied),
                                          '( 'IDRequirement Channel, 'Required)])),
                               '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Message,
                       AddRequiredInner
                         (Lookup
                            ('IDRequirement Message)
                            '[ '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'PSRequirement "emoji",
            AddRequiredInner
              (Lookup
                 ('PSRequirement "emoji")
                 '[ '( 'IDRequirement Message,
                       AddRequiredInner
                         (Lookup
                            ('IDRequirement Message)
                            '[ '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'PSRequirement "emoji", 'Satisfied),
            '( 'IDRequirement User, 'Satisfied),
            '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement User,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement User)
                    '[ '( 'PSRequirement "emoji",
                          AddRequiredInner
                            (Lookup
                               ('PSRequirement "emoji")
                               '[ '( 'IDRequirement Message,
                                     AddRequiredInner
                                       (Lookup
                                          ('IDRequirement Message)
                                          '[ '( 'IDRequirement Channel, 'Satisfied),
                                             '( 'IDRequirement Channel, 'Required)])),
                                  '( 'IDRequirement Channel, 'Satisfied),
                                  '( 'IDRequirement Channel, 'Required)])),
                       '( 'IDRequirement Message,
                          AddRequiredInner
                            (Lookup
                               ('IDRequirement Message)
                               '[ '( 'IDRequirement Channel, 'Satisfied),
                                  '( 'IDRequirement Channel, 'Required)])),
                       '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'PSRequirement "emoji",
               AddRequiredInner
                 (Lookup
                    ('PSRequirement "emoji")
                    '[ '( 'IDRequirement Message,
                          AddRequiredInner
                            (Lookup
                               ('IDRequirement Message)
                               '[ '( 'IDRequirement Channel, 'Satisfied),
                                  '( 'IDRequirement Channel, 'Required)])),
                       '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Message,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement Message)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'PSRequirement "emoji", 'Satisfied),
        '( 'IDRequirement User, 'Satisfied),
        '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement User,
           AddRequiredInner
             (Lookup
                ('IDRequirement User)
                '[ '( 'PSRequirement "emoji",
                      AddRequiredInner
                        (Lookup
                           ('PSRequirement "emoji")
                           '[ '( 'IDRequirement Message,
                                 AddRequiredInner
                                   (Lookup
                                      ('IDRequirement Message)
                                      '[ '( 'IDRequirement Channel, 'Satisfied),
                                         '( 'IDRequirement Channel, 'Required)])),
                              '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& 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,
        AddRequiredInner
          (Lookup
             ('IDRequirement User)
             '[ '( 'PSRequirement "emoji",
                   AddRequiredInner
                     (Lookup
                        ('PSRequirement "emoji")
                        '[ '( 'IDRequirement Message,
                              AddRequiredInner
                                (Lookup
                                   ('IDRequirement Message)
                                   '[ '( 'IDRequirement Channel, 'Satisfied),
                                      '( 'IDRequirement Channel, 'Required)])),
                           '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'PSRequirement "emoji",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'PSRequirement "emoji", 'Satisfied),
         '( 'IDRequirement User, 'Satisfied),
         '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement User,
            AddRequiredInner
              (Lookup
                 ('IDRequirement User)
                 '[ '( 'PSRequirement "emoji",
                       AddRequiredInner
                         (Lookup
                            ('PSRequirement "emoji")
                            '[ '( 'IDRequirement Message,
                                  AddRequiredInner
                                    (Lookup
                                       ('IDRequirement Message)
                                       '[ '( 'IDRequirement Channel, 'Satisfied),
                                          '( 'IDRequirement Channel, 'Required)])),
                               '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Message,
                       AddRequiredInner
                         (Lookup
                            ('IDRequirement Message)
                            '[ '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'PSRequirement "emoji",
            AddRequiredInner
              (Lookup
                 ('PSRequirement "emoji")
                 '[ '( 'IDRequirement Message,
                       AddRequiredInner
                         (Lookup
                            ('IDRequirement Message)
                            '[ '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'PSRequirement "emoji", 'Satisfied),
     '( 'IDRequirement User, 'Satisfied),
     '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement User,
        AddRequiredInner
          (Lookup
             ('IDRequirement User)
             '[ '( 'PSRequirement "emoji",
                   AddRequiredInner
                     (Lookup
                        ('PSRequirement "emoji")
                        '[ '( 'IDRequirement Message,
                              AddRequiredInner
                                (Lookup
                                   ('IDRequirement Message)
                                   '[ '( 'IDRequirement Channel, 'Satisfied),
                                      '( 'IDRequirement Channel, 'Required)])),
                           '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'PSRequirement "emoji",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, '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 :: OpticKind) (a :: OpticKind).
HasID b a =>
a -> Snowflake b
getID -> Snowflake Channel
cid) (forall (b :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (a :: OpticKind). ID a
forall {k :: OpticKind} (a :: k). ID a
ID @Message RouteBuilder
  '[ '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"reactions" RouteBuilder
  '[ '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> PS "emoji"
-> ConsRes
     (PS "emoji")
     '[ '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (s :: Symbol). PS s
PS @"emoji"
      RouteBuilder
  '[ '( 'PSRequirement "emoji",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'PSRequirement "emoji",
            AddRequiredInner
              (Lookup
                 ('PSRequirement "emoji")
                 '[ '( 'IDRequirement Message,
                       AddRequiredInner
                         (Lookup
                            ('IDRequirement Message)
                            '[ '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'PSRequirement "emoji",
               AddRequiredInner
                 (Lookup
                    ('PSRequirement "emoji")
                    '[ '( 'IDRequirement Message,
                          AddRequiredInner
                            (Lookup
                               ('IDRequirement Message)
                               '[ '( 'IDRequirement Channel, 'Satisfied),
                                  '( 'IDRequirement Channel, 'Required)])),
                       '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Message,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement Message)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (t :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'PSRequirement "emoji",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'PSRequirement "emoji",
            AddRequiredInner
              (Lookup
                 ('PSRequirement "emoji")
                 '[ '( 'IDRequirement Message,
                       AddRequiredInner
                         (Lookup
                            ('IDRequirement Message)
                            '[ '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'PSRequirement "emoji", 'Satisfied),
            '( 'IDRequirement Message, 'Satisfied),
            '( 'PSRequirement "emoji",
               AddRequiredInner
                 (Lookup
                    ('PSRequirement "emoji")
                    '[ '( 'IDRequirement Message,
                          AddRequiredInner
                            (Lookup
                               ('IDRequirement Message)
                               '[ '( 'IDRequirement Channel, 'Satisfied),
                                  '( 'IDRequirement Channel, 'Required)])),
                       '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Message,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement Message)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'PSRequirement "emoji", 'Satisfied),
        '( 'IDRequirement Message, 'Satisfied),
        '( 'PSRequirement "emoji",
           AddRequiredInner
             (Lookup
                ('PSRequirement "emoji")
                '[ '( 'IDRequirement Message,
                      AddRequiredInner
                        (Lookup
                           ('IDRequirement Message)
                           '[ '( 'IDRequirement Channel, 'Satisfied),
                              '( 'IDRequirement Channel, 'Required)])),
                   '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& 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",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'PSRequirement "emoji", 'Satisfied),
         '( 'IDRequirement Message, 'Satisfied),
         '( 'PSRequirement "emoji",
            AddRequiredInner
              (Lookup
                 ('PSRequirement "emoji")
                 '[ '( 'IDRequirement Message,
                       AddRequiredInner
                         (Lookup
                            ('IDRequirement Message)
                            '[ '( 'IDRequirement Channel, 'Satisfied),
                               '( 'IDRequirement Channel, 'Required)])),
                    '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'PSRequirement "emoji", 'Satisfied),
     '( 'IDRequirement Message, 'Satisfied),
     '( 'PSRequirement "emoji",
        AddRequiredInner
          (Lookup
             ('PSRequirement "emoji")
             '[ '( 'IDRequirement Message,
                   AddRequiredInner
                     (Lookup
                        ('IDRequirement Message)
                        '[ '( 'IDRequirement Channel, 'Satisfied),
                           '( 'IDRequirement Channel, 'Required)])),
                '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, '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 :: OpticKind) (a :: OpticKind).
HasID b a =>
a -> Snowflake b
getID -> Snowflake Channel
cid) (forall (b :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (a :: OpticKind). ID a
forall {k :: OpticKind} (a :: k). ID a
ID @Message RouteBuilder
  '[ '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// Text -> S
S Text
"reactions"
      RouteBuilder
  '[ '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement Message,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement Message)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (t :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, '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 :: OpticKind) (a :: OpticKind).
HasID b a =>
a -> Snowflake b
getID -> Snowflake Channel
cid) (forall (b :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (a :: OpticKind). ID a
forall {k :: OpticKind} (a :: k). ID a
ID @Message
      RouteBuilder
  '[ '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement Message,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement Message)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (t :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, '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 :: OpticKind) (a :: OpticKind).
HasID b a =>
a -> Snowflake b
getID -> Snowflake Channel
cid) (forall (b :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (a :: OpticKind). ID a
forall {k :: OpticKind} (a :: k). ID a
ID @Message
      RouteBuilder
  '[ '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement Message,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement Message)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (t :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, '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 :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind)
       (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 :: OpticKind) (b :: OpticKind). 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 :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind) (b :: OpticKind). 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 :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind) (b :: OpticKind). 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 :: OpticKind) (a :: OpticKind).
HasID b a =>
a -> Snowflake b
getID -> Snowflake Channel
cid) (forall (b :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (a :: OpticKind). ID a
forall {k :: OpticKind} (a :: k). ID a
ID @Overwrite
      RouteBuilder
  '[ '( 'IDRequirement Overwrite,
        AddRequiredInner
          (Lookup
             ('IDRequirement Overwrite)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Overwrite,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Overwrite)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Overwrite, 'Satisfied),
            '( 'IDRequirement Overwrite,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement Overwrite)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Overwrite, 'Satisfied),
        '( 'IDRequirement Overwrite,
           AddRequiredInner
             (Lookup
                ('IDRequirement Overwrite)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& Snowflake Overwrite
-> RouteBuilder
     '[ '( 'IDRequirement Overwrite,
           AddRequiredInner
             (Lookup
                ('IDRequirement Overwrite)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Overwrite, 'Satisfied),
        '( 'IDRequirement Overwrite,
           AddRequiredInner
             (Lookup
                ('IDRequirement Overwrite)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (t :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Overwrite
oid
      RouteBuilder
  '[ '( 'IDRequirement Overwrite, 'Satisfied),
     '( 'IDRequirement Overwrite,
        AddRequiredInner
          (Lookup
             ('IDRequirement Overwrite)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Overwrite, 'Satisfied),
         '( 'IDRequirement Overwrite,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Overwrite)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Overwrite, 'Satisfied),
     '( 'IDRequirement Overwrite,
        AddRequiredInner
          (Lookup
             ('IDRequirement Overwrite)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, '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 :: OpticKind) (a :: OpticKind).
HasID b a =>
a -> Snowflake b
getID -> Snowflake Channel
cid) (forall (b :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (a :: OpticKind). ID a
forall {k :: OpticKind} (a :: k). ID a
ID @Overwrite
      RouteBuilder
  '[ '( 'IDRequirement Overwrite,
        AddRequiredInner
          (Lookup
             ('IDRequirement Overwrite)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Overwrite,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Overwrite)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Overwrite, 'Satisfied),
            '( 'IDRequirement Overwrite,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement Overwrite)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Overwrite, 'Satisfied),
        '( 'IDRequirement Overwrite,
           AddRequiredInner
             (Lookup
                ('IDRequirement Overwrite)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& Snowflake Overwrite
-> RouteBuilder
     '[ '( 'IDRequirement Overwrite,
           AddRequiredInner
             (Lookup
                ('IDRequirement Overwrite)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Overwrite, 'Satisfied),
        '( 'IDRequirement Overwrite,
           AddRequiredInner
             (Lookup
                ('IDRequirement Overwrite)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (t :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Overwrite
oid
      RouteBuilder
  '[ '( 'IDRequirement Overwrite, 'Satisfied),
     '( 'IDRequirement Overwrite,
        AddRequiredInner
          (Lookup
             ('IDRequirement Overwrite)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Overwrite, 'Satisfied),
         '( 'IDRequirement Overwrite,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Overwrite)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Overwrite, 'Satisfied),
     '( 'IDRequirement Overwrite,
        AddRequiredInner
          (Lookup
             ('IDRequirement Overwrite)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, '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 :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind) (b :: OpticKind). 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 :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind) (b :: OpticKind). 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 :: OpticKind) (a :: OpticKind).
HasID b a =>
a -> Snowflake b
getID -> Snowflake Channel
cid) (forall (b :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (a :: OpticKind). ID a
forall {k :: OpticKind} (a :: k). ID a
ID @Message
      RouteBuilder
  '[ '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement Message,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement Message)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (t :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, '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 :: OpticKind) (a :: OpticKind).
HasID b a =>
a -> Snowflake b
getID -> Snowflake Channel
cid) (forall (b :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (a :: OpticKind). ID a
forall {k :: OpticKind} (a :: k). ID a
ID @Message
      RouteBuilder
  '[ '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement Message, 'Satisfied),
            '( 'IDRequirement Message,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement Message)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement Message, 'Satisfied),
        '( 'IDRequirement Message,
           AddRequiredInner
             (Lookup
                ('IDRequirement Message)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (t :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake Message
mid
      RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement Message, 'Satisfied),
         '( 'IDRequirement Message,
            AddRequiredInner
              (Lookup
                 ('IDRequirement Message)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement Message, 'Satisfied),
     '( 'IDRequirement Message,
        AddRequiredInner
          (Lookup
             ('IDRequirement Message)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, '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 :: OpticKind) (a :: OpticKind).
HasID b a =>
a -> Snowflake b
getID -> Snowflake Channel
cid) (forall (b :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (a :: OpticKind). ID a
forall {k :: OpticKind} (a :: k). ID a
ID @User
      RouteBuilder
  '[ '( 'IDRequirement User,
        AddRequiredInner
          (Lookup
             ('IDRequirement User)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement User,
            AddRequiredInner
              (Lookup
                 ('IDRequirement User)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement User, 'Satisfied),
            '( 'IDRequirement User,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement User)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement User, 'Satisfied),
        '( 'IDRequirement User,
           AddRequiredInner
             (Lookup
                ('IDRequirement User)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& Snowflake User
-> RouteBuilder
     '[ '( 'IDRequirement User,
           AddRequiredInner
             (Lookup
                ('IDRequirement User)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement User, 'Satisfied),
        '( 'IDRequirement User,
           AddRequiredInner
             (Lookup
                ('IDRequirement User)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (t :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake User
uid
      RouteBuilder
  '[ '( 'IDRequirement User, 'Satisfied),
     '( 'IDRequirement User,
        AddRequiredInner
          (Lookup
             ('IDRequirement User)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement User, 'Satisfied),
         '( 'IDRequirement User,
            AddRequiredInner
              (Lookup
                 ('IDRequirement User)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement User, 'Satisfied),
     '( 'IDRequirement User,
        AddRequiredInner
          (Lookup
             ('IDRequirement User)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, '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 :: OpticKind) (a :: OpticKind).
HasID b a =>
a -> Snowflake b
getID -> Snowflake Channel
cid) (forall (b :: OpticKind) (a :: OpticKind).
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 :: OpticKind)
       (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 :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
RouteFragmentable a reqs =>
RouteBuilder reqs -> a -> ConsRes a reqs
// forall (a :: OpticKind). ID a
forall {k :: OpticKind} (a :: k). ID a
ID @User
      RouteBuilder
  '[ '( 'IDRequirement User,
        AddRequiredInner
          (Lookup
             ('IDRequirement User)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement User,
            AddRequiredInner
              (Lookup
                 ('IDRequirement User)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> RouteBuilder
         '[ '( 'IDRequirement User, 'Satisfied),
            '( 'IDRequirement User,
               AddRequiredInner
                 (Lookup
                    ('IDRequirement User)
                    '[ '( 'IDRequirement Channel, 'Satisfied),
                       '( 'IDRequirement Channel, 'Required)])),
            '( 'IDRequirement Channel, 'Satisfied),
            '( 'IDRequirement Channel, 'Required)])
-> RouteBuilder
     '[ '( 'IDRequirement User, 'Satisfied),
        '( 'IDRequirement User,
           AddRequiredInner
             (Lookup
                ('IDRequirement User)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& Snowflake User
-> RouteBuilder
     '[ '( 'IDRequirement User,
           AddRequiredInner
             (Lookup
                ('IDRequirement User)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
-> RouteBuilder
     '[ '( 'IDRequirement User, 'Satisfied),
        '( 'IDRequirement User,
           AddRequiredInner
             (Lookup
                ('IDRequirement User)
                '[ '( 'IDRequirement Channel, 'Satisfied),
                   '( 'IDRequirement Channel, 'Required)])),
        '( 'IDRequirement Channel, 'Satisfied),
        '( 'IDRequirement Channel, 'Required)]
forall (t :: OpticKind)
       (reqs :: [(RequirementType, RouteRequirement)]).
Typeable t =>
Snowflake t
-> RouteBuilder reqs
-> RouteBuilder ('( 'IDRequirement t, 'Satisfied) : reqs)
giveID Snowflake User
uid
      RouteBuilder
  '[ '( 'IDRequirement User, 'Satisfied),
     '( 'IDRequirement User,
        AddRequiredInner
          (Lookup
             ('IDRequirement User)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, 'Required)])),
     '( 'IDRequirement Channel, 'Satisfied),
     '( 'IDRequirement Channel, 'Required)]
-> (RouteBuilder
      '[ '( 'IDRequirement User, 'Satisfied),
         '( 'IDRequirement User,
            AddRequiredInner
              (Lookup
                 ('IDRequirement User)
                 '[ '( 'IDRequirement Channel, 'Satisfied),
                    '( 'IDRequirement Channel, 'Required)])),
         '( 'IDRequirement Channel, 'Satisfied),
         '( 'IDRequirement Channel, 'Required)]
    -> Route)
-> Route
forall (a :: OpticKind) (b :: OpticKind). a -> (a -> b) -> b
& RouteBuilder
  '[ '( 'IDRequirement User, 'Satisfied),
     '( 'IDRequirement User,
        AddRequiredInner
          (Lookup
             ('IDRequirement User)
             '[ '( 'IDRequirement Channel, 'Satisfied),
                '( 'IDRequirement Channel, '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
_ CreateMessageOptions
cm) = \Url 'Https
u Option 'Https
o -> do
    let filePart :: CreateMessageAttachment -> a -> PartM IO
filePart CreateMessageAttachment {Text
$sel:filename:CreateMessageAttachment :: CreateMessageAttachment -> Text
filename :: Text
filename, ByteString
$sel:content:CreateMessageAttachment :: CreateMessageAttachment -> ByteString
content :: ByteString
content} a
n =
          (forall (m :: OpticKind -> OpticKind).
Applicative m =>
Text -> ByteString -> PartM m
partLBS @IO (String -> Text
T.pack (String -> Text) -> String -> Text
forall (a :: OpticKind) b. (a -> b) -> a -> b
$ String
"files[" String -> ShowS
forall (a :: OpticKind). Semigroup a => a -> a -> a
<> a -> String
forall (a :: OpticKind). Show a => a -> String
show a
n String -> ShowS
forall (a :: OpticKind). Semigroup a => a -> a -> a
<> String
"]") ByteString
content)
            { partFilename :: Maybe String
partFilename = String -> Maybe String
forall (a :: OpticKind). a -> Maybe a
Just (Text -> String
T.unpack Text
filename)
            , partContentType :: Maybe MimeType
partContentType = MimeType -> Maybe MimeType
forall (a :: OpticKind). a -> Maybe a
Just (Text -> MimeType
defaultMimeLookup Text
filename)
            }
        attachmentPart :: CreateMessageAttachment -> Int -> CreateMessageAttachmentJson
attachmentPart CreateMessageAttachment {Text
$sel:filename:CreateMessageAttachment :: CreateMessageAttachment -> Text
filename :: Text
filename, Maybe Text
$sel:description:CreateMessageAttachment :: CreateMessageAttachment -> Maybe Text
description :: Maybe Text
description} Int
n =
          Int -> Text -> Maybe Text -> CreateMessageAttachmentJson
CreateMessageAttachmentJson Int
n Text
filename Maybe Text
description
        files :: [PartM IO]
files = (CreateMessageAttachment -> Int -> PartM IO)
-> [CreateMessageAttachment] -> [Int] -> [PartM IO]
forall (a :: OpticKind) (b :: OpticKind) (c :: OpticKind).
(a -> b -> c) -> [a] -> [b] -> [c]
zipWith CreateMessageAttachment -> Int -> PartM IO
forall {a :: OpticKind}.
Show a =>
CreateMessageAttachment -> a -> PartM IO
filePart ([CreateMessageAttachment]
-> Maybe [CreateMessageAttachment] -> [CreateMessageAttachment]
forall (a :: OpticKind). a -> Maybe a -> a
fromMaybe [] (Maybe [CreateMessageAttachment] -> [CreateMessageAttachment])
-> Maybe [CreateMessageAttachment] -> [CreateMessageAttachment]
forall (a :: OpticKind) b. (a -> b) -> a -> b
$ CreateMessageOptions
cm CreateMessageOptions
-> Optic'
     A_Lens NoIx CreateMessageOptions (Maybe [CreateMessageAttachment])
-> Maybe [CreateMessageAttachment]
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
       (a :: OpticKind).
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens NoIx CreateMessageOptions (Maybe [CreateMessageAttachment])
#attachments) [(Int
0 :: Int) ..]
        attachments :: Maybe [CreateMessageAttachmentJson]
attachments = (\[CreateMessageAttachment]
a -> (CreateMessageAttachment -> Int -> CreateMessageAttachmentJson)
-> [CreateMessageAttachment]
-> [Int]
-> [CreateMessageAttachmentJson]
forall (a :: OpticKind) (b :: OpticKind) (c :: OpticKind).
(a -> b -> c) -> [a] -> [b] -> [c]
zipWith CreateMessageAttachment -> Int -> CreateMessageAttachmentJson
attachmentPart [CreateMessageAttachment]
a [Int
0 ..]) ([CreateMessageAttachment] -> [CreateMessageAttachmentJson])
-> Maybe [CreateMessageAttachment]
-> Maybe [CreateMessageAttachmentJson]
forall (f :: OpticKind -> OpticKind) (a :: OpticKind)
       (b :: OpticKind).
Functor f =>
(a -> b) -> f a -> f b
<$> CreateMessageOptions
cm CreateMessageOptions
-> Optic'
     A_Lens NoIx CreateMessageOptions (Maybe [CreateMessageAttachment])
-> Maybe [CreateMessageAttachment]
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
       (a :: OpticKind).
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens NoIx CreateMessageOptions (Maybe [CreateMessageAttachment])
#attachments
        jsonBody :: CreateMessageJson
jsonBody =
          CreateMessageJson
            { $sel:content:CreateMessageJson :: Maybe Text
content = CreateMessageOptions
cm CreateMessageOptions
-> Optic' A_Lens NoIx CreateMessageOptions (Maybe Text)
-> Maybe Text
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
       (a :: OpticKind).
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx CreateMessageOptions (Maybe Text)
#content
            , $sel:nonce:CreateMessageJson :: Maybe Text
nonce = CreateMessageOptions
cm CreateMessageOptions
-> Optic' A_Lens NoIx CreateMessageOptions (Maybe Text)
-> Maybe Text
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
       (a :: OpticKind).
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx CreateMessageOptions (Maybe Text)
#nonce
            , $sel:tts:CreateMessageJson :: Maybe Bool
tts = CreateMessageOptions
cm CreateMessageOptions
-> Optic' A_Lens NoIx CreateMessageOptions (Maybe Bool)
-> Maybe Bool
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
       (a :: OpticKind).
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx CreateMessageOptions (Maybe Bool)
#tts
            , $sel:embeds:CreateMessageJson :: Maybe [Embed]
embeds = CreateMessageOptions
cm CreateMessageOptions
-> Optic' A_Lens NoIx CreateMessageOptions (Maybe [Embed])
-> Maybe [Embed]
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
       (a :: OpticKind).
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx CreateMessageOptions (Maybe [Embed])
#embeds
            , $sel:allowedMentions:CreateMessageJson :: Maybe AllowedMentions
allowedMentions = CreateMessageOptions
cm CreateMessageOptions
-> Optic' A_Lens NoIx CreateMessageOptions (Maybe AllowedMentions)
-> Maybe AllowedMentions
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
       (a :: OpticKind).
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx CreateMessageOptions (Maybe AllowedMentions)
#allowedMentions
            , $sel:messageReference:CreateMessageJson :: Maybe MessageReference
messageReference = CreateMessageOptions
cm CreateMessageOptions
-> Optic' A_Lens NoIx CreateMessageOptions (Maybe MessageReference)
-> Maybe MessageReference
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
       (a :: OpticKind).
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx CreateMessageOptions (Maybe MessageReference)
#messageReference
            , $sel:components:CreateMessageJson :: Maybe [Component]
components = CreateMessageOptions
cm CreateMessageOptions
-> Optic' A_Lens NoIx CreateMessageOptions (Maybe [Component])
-> Maybe [Component]
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
       (a :: OpticKind).
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx CreateMessageOptions (Maybe [Component])
#components
            , $sel:attachments:CreateMessageJson :: Maybe [CreateMessageAttachmentJson]
attachments = Maybe [CreateMessageAttachmentJson]
attachments
            }
    ReqBodyMultipart
body <- [PartM IO] -> Req ReqBodyMultipart
forall (m :: OpticKind -> OpticKind).
MonadIO m =>
[PartM IO] -> m ReqBodyMultipart
reqBodyMultipart (Text -> ByteString -> PartM IO
forall (m :: OpticKind -> OpticKind).
Applicative m =>
Text -> ByteString -> PartM m
partLBS Text
"payload_json" (CreateMessageJson -> ByteString
forall (a :: OpticKind). ToJSON a => a -> ByteString
Aeson.encode CreateMessageJson
jsonBody) PartM IO -> [PartM IO] -> [PartM IO]
forall (a :: OpticKind). a -> [a] -> [a]
: [PartM IO]
files)
    ReqBodyMultipart -> Url 'Https -> Option 'Https -> Req LbsResponse
forall (a :: OpticKind).
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 :: OpticKind).
HttpBody a =>
a -> Url 'Https -> Option 'Https -> Req LbsResponse
patchWith' (ChannelUpdate -> ReqBodyJson ChannelUpdate
forall (a :: OpticKind). 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 :: OpticKind). 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 :: OpticKind) (a :: OpticKind).
(QueryParam param, ToHttpApiData a) =>
Text -> a -> param
=: Word64
a Option 'Https -> Option 'Https -> Option 'Https
forall (a :: OpticKind). Semigroup a => a -> a -> a
<> Text
"limit" Text -> Maybe Integer -> Option 'Https
forall (a :: OpticKind).
ToHttpApiData a =>
Text -> Maybe a -> Option 'Https
=:? (Maybe ChannelMessagesLimit
l Maybe ChannelMessagesLimit
-> Optic' A_Prism NoIx (Maybe ChannelMessagesLimit) Integer
-> Maybe Integer
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
       (a :: OpticKind).
Is k An_AffineFold =>
s -> Optic' k is s a -> Maybe a
^? Prism
  (Maybe ChannelMessagesLimit)
  (Maybe ChannelMessagesLimit)
  ChannelMessagesLimit
  ChannelMessagesLimit
forall (a :: OpticKind) (b :: OpticKind).
Prism (Maybe a) (Maybe b) a b
_Just Prism
  (Maybe ChannelMessagesLimit)
  (Maybe ChannelMessagesLimit)
  ChannelMessagesLimit
  ChannelMessagesLimit
-> Optic
     An_Iso
     NoIx
     ChannelMessagesLimit
     ChannelMessagesLimit
     Integer
     Integer
-> Optic' A_Prism NoIx (Maybe ChannelMessagesLimit) Integer
forall (k :: OpticKind) (l :: OpticKind) (m :: OpticKind)
       (is :: IxList) (js :: IxList) (ks :: IxList) (s :: OpticKind)
       (t :: OpticKind) (u :: OpticKind) (v :: OpticKind) (a :: OpticKind)
       (b :: OpticKind).
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic
  An_Iso
  NoIx
  ChannelMessagesLimit
  ChannelMessagesLimit
  Integer
  Integer
#limit))
  action (GetChannelMessages c
_ (Just (ChannelMessagesBefore (Snowflake Message -> Word64
forall (t :: OpticKind). 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 :: OpticKind) (a :: OpticKind).
(QueryParam param, ToHttpApiData a) =>
Text -> a -> param
=: Word64
a Option 'Https -> Option 'Https -> Option 'Https
forall (a :: OpticKind). Semigroup a => a -> a -> a
<> Text
"limit" Text -> Maybe Integer -> Option 'Https
forall (a :: OpticKind).
ToHttpApiData a =>
Text -> Maybe a -> Option 'Https
=:? (Maybe ChannelMessagesLimit
l Maybe ChannelMessagesLimit
-> Optic' A_Prism NoIx (Maybe ChannelMessagesLimit) Integer
-> Maybe Integer
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
       (a :: OpticKind).
Is k An_AffineFold =>
s -> Optic' k is s a -> Maybe a
^? Prism
  (Maybe ChannelMessagesLimit)
  (Maybe ChannelMessagesLimit)
  ChannelMessagesLimit
  ChannelMessagesLimit
forall (a :: OpticKind) (b :: OpticKind).
Prism (Maybe a) (Maybe b) a b
_Just Prism
  (Maybe ChannelMessagesLimit)
  (Maybe ChannelMessagesLimit)
  ChannelMessagesLimit
  ChannelMessagesLimit
-> Optic
     An_Iso
     NoIx
     ChannelMessagesLimit
     ChannelMessagesLimit
     Integer
     Integer
-> Optic' A_Prism NoIx (Maybe ChannelMessagesLimit) Integer
forall (k :: OpticKind) (l :: OpticKind) (m :: OpticKind)
       (is :: IxList) (js :: IxList) (ks :: IxList) (s :: OpticKind)
       (t :: OpticKind) (u :: OpticKind) (v :: OpticKind) (a :: OpticKind)
       (b :: OpticKind).
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic
  An_Iso
  NoIx
  ChannelMessagesLimit
  ChannelMessagesLimit
  Integer
  Integer
#limit))
  action (GetChannelMessages c
_ (Just (ChannelMessagesAfter (Snowflake Message -> Word64
forall (t :: OpticKind). 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 :: OpticKind) (a :: OpticKind).
(QueryParam param, ToHttpApiData a) =>
Text -> a -> param
=: Word64
a Option 'Https -> Option 'Https -> Option 'Https
forall (a :: OpticKind). Semigroup a => a -> a -> a
<> Text
"limit" Text -> Maybe Integer -> Option 'Https
forall (a :: OpticKind).
ToHttpApiData a =>
Text -> Maybe a -> Option 'Https
=:? (Maybe ChannelMessagesLimit
l Maybe ChannelMessagesLimit
-> Optic' A_Prism NoIx (Maybe ChannelMessagesLimit) Integer
-> Maybe Integer
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
       (a :: OpticKind).
Is k An_AffineFold =>
s -> Optic' k is s a -> Maybe a
^? Prism
  (Maybe ChannelMessagesLimit)
  (Maybe ChannelMessagesLimit)
  ChannelMessagesLimit
  ChannelMessagesLimit
forall (a :: OpticKind) (b :: OpticKind).
Prism (Maybe a) (Maybe b) a b
_Just Prism
  (Maybe ChannelMessagesLimit)
  (Maybe ChannelMessagesLimit)
  ChannelMessagesLimit
  ChannelMessagesLimit
-> Optic
     An_Iso
     NoIx
     ChannelMessagesLimit
     ChannelMessagesLimit
     Integer
     Integer
-> Optic' A_Prism NoIx (Maybe ChannelMessagesLimit) Integer
forall (k :: OpticKind) (l :: OpticKind) (m :: OpticKind)
       (is :: IxList) (js :: IxList) (ks :: IxList) (s :: OpticKind)
       (t :: OpticKind) (u :: OpticKind) (v :: OpticKind) (a :: OpticKind)
       (b :: OpticKind).
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic
  An_Iso
  NoIx
  ChannelMessagesLimit
  ChannelMessagesLimit
  Integer
  Integer
#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 :: OpticKind).
ToHttpApiData a =>
Text -> Maybe a -> Option 'Https
=:? (Maybe ChannelMessagesLimit
l Maybe ChannelMessagesLimit
-> Optic' A_Prism NoIx (Maybe ChannelMessagesLimit) Integer
-> Maybe Integer
forall (k :: OpticKind) (s :: OpticKind) (is :: IxList)
       (a :: OpticKind).
Is k An_AffineFold =>
s -> Optic' k is s a -> Maybe a
^? Prism
  (Maybe ChannelMessagesLimit)
  (Maybe ChannelMessagesLimit)
  ChannelMessagesLimit
  ChannelMessagesLimit
forall (a :: OpticKind) (b :: OpticKind).
Prism (Maybe a) (Maybe b) a b
_Just Prism
  (Maybe ChannelMessagesLimit)
  (Maybe ChannelMessagesLimit)
  ChannelMessagesLimit
  ChannelMessagesLimit
-> Optic
     An_Iso
     NoIx
     ChannelMessagesLimit
     ChannelMessagesLimit
     Integer
     Integer
-> Optic' A_Prism NoIx (Maybe ChannelMessagesLimit) Integer
forall (k :: OpticKind) (l :: OpticKind) (m :: OpticKind)
       (is :: IxList) (js :: IxList) (ks :: IxList) (s :: OpticKind)
       (t :: OpticKind) (u :: OpticKind) (v :: OpticKind) (a :: OpticKind)
       (b :: OpticKind).
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic
  An_Iso
  NoIx
  ChannelMessagesLimit
  ChannelMessagesLimit
  Integer
  Integer
#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)
$sel:before:GetReactionsOptions :: GetReactionsOptions -> Maybe (Snowflake User)
before :: Maybe (Snowflake User)
before, Maybe (Snowflake User)
$sel:after:GetReactionsOptions :: GetReactionsOptions -> Maybe (Snowflake User)
after :: Maybe (Snowflake User)
after, Maybe Integer
$sel:limit:GetReactionsOptions :: GetReactionsOptions -> Maybe Integer
limit :: Maybe Integer
limit}) =
    Option 'Https -> Url 'Https -> Option 'Https -> Req LbsResponse
getWithP
      ( Text
"before" Text -> Maybe Word64 -> Option 'Https
forall (a :: OpticKind).
ToHttpApiData a =>
Text -> Maybe a -> Option 'Https
=:? (Snowflake User -> Word64
forall (t :: OpticKind). Snowflake t -> Word64
fromSnowflake (Snowflake User -> Word64)
-> Maybe (Snowflake User) -> Maybe Word64
forall (f :: OpticKind -> OpticKind) (a :: OpticKind)
       (b :: OpticKind).
Functor f =>
(a -> b) -> f a -> f b
<$> Maybe (Snowflake User)
before)
          Option 'Https -> Option 'Https -> Option 'Https
forall (a :: OpticKind). Semigroup a => a -> a -> a
<> Text
"after" Text -> Maybe Word64 -> Option 'Https
forall (a :: OpticKind).
ToHttpApiData a =>
Text -> Maybe a -> Option 'Https
=:? (Snowflake User -> Word64
forall (t :: OpticKind). Snowflake t -> Word64
fromSnowflake (Snowflake User -> Word64)
-> Maybe (Snowflake User) -> Maybe Word64
forall (f :: OpticKind -> OpticKind) (a :: OpticKind)
       (b :: OpticKind).
Functor f =>
(a -> b) -> f a -> f b
<$> Maybe (Snowflake User)
after)
          Option 'Https -> Option 'Https -> Option 'Https
forall (a :: OpticKind). Semigroup a => a -> a -> a
<> Text
"limit" Text -> Maybe Integer -> Option 'Https
forall (a :: OpticKind).
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 :: OpticKind).
HttpBody a =>
a -> Url 'Https -> Option 'Https -> Req LbsResponse
patchWith' (EditMessageData -> ReqBodyJson EditMessageData
forall (a :: OpticKind). 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 :: OpticKind) (b :: OpticKind). (a -> b) -> [a] -> [b]
map (forall (b :: OpticKind) (a :: OpticKind).
HasID b a =>
a -> Snowflake b
getID @Message) -> [Snowflake Message]
ids)) = ReqBodyJson Value -> Url 'Https -> Option 'Https -> Req LbsResponse
forall (a :: OpticKind).
HttpBody a =>
a -> Url 'Https -> Option 'Https -> Req LbsResponse
postWith' (Value -> ReqBodyJson Value
forall (a :: OpticKind). a -> ReqBodyJson a
ReqBodyJson (Value -> ReqBodyJson Value) -> Value -> ReqBodyJson Value
forall (a :: OpticKind) b. (a -> b) -> a -> b
$ [(Key, Value)] -> Value
Aeson.object [Key
"messages" Key -> [Snowflake Message] -> (Key, Value)
forall (kv :: OpticKind) (v :: OpticKind).
(KeyValue kv, ToJSON v) =>
Key -> v -> kv
forall (v :: OpticKind). ToJSON v => Key -> v -> (Key, Value)
Aeson..= [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 :: OpticKind).
HttpBody a =>
a -> Url 'Https -> Option 'Https -> Req LbsResponse
postWith' (CreateChannelInviteOptions
-> ReqBodyJson CreateChannelInviteOptions
forall (a :: OpticKind). a -> ReqBodyJson a
ReqBodyJson CreateChannelInviteOptions
o)
  action (EditChannelPermissions c
_ Overwrite
o) = ReqBodyJson Overwrite
-> Url 'Https -> Option 'Https -> Req LbsResponse
forall (a :: OpticKind).
HttpBody a =>
a -> Url 'Https -> Option 'Https -> Req LbsResponse
putWith' (Overwrite -> ReqBodyJson Overwrite
forall (a :: OpticKind). 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 :: OpticKind).
HttpBody a =>
a -> Url 'Https -> Option 'Https -> Req LbsResponse
putWith' (GroupDMAddRecipientOptions
-> ReqBodyJson GroupDMAddRecipientOptions
forall (a :: OpticKind). a -> ReqBodyJson a
ReqBodyJson GroupDMAddRecipientOptions
o)
  action (GroupDMRemoveRecipient c
_ u
_) = Url 'Https -> Option 'Https -> Req LbsResponse
deleteWith