本文教你使用 discord.js 编写一个监听新消息并自动删除指定用户发送的含敏感词内容的机器人,修正常见事件名错误、参数缺失和大小写匹配问题,并提供可直接部署的完整代码示例。
本文教你使用 discord.js 编写一个监听新消息并自动删除指定用户发送的含敏感词内容的机器人,修正常见事件名错误、参数缺失和大小写匹配问题,并提供可直接部署的完整代码示例。
Discord.js 并不存在 Events.AutoDelete 这一内置事件——这是初学者常见的误解。正确的做法是监听 messageCreate 事件,它会在每条新消息被接收时触发,并将该消息对象作为唯一参数传入执行函数。
以下是修复后的标准实现(适配 Discord.js v14+):
const { Events } = require('discord.js');
module.exports = {
name: Events.MessageCreate,
async execute(message) {
// 忽略机器人自身消息,防止误删或无限循环
if (message.author.bot) return;
// 检查是否为指定用户(替换 'userId' 为真实用户 ID,如 '123456789012345678')
// 并检查消息内容是否包含目标关键词(不区分大小写)
if (
message.author.id === 'userId' &&
message.content.toLowerCase().includes('word')
) {
try {
await message.delete();
console.log(`✅ 已删除用户 ${message.author.tag} 的敏感消息:${message.content.substring(0, 50)}...`);
} catch (error) {
console.error(`❌ 删除消息失败(可能无权限):`, error.message);
}
}
},
};
? 关键修正说明:
- ✅ 使用 Events.MessageCreate 替代不存在的 Events.AutoDelete;
- ✅ 参数名必须为 message(原代码中误写为 _delete,且未声明 message 变量);
- ✅ 添加 .toLowerCase() 实现大小写不敏感匹配,避免因 Word/WORD 等形式漏判;
- ✅ 增加 message.author.bot 判断,防止机器人响应自身消息导致异常;
- ✅ 包裹 message.delete() 在 try...catch 中,便于捕获权限不足(如缺少 ManageMessages 权限)等运行时错误。
⚠️ 部署前必查项:
- 确保机器人在目标频道拥有 Manage Messages 权限(否则 delete() 将静默失败);
- 用户 ID 必须为字符串格式(即使纯数字也需加引号);
- 若需匹配多个关键词,可改用数组 + some():
['word', 'spam', 'ad'].some(keyword => message.content.toLowerCase().includes(keyword)); - 生产环境建议将敏感词与用户 ID 移至配置文件或数据库,避免硬编码。
通过以上调整,你的机器人即可稳定、可靠地执行关键词级消息过滤任务。











