如何制作可回复任意发送内容的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
相关产品推荐
相关产品推荐

