
本文教你使用 discord.js 编写一个监听新消息、检测指定关键词并自动删除的机器人插件,修正常见事件名错误、参数缺失和大小写敏感问题,并提供可直接部署的完整代码。
本文教你使用 discord.js 编写一个监听新消息、检测指定关键词并自动删除的机器人插件,修正常见事件名错误、参数缺失和大小写敏感问题,并提供可直接部署的完整代码。
在 Discord 机器人开发中,实现“关键词自动删消息”是一项基础但高频的需求。然而,初学者常因事件名误用、上下文参数缺失或逻辑疏漏导致功能失效。核心问题在于:Discord.js 并不存在 Events.AutoDelete 这一事件——它根本不会被触发;真正应监听的是 messageCreate 事件,该事件在每条新消息抵达时被调用,并传入 message 对象作为唯一参数。
以下是修复后的标准实现(适用于 Discord.js v14+):
const { Events } = require('discord.js');
module.exports = {
name: Events.MessageCreate,
async execute(message) {
// 忽略机器人自身消息,防止无限循环
if (message.author.bot) return;
// 检查目标用户 ID(请替换为实际用户ID)及关键词(不区分大小写)
const targetUserId = '123456789012345678'; // ✅ 替换为需监控的用户ID
const triggerWord = 'word'; // ✅ 替换为你想屏蔽的关键词
if (
message.author.id === targetUserId &&
message.content.toLowerCase().includes(triggerWord.toLowerCase())
) {
try {
await message.delete();
console.log(`✅ 已删除用户 ${message.author.tag} 的含 "${triggerWord}" 消息(ID: ${message.id})`);
} catch (error) {
console.error(`❌ 删除消息失败:`, error);
}
}
},
};⚠️ 关键注意事项:
- 权限前提:机器人必须在目标频道拥有 ManageMessages 权限,否则 message.delete() 将抛出 Missing Permissions 错误;
- 避免自删:务必添加 if (message.author.bot) return 判断,防止机器人响应自己发送的消息而引发递归删除;
- 大小写处理:使用 .toLowerCase() 统一转换再比对,提升关键词匹配鲁棒性;
- 性能与体验:如需监控多词或多用户,建议将 targetUserId 和 triggerWord 抽取为配置数组或读取 JSON 文件,便于维护;
- 日志与调试:生产环境建议添加 console.log 或集成 Winston 等日志库,便于追踪触发行为。
最后,请确保该文件已正确注册到事件处理器中(例如在主文件中通过 client.on(Events.MessageCreate, ...) 或使用事件文件夹加载机制)。完成部署后,只需让目标用户发送含关键词的消息,机器人即可即时响应并静默删除——无需额外指令,真正实现自动化内容管控。


















