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

Discord.js机器人消息嵌入问题求助:标签报错、附件失效及头像设置

解决Discord.js机器人的Embed处理问题

我来帮你逐个搞定这三个问题,先拆解每个问题的根源,再给出修复方案:

问题1:提及用户时触发API错误

这个错误的核心是你直接把message.attachments传给了setImage()——message.attachments是一个Attachment集合对象,不是字符串格式的URL,当消息没有附件时,它会是空集合,Discord API无法识别这种格式,就会抛出错误。

问题2:附件无法正常显示

同样是setImage()的用法错误,你需要从附件集合里取出具体的附件URL,而不是直接传集合本身。另外要判断消息是否包含附件,再去设置Embed图片,避免传入空值。

问题3:设置作者头像为消息发送者头像

setAuthor()方法支持传入第二个参数作为头像URL,你可以用message.author.displayAvatarURL()获取发送者的头像链接,同时把作者名设为发送者的用户名,体验更直观。

修正后的完整代码

bot.on('message', async message => {
  // 忽略机器人自身发送的消息
  if (message.author.bot) return;
  // 仅监听指定频道
  if (message.channel.id !== "771695635598278677") return;

  try {
    // 异步删除原消息,确保后续操作等待删除完成
    await message.delete();

    // 构建MessageEmbed
    const darkEmbed = new Discord.MessageEmbed()
      .setColor('#000000')
      .setDescription(message.content)
      // 设置作者:用户名+发送者头像URL
      .setAuthor(message.author.username, message.author.displayAvatarURL())
      .setFooter('twitter', 'https://cdn.discordapp.com/attachments/564032243836780558/771614643159433226/Anonymous_emblem.svg.png');

    // 处理附件:存在附件时,设置Embed图片为第一个附件的URL
    if (message.attachments.size > 0) {
      const firstAttachment = message.attachments.first();
      darkEmbed.setImage(firstAttachment.url);
    }

    // 发送最终的Embed
    await message.channel.send(darkEmbed);
  } catch (error) {
    // 捕获并打印错误,避免控制台抛出未处理的Promise拒绝
    console.error('处理消息时发生错误:', error);
  }
});

关键修改说明

  • 加入async/await:因为message.delete()和message.channel.send()都是异步操作,用await确保执行顺序,同时用try/catch捕获异常,避免控制台报错。
  • 修正setImage()逻辑:只有当消息包含附件时,才取出第一个附件的URL传入,彻底解决空值/集合格式导致的API错误。
  • 完善setAuthor():传入发送者的用户名和头像URL,满足你的需求。
  • 移除无效的addField('\n'):addField需要至少标题和内容两个参数,多余的空字段会导致Embed异常。
  • 修正变量名混淆:你原代码里定义了dark但发送了twitter,现在统一为darkEmbed避免逻辑混乱。

这样修改后,三个问题都能解决:提及用户时不会再触发错误,附件能正常显示在Embed中,作者头像也会同步为消息发送者的头像。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:22:29