我是 Discord 的 API 的新手,我正在处理一个需要能够以编程方式添加公会成员的项目。我已经学会了如何获取授权代码(带有标识和 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"}
我尝试在授权标头中包含访问令牌:
授权:承载 [已编辑]
我还尝试向请求添加 JSON 正文:
{"access_token":"[已编辑]"}
两者都没有奏效。不出所料,同时使用两者也不起作用。
我想知道这是否是权限问题,但 Discord 确认我有 guilds.join 范围。这是我在为访问令牌交换授权码时收到的 JSON:
{"access_token": "[Redacted]", "token_type": "Bearer", "expires_in": 604800, "refresh_token": "[Redacted]", "scope": "identify 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
);
}
Run Code Online (Sandbox Code Playgroud)
因为我想了解它是如何工作的,所以我更想知道如何使用普通的 …