You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何制作可回复任意发送内容的Discord机器人?附代码故障排查

Discord机器人无法响应文本消息故障排查

核心故障原因

  • 触发逻辑适配问题:你设置了空前缀PREFIX = '',且仅当args[0] === ''时才会触发回复逻辑。贴纸、图片类消息的msg.content本身为空,切分后args[0]刚好为空符合触发条件;但正常文本消息有实际内容,切分后args[0]为消息第一个词,永远不会匹配空值,因此不会触发回复。
  • 用户ID校验语法错误:if (msg.author.id === "547433261953974274","428526337427374080")的写法不符合JS语法,逗号运算符会直接返回最后一个值,实际仅会校验是否等于第二个ID,第一个ID的判断完全失效。
  • 版本兼容&权限问题:如果你使用的是discord.js v13及以上版本,message事件已被废弃,替换为messageCreate事件,且初始化客户端时需要开启对应消息权限意图(Intent),否则无法正常接收文本消息内容。

修复方案

如果你需要实现指定用户发任何内容都随机回复的需求,可参考以下修正代码:

const Discord = require('discord.js');
// v13+版本需要声明意图,v12及以下版本可删除该配置
const bot = new Discord.Client({
  intents: [
    Discord.GatewayIntentBits.Guilds,
    Discord.GatewayIntentBits.GuildMessages,
    Discord.GatewayIntentBits.MessageContent
  ]
});

const token = '*hidden*';
// 替换为你要响应的用户ID列表
const ALLOWED_USERS = ["547433261953974274","428526337427374080"];

bot.on('ready', () => {
    console.log('The bot is ONLINE!');
    bot.user.setActivity("to you!", {type: "LISTENING"})
})

// v13+版本用messageCreate事件,v12及以下版本保留message事件即可
bot.on('messageCreate', msg => {
    // 过滤机器人自身消息避免循环触发
    if (msg.author.bot) return;
    // 校验是否为指定用户
    if (ALLOWED_USERS.includes(msg.author.id)) {
        const options = ["I know right!", "I agree.", "OMG, right?"];
        const response = options[Math.floor(Math.random() * options.length)];
        msg.channel.send(response).catch(console.error);
    }
})

bot.login(token);

额外注意事项

  • 部署前需要在Discord开发者后台的机器人设置中,开启Message Content Intent权限,否则v13+版本无法读取消息内容。

内容的提问来源于stack exchange,提问作者AdamZGamer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:57:04