Discord.js(v13) 词过滤机器人遇DiscordAPIError: Unknown Message问题求助
问题修复方案
问题原因分析
- 重复回复:你的代码在遍历不良词汇列表时,每循环一次就执行一次消息删除和回复操作,不管当前消息是否匹配该词汇。只要列表里有N个词汇,就会触发N次回复,导致重复发送。
- DiscordAPIError: Unknown Message:第一次循环删除消息后,消息已经不存在,后续循环再次调用
message.delete()时,尝试删除已被移除的消息,就会触发这个错误。
修复后的代码
client.on("messageCreate", message => { if (message.author.bot) return; const words = ["word1", "word2"]; // 检查消息是否包含任意不良词汇 const hasBadWord = words.some(word => message.content.toLowerCase().includes(word.toLowerCase()) ); if (hasBadWord) { // 先发送回复再删除消息,确保操作顺序,同时捕获可能的错误 message.channel.send(`${message.author}, your message has been deleted for swearing!`) .then(() => message.delete()) .catch(err => console.error("操作异常:", err)); } });
关键修复点
- 用
Array.some()替代原始循环:只要匹配到任意一个不良词汇就停止遍历,返回true,既高效又避免不必要的循环操作。 - 仅在确认存在不良词汇时执行一次回复+删除:彻底解决重复回复问题。
- 异步操作顺序处理:通过
then()确保先发送回复再删除消息,同时用catch()捕获操作中的异常,避免程序崩溃。 - 移除循环内的重复删除/回复操作:从根源上消除重复删除已不存在消息导致的API错误。
内容的提问来源于stack exchange,提问作者FireFenrir
相关产品推荐
相关产品推荐

