我是Discord API的新手,我正在开发一个项目,需要能够以编程方式添加一个公会成员 . 我已经学会了如何获取授权代码(带有identify和guilds.join范围),将其兑换为访问令牌,并获取用户的ID . 最后一步是使用访问代码和用户ID来添加公会 . 此命令详述如下:
https://discordapp.com/developers/docs/resources/guild#add-guild-member
我似乎需要向此URL发送PUT请求:
https://discordapp.com/api/guilds/[GuildID]/members/[UserID]
但这导致了这种反应:
{“code”:0,“message”:“401:Unauthorized”}
我尝试在Authorization标头中包含访问令牌:
授权:持票人[编辑]
我还尝试在请求中添加JSON主体:
{“access_token”:“[已编辑]”}
两者都没有奏效 . 不出所料,同时使用两者都没有用 .
我想知道这是否是权限问题,但Discord确认我有guilds.join范围 . 这是我在交换访问令牌的授权码时收到的JSON:
{“access_token”:“[Redacted]”,“token_type”:“Bearer”,“expires_in”:604800,“refresh_token”:“[Redacted]”,“scope”:“识别guilds.join”}
识别范围有效,因为我能够检索用户及其ID . 但是guilds.join似乎不起作用 .
我在下面列出了一些测试代码 . 我已经标记了“选项1”和“选项2”行,以表示我通常不会在同一请求中同时执行这两种访问代码方法 . 但正如我之前提到的,我确实尝试了两种方法,但仍然有401错误 .
using (WebClient client = new WebClient())
{
client.Headers.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded");
client.Headers.Add(HttpRequestHeader.Authorization, "Bearer [Redacted]");//Option 1
string output = client.UploadString
(
"https://discordapp.com/api/guilds/[GuildID]/members/[UserID]",
WebRequestMethods.Http.Put,
"{\"access_token\":\"[Redacted]\"}"//Option 2
);
}
因为我想了解其工作方式的内在性,我更愿意知道如何使用普通的Web请求(例如HttpWebRequest和WebClient,而不是使用某些OAuth库) .
1 回答
我正在回答我自己的问题,因为我可能已经想到这一点 . 它在我执行以下时有效:
请注意,我从“application / x-www-form-urlencoded”的内容类型更改为“application / json” . 我从使用“Bearer”的Authorization Headers 更改为“Bot”,我使用的是bot的令牌 . 我使用与以前相同的访问令牌 . 如果没有更好的解决方案,我打算接受这个答案 .