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

Discord bot仅读取DM消息转发至日志频道出现无限刷屏问题求助

问题修复说明

问题根因

  • 无限重复发送:未过滤bot自身发送的消息,bot转发到日志频道的消息会再次触发消息监听事件,形成无限递归循环,就会出现连发刷屏的情况。
  • 未过滤服务器消息:未加私信渠道判断,所有符合监听规则的消息(包括服务器内发送的消息)都会被触发转发。

修复后的完整代码

const Discord = require("discord.js");  
// 如果使用discord.js v14版本,需要额外引入ChannelType做渠道判断,v13及更早版本无需引入
// const { ChannelType } = require('discord.js');
const client = new Discord.Client({ 
  intents:['DIRECT_MESSAGES', 'GuildMessages'], // 新增GuildMessages权限,保证bot可以往服务器内的日志频道发消息
  partials: ['MESSAGE', 'CHANNEL'] // 新增CHANNEL partial,保证可以正常读取私信频道的信息
});

client.on('ready', () =>{
    console.log('Bot Online!');
});

// 注意:discord.js v13及以上版本废弃了message事件,改为messageCreate,v12及更早版本可以改回监听message事件
client.on('messageCreate', async (message) => {
  // 过滤规则1:消息发送者是bot直接跳过,避免自身触发循环
  if (message.author.bot) return;
  // 过滤规则2:仅处理私信消息,v14版本判断条件改为 message.channel.type === ChannelType.DM 即可
  if (!message.guild) {
    // 替换为你自己的日志频道ID
    const logChannel = client.channels.cache.get('替换为实际日志频道ID');
    if (logChannel) {
      // 可以自定义转发的消息格式,也可以直接传message.content
      await logChannel.send(`用户${message.author.tag}(ID:${message.author.id})发来私信:\n${message.content}`);
      console.log(`已转发私信:${message.author.tag} - ${message.content}`);
    }
  }
  return;
});

client.login('替换为实际的bot token');

额外注意事项

  • 代码里的频道ID、bot token需要替换为你自己的实际参数
  • 要在Discord开发者后台的bot设置页开启Message Content Intent权限,否则bot无法读取消息内容
  • 如果日志频道在私有服务器内,需要先把bot邀请进对应服务器,且赋予频道的发消息权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:48:02