通过 POST 请求向 Discord 频道发送消息会导致代码 401
Posted
技术标签:
【中文标题】通过 POST 请求向 Discord 频道发送消息会导致代码 401【英文标题】:Sending a message to Discord channel via POST request results in code 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 线程,但似乎没有找到解决方案,并且没有任何内容似乎适用于我的情况。
非常感谢!
【问题讨论】:
【参考方案1】:您需要指定令牌类型
示例机器人令牌授权标头
Authorization: Bot MTk4NjIyNDgzNDcxOTI1MjQ4.Cl2FMQ.ZnCjm1XVW7vRze4b7Cq4se7kKWs
不记名令牌授权标头示例
Authorization: Bearer CZhtkLDpNYXgPH9Ml6shqh2OwykChw
所以换request.setRequestHeader("authorization", token);
request.setRequestHeader("authorization",
Bot $token);
如果您使用的是机器人令牌
https://discord.com/developers/docs/reference
不,它们不是真正的令牌,我从他们的文档中得到它们。
【讨论】:
以上是关于通过 POST 请求向 Discord 频道发送消息会导致代码 401的主要内容,如果未能解决你的问题,请参考以下文章
Python:通过 cog 和后台任务向 Discord 中的特定频道发送消息
Indy Post 到 discord webhook 给出了错误的请求 400