Discord bot如何避免响应自身消息 无需每条命令单独加校验
解决方案
方案1:前置拦截过滤所有bot消息(最高效,适合绝大多数场景)
你只需要在message事件回调的最开头添加提前返回逻辑,所有bot发送的消息会被直接拦截,不会进入后续的命令判断逻辑,完全不需要在每个命令的条件里重复加校验:
client.on("message", message => { // 所有bot发送的消息直接跳过处理 if (message.author.bot) return; // 后续命令逻辑不需要再加bot校验 if(message.content === "ping"){ message.channel.send("pong") } else if(message.content === "pong"){ message.channel.send("ping") } })
*提示:如果你使用的是discord.js v13及以上版本,原message事件已被废弃,替换为messageCreate事件即可,拦截逻辑完全不变。
方案2:命令逻辑抽离为映射表(适合命令较多的项目)
如果后续会加大量命令,可以把触发关键词和对应的处理逻辑抽成键值对,代码可维护性更高:
// 定义命令映射,key为触发的消息内容,value为对应的处理函数 const commandMap = { ping: (message) => message.channel.send("pong"), pong: (message) => message.channel.send("ping") } client.on("message", message => { if (message.author.bot) return; // 匹配到对应命令就执行 if (commandMap[message.content]) { commandMap[message.content](message) } })
内容的提问来源于stack exchange,提问作者IHZAQ
相关产品推荐
相关产品推荐

