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
相关产品推荐
相关产品推荐

