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

如何让discord.js开发的机器人发送的命令被其他机器人正常识别?

问题解决方法

根因说明

Rhythm等所有主流Discord机器人均内置了忽略其他机器人发送的消息的拦截逻辑,目的是防止不同机器人循环触发命令导致频道刷屏、资源耗尽等异常,和你的机器人权限、发送的命令文本格式无关:你手动发送的消息属于用户身份会被Rhythm正常识别,机器人发送的消息属于Bot身份会被Rhythm直接过滤,所以永远无法通过机器人发命令的方式触发Rhythm的功能。

最优解决方案:自行实现Rhythm消息清理

不需要依赖Rhythm的prune命令,直接用discord.js原生的消息管理接口筛选删除Rhythm的消息即可,稳定性和可控性更高,修改后可运行的代码如下:

// Run dotenv
require('dotenv').config();

// 导入依赖
const Discord = require('discord.js');
// 注意:discord.js v14+需要显式指定Intents,这里开启需要的权限
const client = new Discord.Client({
  intents: [
    Discord.Intents.FLAGS.Guilds,
    Discord.Intents.FLAGS.GuildMessages,
    Discord.Intents.FLAGS.MessageContent
  ]
});

// 替换为你服务器内Rhythm机器人的实际用户ID
const RHYTHM_BOT_ID = '替换为Rhythm的ID';
// 标记当天是否已经执行过清理,避免重复执行
let hasClearedToday = false;

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

// 定时器每分钟执行一次,降低不必要的性能消耗
setInterval(function() {
  const date = new Date();
  // 每天凌晨1点执行清理,且当天未执行过
  if (date.getHours() === 1 && !hasClearedToday) {
    client.channels.cache.forEach(async (channel) => {
      // 只处理文本频道,兼容不同discord.js版本的频道type枚举
      if (channel.type === 'GUILD_TEXT' || channel.type === 'text') {
        try {
          // 拉取频道内最近100条消息(可根据需求调整数量,接口上限100)
          const messages = await channel.messages.fetch({ limit: 100 });
          // 筛选出Rhythm发送的消息
          const rhythmMessages = messages.filter(msg => msg.author.id === RHYTHM_BOT_ID);
          // 批量删除筛选出的消息
          await channel.bulkDelete(rhythmMessages, true);
          console.log(`频道${channel.name}清理了${rhythmMessages.size}条Rhythm消息`);
        } catch (err) {
          console.error(`频道${channel.name}清理失败:`, err);
        }
      }
    });
    // 标记当天已执行
    hasClearedToday = true;
  }
  // 跨天重置执行标记
  if (date.getHours() === 0) {
    hasClearedToday = false;
  }
}, 60 * 1000); // 每分钟执行一次即可,不需要每秒跑

client.login(process.env.DISCORD_TOKEN);

注意事项

  • 你需要先在Discord Developer平台的Bot设置页面,找到Privileged Gateway Intents分组,开启Message Content Intent权限,否则机器人无法拉取频道历史消息。
  • bulkDelete接口仅支持删除发送时间在14天以内的消息,超出14天的消息需要单条调用删除接口,日常清理场景下14天限制足够覆盖需求。
  • 代码中的RHYTHM_BOT_ID需要替换为你服务器中Rhythm机器人的实际ID,你可以开启Discord开发者模式后右键Rhythm头像选择「复制用户ID」获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:57:02