You need to enable JavaScript to run this app. Discord.js如何实现指定频道用户消息5秒后删除且不删机器人消息
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js如何实现指定频道用户消息5秒后删除且不删机器人消息

Discord.js 定时删除指定频道用户消息代码修复

现存问题

  • 逻辑执行顺序错误:代码中if (!message.content.startsWith(prefix)) return;一行会拦截所有非指令类普通消息,导致后续指定频道的删除逻辑永远不会被触发
  • 指定频道的删除逻辑代码无效:if (channel) (msg => msg.delete({ timeout: 5000 }));仅定义了匿名函数但未执行,也没有传入要删除的消息对象,同时你提前定义的msg是消息小写字符串,不是消息实例
  • 版本兼容问题:discord.js v13及以上版本已经移除了delete()方法的timeout参数,直接使用会失效

修正后代码

client.on("message", async message => {
    // 过滤机器人消息和私信
    if (message.author.bot) return;
    if (message.channel.type === "dm") return;

    // 脏话检测逻辑
    const swearWords = JSON.parse(fs.readFileSync("./data/swearWords.json"));
    const msgContent = message.content.toLowerCase();
    const embed1 = new discord.MessageEmbed()
        .setColor('#0d0041')
        .setDescription(`${message.author} Dat woord hoort hier niet thuis`)

    for (let i = 0; i < swearWords["vloekwoorden"].length; i++) {
        if (msgContent.includes(swearWords["vloekwoorden"][i])) {
            try {
                await message.delete();
                const warnMsg = await message.channel.send(embed1);
                // 5秒后删除警告消息
                setTimeout(() => warnMsg.delete().catch(err => console.log("删除警告消息失败", err)), 5000);
            } catch (err) {
                console.log("删除脏话消息失败", err);
            }
            return;
        }
    }

    // 指定频道定时删除逻辑,提前到指令判断前执行
    const targetChannelId = "841337468585377882";
    if (message.channel.id === targetChannelId) {
        // 5秒后删除用户发送的消息
        setTimeout(() => message.delete().catch(err => console.log("删除频道消息失败", err)), 5000);
    }

    // 指令处理逻辑
    const prefix = botConfig.prefix;
    if (!message.content.startsWith(prefix)) return;
    const messageArray = message.content.split(" ");
    const command = messageArray[0];
    const arguments = messageArray.slice(1);
    const commands = client.commands.get(command.slice(prefix.length));
    if (commands) commands.run(client, message, arguments);
});

额外注意事项

  • 确保机器人拥有对应频道的「管理消息」权限,否则无法正常删除消息
  • 若使用discord.js v14及以上版本,MessageEmbed需要单独从discord.js中导入,且频道类型判断的枚举值有调整,对应修改即可
  • 代码中添加了catch捕获错误,避免消息已被提前删除、权限不足等异常情况导致程序崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 09:15:03