You need to enable JavaScript to run this app. 如何实现Discord机器人自动删除非"!test"开头的频道消息?
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Discord机器人自动删除非"!test"开头的频道消息?

Discord消息自动管控功能修正方案

原代码存在的核心问题

  • 存在未定义的无效变量:代码中直接使用了input、J两个无上下文定义的变量,代码运行时会直接报错中断
  • 判断逻辑完全反向:原代码逻辑为「消息包含!test命令时触发删除」,和需求「未携带!test命令时删除消息」的目标完全相反
  • API调用不符合规范:使用全局bot.deleteMessage(message)的调用方式存在兼容问题,实际可直接通过消息实例调用删除方法
  • 缺少基础保护逻辑:没有跳过机器人自身发送的消息,会出现机器人删除自身消息的异常循环

适配Discord.js主流版本的正确实现

// 注:Discord.js v13+版本使用messageCreate事件,旧版v11/v12可替换为message事件
client.on("messageCreate", async (message) => {
  // 直接跳过指定ID频道的所有消息处理
  if (message.channel.id === '823216214737289266') return;
  // 跳过所有机器人发送的消息,避免触发自删循环
  if (message.author.bot) return;
  // 判断消息文本未携带!test命令
  if (!message.content.includes("!test")) {
    // 按需求设置1秒延迟后执行删除
    setTimeout(async () => {
      try {
        // 带异常捕获,避免因无权限/消息已被手动删除导致程序崩溃
        await message.delete();
      } catch (err) {
        console.error('消息删除失败:', err.message);
      }
    }, 1000);
  }
});

上线前必要配置检查

  • 在Discord开发者后台的机器人配置页,开启*消息内容意图(Message Content Intent)*权限,否则机器人无法读取普通消息的文本内容,所有判断逻辑都会失效
  • 给机器人分配的服务器角色需勾选管理消息权限,否则无资格删除频道内其他用户发送的消息
  • 延迟时间可根据实际管控需求调整,不需要延迟可直接移除setTimeout包裹逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 11:54:08