You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js v14:如何删除包含指定词汇的用户消息?

Discord 违禁词消息检测与删除方案

原代码存在的问题

  • 事件逻辑完全错误:guildBanAdd是用户已被封禁后才触发的事件,和检测违禁词删除消息的需求完全不匹配,应该监听新消息创建事件。
  • 冗余操作:事件触发时用户已经被封禁,再次调用guild.members.ban(user)毫无意义。
  • 消息覆盖范围有限:仅检查缓存中的消息,缓存只保留近期消息,无法处理更早的历史内容。
  • 匹配逻辑有缺陷:直接用match(badWord)未处理大小写,且可能误匹配包含违禁词的正常词汇(比如违禁词是"bad","badly"也会被判定违规)。

修正后的实时消息检测代码

针对新发送的消息实时检测并处理:

const badWords = ["badword1", "badword2", "badword3"];
// 构建正则:匹配完整单词、忽略大小写,避免误匹配
const badWordRegex = new RegExp(`\\b(${badWords.join('|')})\\b`, 'gi');

// 监听新消息创建事件(Discord.js v14+版本,旧版用message事件)
client.on('messageCreate', async (message) => {
    // 跳过机器人发送的消息,防止自循环
    if (message.author.bot) return;

    // 检查消息是否包含违禁词
    if (badWordRegex.test(message.content)) {
        try {
            // 删除违规消息
            await message.delete();
            // 可选:给违规用户发送提醒私信
            await message.author.send('你的消息包含违禁词,已被系统删除!');
            // 可选:如果需要直接封禁用户,取消下方注释
            // await message.member.ban({ reason: '发送违规违禁词' });
        } catch (err) {
            console.error('处理违规消息失败:', err);
        }
    }
});

历史消息扫描处理代码

如果需要清理历史消息中的违规内容,可以用以下方法:

// 扫描指定频道的历史消息(示例)
async function scanChannelHistory(channel) {
    try {
        // 批量获取历史消息,limit最大为100,如需更多可分页处理
        const messages = await channel.messages.fetch({ limit: 100 });
        for (const [_, message] of messages) {
            if (message.author.bot) continue;
            if (badWordRegex.test(message.content)) {
                await message.delete();
                console.log(`已删除用户 ${message.author.tag} 的违规消息`);
            }
        }
    } catch (err) {
        console.error('扫描历史消息出错:', err);
    }
}

// 调用示例:扫描服务器名为"general"的频道
// const targetChannel = client.guilds.cache.get('服务器ID').channels.cache.find(ch => ch.name === 'general');
// scanChannelHistory(targetChannel);

注意事项

  • 确保机器人拥有对应权限:删除消息权限(Manage Messages)、封禁成员权限(Ban Members,若需封禁)、读取消息历史权限(Read Message History,若扫描历史)。
  • 正则规则可按需调整:不需要完整单词匹配就去掉\\b;需要严格大小写就去掉正则的i标志。
  • 批量处理历史消息时,注意Discord API的速率限制,避免频繁请求导致被限制。

内容的提问来源于stack exchange,提问作者Croblanc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:41:27