如何通过Discord API实现类似WidgetBot的聊天消息推送至Discord服务器
问题:聊天框消息推送Discord失败,Bot调用API异常
我正在开发一款聊天框,期望实现用户发送的消息直接推送至Discord服务器,效果和WidgetBot一致。尝试通过Bot携带access_token调用Discord API,但无法正常运行,代码如下:
var axios = require('axios'); var data = JSON.stringify({ "content": "HELLO", "access_token":"user_access_token" }); var config = { method: 'post', url: 'https://discord.com/api/v9/channels/channleId/messages', headers: { 'Authorization': 'Bot botId', 'Content-Type': 'application/json' }, data : data }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });
问题排查
- 身份验证冲突:Discord API不允许同一次请求混合Bot令牌和用户
access_token身份验证方式。使用Bot令牌时,请求体不需要携带access_token参数。 - URL拼写错误:请求URL中的
channleId是拼写错误,正确应为channelId。 - Bot权限缺失:你的Bot需要在目标Discord频道拥有
SendMessages权限,否则会返回权限不足的错误。
可行解决方案
如果是要实现类似WidgetBot的「Bot转发用户消息」效果,推荐使用Bot身份发送消息,无需用户access_token,调整后的代码如下:
var axios = require('axios'); var data = JSON.stringify({ "content": "HELLO" // 替换为用户实际发送的消息内容 }); var config = { method: 'post', url: 'https://discord.com/api/v9/channels/你的频道ID/messages', // 修正channelId拼写 headers: { 'Authorization': 'Bot 你的Bot令牌', 'Content-Type': 'application/json' }, data: data }; axios(config) .then(function (response) { console.log('消息发送成功:', JSON.stringify(response.data)); }) .catch(function (error) { // 打印详细错误信息便于排查 console.error('发送失败:', error.response?.data || error.message); });
补充说明
- 若需以用户身份发送消息(用用户账号直接发消息),需将请求头的
Authorization改为Bearer 用户的access_token,同时移除请求体中的access_token参数,且确保用户token拥有messages.send权限。 - 检查Bot权限:进入目标Discord服务器的「设置→角色」,找到Bot对应的角色,确认开启「发送消息」权限,且Bot已被邀请至该服务器。
内容的提问来源于stack exchange,提问作者Pankti Shah
相关产品推荐
相关产品推荐

