我的bot会自动删除所有我发送的消息,该如何修复该故障?
问题根因
你的代码逻辑存在明显错误,同时权限配置也可能存在生效异常:
- JS 中
String.indexOf()方法的返回值规则为:匹配到内容时返回对应下标(≥0的整数),未匹配到返回-1。在布尔判断中-1属于真值,只有0会被判定为假值。你当前第一个监听器的判断条件if (message.content.indexOf(conf.prefix))等价于「只要指令前缀没有出现在消息的第一个字符位置(包括消息根本不包含前缀的所有情况),就进入删除逻辑」,所以所有普通用户发的消息都会被秒删。 - 移除权限不生效大概率是因为机器人被授予了管理员权限,管理员权限会覆盖所有单独配置的子权限;也可能是权限修改后没有刷新机器人的权限缓存,配置未实际生效。
修复方案
1. 修正代码逻辑
将两个重复的message事件监听器合并,修正判断条件,示例修正后代码如下:
client.on('message', message => { // 跳过机器人自身发送的消息 if (message.author.bot) return; // 逻辑1:非指令前缀开头的消息删除(可根据你的实际需求调整) if (message.content.indexOf(conf.prefix) !== 0) { message.delete({ timeout: 0 }); } // 逻辑2:包含指定内容的消息延迟删除 if (message.content.toLowerCase().includes("request recieved")) { message.delete({ timeout: 40 }); } });
如果你的实际需求是「只处理带指令前缀的消息,其余消息不删除」,只需要把逻辑1的判断反过来前置加return即可:
// 不是指令前缀开头的消息直接跳过,不处理 if (message.content.indexOf(conf.prefix) !== 0) return;
2. 修复权限配置
- 先检查机器人的角色权限,确认没有勾选「管理员」权限,再单独取消「管理消息」权限
- 权限修改后将机器人踢出服务器,再按照最小权限原则重新邀请,确保新权限生效
- 修改完代码后重启机器人,先在本地测试逻辑符合预期再部署上线
内容的提问来源于stack exchange,提问作者Zeudon
相关产品推荐
相关产品推荐

