discord.js开发的Discord机器人响应所有前缀,无法限定$前缀,如何解决?
问题根源
- 没有对消息做前缀匹配校验:你的代码直接对所有消息执行
substring(PREFIX.length)切割首个字符,只要切割后的第一个分段是ping就会触发响应,不管消息开头的字符是不是你设定的$。比如发送xping时,切割首个字符x后剩下的内容是ping,自然就会触发pong回复。 - 缺少机器人消息过滤逻辑:没有排除机器人自身发送的消息,存在触发循环响应的潜在风险。
修复代码
你只需要在消息事件的开头新增校验逻辑即可,修正后的对应代码段如下:
client.on('message', message => { // 新增:过滤机器人消息 + 过滤不带指定前缀的消息 if (message.author.bot || !message.content.startsWith(PREFIX)) return; const args = message.content.substring(PREFIX.length).split(" "); switch (args[0]) { case 'ping': message.channel.send('pong!'); break; } });
注:如果你使用的是discord.js v14及以上版本,
message事件已经正式废弃,需要将事件名替换为messageCreate才能正常触发回调。
内容的提问来源于stack exchange,提问作者Ethan
相关产品推荐
相关产品推荐

