【问题标题】:Sending a message to Discord channel via POST request results in code 401通过 POST 请求向 Discord 频道发送消息会导致代码 401
【发布时间】:2021-06-04 15:10:52
【问题描述】:

我正在寻找从 Chrome 扩展程序向 Discord 频道发送消息的最简单方法。
我在 Discord Developer Portal 上注册了一个 Discord 应用程序和相应的机器人。我在那里有机器人令牌。
找到this SO question。尝试了 Tobyhn 建议的代码,结果如下:

var token = "my bot token here";
var channel_id = "my channel id here";
var channel_url = `https://discord.com/api/v8/channels/${channel_id}/messages`

request = new XMLHttpRequest();
request.withCredentials = true;
request.open("POST", channel_url);
request.setRequestHeader("authorization", token);
request.setRequestHeader("accept", "/");
request.setRequestHeader("authority", "discord.com");
request.setRequestHeader("content-type", "application/json");

request.send(JSON.stringify({ content: message }));

代码只是放置在后台脚本中。
Chrome 使用标志 --disable-web-security --disable-gpu --user-data-dir=~\chromeTemp" 运行以避免 CORS 检查。
此外,我绝对确定 bot 在该频道所在的 Discord 服务器上被授予管理员权限,因此必须可以编写消息。

但是,在执行时服务器响应代码 401:

code: 0 
message: "401: Unauthorized" 

我也尝试从 Yet Another Rest Client 发送相同的请求,结果相同。

如何更改请求才能成功授权并发送消息?

提供额外的上下文:当我在 discord.js 库的帮助下使用同一个机器人时,它成功地将消息发送到同一台服务器上的各个通道。
我也阅读了this 线程,但似乎没有找到解决方案,并且没有任何内容似乎适用于我的情况。

非常感谢!

【问题讨论】:

    标签: api post google-chrome-extension discord http-status-code-401


    【解决方案1】:

    您需要指定令牌类型

    示例机器人令牌授权标头 Authorization: Bot MTk4NjIyNDgzNDcxOTI1MjQ4.Cl2FMQ.ZnCjm1XVW7vRze4b7Cq4se7kKWs

    不记名令牌授权标头示例 Authorization: Bearer CZhtkLDpNYXgPH9Ml6shqh2OwykChw

    所以换request.setRequestHeader("authorization", token); request.setRequestHeader("authorization", Bot ${token}); 如果您使用的是机器人令牌

    https://discord.com/developers/docs/reference

    不,它们不是真正的令牌,我从他们的文档中得到它们。

    【讨论】:

      猜你喜欢
      • 2021-03-24
      • 2020-04-07
      • 2021-01-10
      • 2020-10-01
      • 2020-02-04
      • 1970-01-01
      • 2015-03-20
      • 2022-01-05
      • 2017-09-02
      相关资源
      最近更新 更多