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

Discord.js V14 MessageCollector无法收集消息问题求助

Discord.js V14 中?listen命令无响应及MessageCollector失效问题排查

问题根源及修复点

  • 事件监听错误:Discord.js v14已移除message事件,需替换为messageCreate事件,否则无法触发命令逻辑。
  • 缺少消息内容意图:未启用GatewayIntentBits.MessageContent,机器人无法读取消息内容,导致命令匹配失败。
  • MessageCollector实例化方式错误:v14中不再使用new MessageCollector(),需通过channel.createMessageCollector()创建收集器。
  • 频道获取方法过时:client.channels.get()已废弃,v14需使用异步的client.channels.fetch()获取频道。
  • RichEmbed已废弃:v14中RichEmbed被EmbedBuilder替代,需导入并使用新构造器。
  • 未导入必要类:代码中使用的MessageCollector、EmbedBuilder未从discord.js导入,且错误使用未定义的discord对象。
  • 语法错误:collector.on('end')的回调函数后缺少闭合括号,导致代码无法正常运行。

修正后的完整代码

require('dotenv').config();
const { Client, GatewayIntentBits, MessageCollector, EmbedBuilder } = require('discord.js');

const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.GuildMessageReactions,
    GatewayIntentBits.MessageContent // 新增:必须启用才能读取消息内容
  ],
});

client.login(process.env.BOT_TOKEN);

client.on('ready', () => {
  console.log("Bot has logged in.");
});

// 替换为v14的messageCreate事件
client.on('messageCreate', async message => {
  if (message.author.bot) return;
  if (message.content.toLowerCase() === '?listen') {

    await message.channel.send('bot is collecting messages now...');
    
    const filter = m => !m.author.bot;
    // 使用v14的createMessageCollector方法创建收集器
    const collector = message.channel.createMessageCollector({ filter });
    
    // 异步获取目标频道,添加错误捕获
    const destination = await client.channels.fetch('1235316261081190491').catch(err => {
      console.error('无法获取目标频道:', err);
      return null;
    });

    collector.on('collect', (m) => {
      console.log("Collected message: " + m.content);
      if (destination) {
        if (m.content.toLowerCase() === '?stop' && message.author.id === m.author.id) {
          console.log("Stopping collector.");
          collector.stop();
        } else {
          // 使用v14的EmbedBuilder替代RichEmbed
          const embed = new EmbedBuilder()
            .setTitle("New Message")
            .setDescription(m.content)
            .setTimestamp()
            .setAuthor({ name: m.author.tag, iconURL: m.author.displayAvatarURL() }) // v14中setAuthor参数为对象
            .setColor('#FFAB32');
          
          destination.send({ embeds: [embed] }); // v14发送embed需放在embeds数组中
        }
      }
    });

    collector.on('end', collected => {
      console.log("Messages collected: " + collected.size);
    }); // 修复闭合括号
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:22:40