Discord添加公会成员401错误,尽管显然有效访问令牌

时间:2017-04-07 04:14:43

标签: c# oauth oauth-2.0 httpwebrequest discord

我是Discord API的新手,我正在开发一个项目,需要能够以编程方式添加一个公会成员。我已经学会了如何获取授权代码(带有identify和guilds.join范围),将其兑换为访问令牌,并获取用户的ID。最后一步是使用访问代码和用户ID来添加公会。此命令详述如下:

https://discordapp.com/developers/docs/resources/guild#add-guild-member

我似乎需要向此网址发送PUT请求:

https://discordapp.com/api/guilds/[GuildID]/members/[UserID]

但这导致了这种反应:

  

{"代码":0,"消息":" 401:未经授权"}

我已尝试在授权标头中包含访问令牌:

  

授权:持票人[编辑]

我还尝试在请求中添加JSON正文:

  

{"&的access_token#34;:" [删除]"}

两者都没有奏效。不出所料,同时使用两者都没有效果。

我想知道这是否是权限问题,但Discord确认我有guilds.join范围。这是我在交换访问令牌的授权码时收到的JSON:

  

{" access_token":" [已编辑]"," token_type":" Bearer"," expires_in&#34 ;:604800," refresh_token":" [已编辑]","范围":"识别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 个答案:

答案 0 :(得分:4)

我正在回答我自己的问题,因为我可能已经想到这一点。它在我执行以下内容时起作用:

using (WebClient client = new WebClient())
{
    client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
    client.Headers.Add(HttpRequestHeader.Authorization, "Bot [Redacted]");
    string output = client.UploadString
    (
        "https://discordapp.com/api/guilds/[GuildID]/members/[UserID]",
        WebRequestMethods.Http.Put,
        "{\"access_token\":\"[Redacted]\"}"
    );
}

请注意,我更改了内容类型" application / x-www-form-urlencoded" to" application / json。"我改变了使用" Bearer"的授权标题。到了#B; Bot,"我正在使用机器人的代币。我使用与以前相同的访问令牌。如果没有更好的解决方案,我打算接受这个答案。