Discord.js 向指定频道发送消息异常问题求助
问题排查与修复方案
核心错误点及解决办法
频道获取失败:使用
client.channels.cache.find可能因为目标频道不在本地缓存中,导致channel为undefined,调用send时直接报错。改用fetch方法从Discord API拉取频道数据,确保能获取到目标频道:const channel = await client.channels.fetch(StaffChannelID);注意必须添加
await,因为fetch是异步操作。Embed字段内容非法:
location字段的value直接赋值为msg(消息对象),Discord无法序列化对象类型的内容,导致消息发送失败。改成显示触发消息的频道链接或名称:{ name: 'location:', value: `<#${msg.channel.id}>`, inline: true }变量名混淆风险:代码中同时使用
msg和message,最后将发送结果赋值给message,容易和触发消息的原对象冲突。建议更换变量名避免混淆:const sentMessage = await channel.send({ content : `<@&${StaffRoleID}>`, embeds: [ exampleEmbed ], components: [ row ] });
修复后的完整代码
const exampleEmbed = { color: 0xff0000, title: '◄◄ ‼ help request ‼ ►►', fields: [ { name: `user:`, value: `${msg.author}` }, { name: 'reason:', value: msg.content.slice(3) || 'no reason specified', inline: true }, { name: 'location:', value: `<#${msg.channel.id}>`, inline: true } ], timestamp: new Date().toISOString() }; const row = new ActionRowBuilder() .addComponents( new ButtonBuilder() .setCustomId('primary') .setLabel('handled✅') .setStyle(ButtonStyle.Primary), ); // 改用fetch确保获取到目标频道 const channel = await client.channels.fetch(StaffChannelID); const sentMessage = await channel.send({ content : `<@&${StaffRoleID}>`, embeds: [ exampleEmbed ], components: [ row ] });
内容的提问来源于stack exchange,提问作者Daniel Ben Ari
相关产品推荐
相关产品推荐

