Discord.js报message事件弃用警告且await发送embed失效如何解决
问题修复方案
1. 解决弃用警告
你收到的The message event is deprecated. Use messageCreate instead警告仅需修改客户端事件监听的事件名即可:
将你代码中事件监听的写法
client.on('message', async (message) => {
替换为:
client.on('messageCreate', async (message) => {
即可完全消除该弃用提醒。
2. 修复await逻辑异常问题
你之前修改send调用位置的操作不符合你的原始业务逻辑(原始逻辑是把建议发送到名为Suggestion的专属频道,不是发送到触发命令的当前频道),且你混合使用await和.then会导致异步时序混乱,同时缺少频道存在性判断,一旦找不到对应频道会直接抛出异常导致后续message.delete()不执行。
以下是修正后的完整业务代码:
// 顶部事件监听先替换为messageCreate client.on('messageCreate', async (message) => { if (message.content.startsWith("!Suggestion")) { var str = message.content.slice(" !Suggestion".length); // discord.js v13及以下版本保留该写法,v14+版本替换为Discord.EmbedBuilder即可 const embed = new Discord.MessageEmbed() .setThumbnail('Png') // 此处建议替换为实际的图片资源链接 .setTitle("Suggestion") .setColor('#151515') .addFields( { name: "提交建议的用户:", value: `<@!${message.author.id}>` }, { name: '建议内容:', value: `${str}` }, { name: '触发频道:', value: `${message.channel}` }, ) .setTimestamp() .setFooter("你可以通过底部表情对该建议进行投票") // 提前判断频道是否存在,避免调用send时报错 const suggestionChannel = message.guild.channels.cache.find(c => c.name === 'Suggestion') if (!suggestionChannel) return message.reply('未找到建议接收频道,请联系管理员配置') // 去掉.then混用逻辑,统一用await处理异步操作保证时序正常 const embedMessage = await suggestionChannel.send({ embeds: [embed] }) await embedMessage.react("✅") await embedMessage.react("❌") await message.delete(); } });
如果你使用的是discord.js v14及以上版本,仅需将
Discord.MessageEmbed替换为Discord.EmbedBuilder,其余Embed的配置方法完全兼容无需修改。
内容的提问来源于stack exchange,提问作者I need Help
相关产品推荐
相关产品推荐

