Discord.js中EmbedBuilder与awaitMessages无响应问题求助
问题:Discord.js 消息收集器无响应,无法生成指定Embed
我编写了以下Discord.js代码,希望实现机器人先请求用户输入标题,再发送包含该标题的Embed:
const { EmbedBuilder } = require('discord.js'); module.exports = { name: 'embed', category: 'utility', //requirePermissions: ['ADMINISTRATOR'], run: async (message) => { message.channel.send("provide title:") const response = await message.channel.awaitMessages( m => m.author.id === message.author.id, { time: 60000, max: 1 } ); const title = response.first().content; let embed = new EmbedBuilder() .setTitle(title) .setColor(0xff9933) message.channel.send({embeds: [embed]}) }}
实际运行时,机器人发送“provide title:”后就没有后续动作了,尝试使用消息收集器但问题仍未解决。
解决方法
添加收集器异常处理
原代码未处理用户超时未输入、未收集到有效消息的情况,一旦出现这类场景,response.first()会返回undefined,导致代码中断。需要先判断收集器是否获取到消息。确认机器人权限
确保机器人在目标频道拥有读取消息历史、发送消息权限,同时频道没有设置限制机器人的权限规则。修复后的完整代码
const { EmbedBuilder } = require('discord.js'); module.exports = { name: 'embed', category: 'utility', run: async (message) => { // 发送请求输入的消息 await message.channel.send("provide title:"); try { const response = await message.channel.awaitMessages({ filter: m => m.author.id === message.author.id, time: 60000, max: 1, errors: ['time'] }); const title = response.first().content; const embed = new EmbedBuilder() .setTitle(title) .setColor(0xff9933); await message.channel.send({ embeds: [embed] }); } catch (err) { // 超时或未收集到消息时提示用户 await message.channel.send("超时未输入标题,命令已取消。"); } } };
代码说明
- 用
try/catch捕获收集器的超时错误,避免代码崩溃 - 明确指定
errors: ['time'],让超时触发异常 - 所有异步操作添加
await,确保执行顺序正确 - 增加错误提示,告知用户命令取消的原因
内容的提问来源于stack exchange,提问作者Kacprex
相关产品推荐
相关产品推荐

