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

Discord.js:module.exports内使用MessageEmbed发送时报空消息错误

解决Discord.js发送MessageEmbed时报“Cannot send an empty message”的问题

问题分析及修复步骤:

  1. 适配Discord.js v13+的消息发送API
    从Discord.js v13版本开始,发送Embed不再直接传递Embed对象,而是需要将其放入embeds数组中作为参数传递。原代码直接传embed会被识别为空消息内容,导致报错。修改发送语句:

    // 替换 message.channel.send(embed);
    message.channel.send({ embeds: [embed] });
    
  2. 修复avatarURL的调用错误
    message.author.avatarURL是一个方法,必须通过()调用才能获取到用户头像的URL。原代码未加括号,传递的是函数本身,可能导致Embed加载异常:

    .setImage(message.author.avatarURL())
    // 可选:指定头像尺寸,比如256x256
    // .setImage(message.author.avatarURL({ size: 256 }))
    
  3. 补全未定义的变量
    代码中shuffler函数和quotes数组未定义,这会先引发其他错误,需要提前定义:

    // 在module.exports前添加示例代码(可根据需求修改)
    const quotes = ["不要等待机会,而要创造机会。", "人生最大的错误是不断担心会犯错。"];
    function shuffler(arr) {
      let shuffledArr = [...arr];
      let currentIndex = shuffledArr.length;
      // Fisher-Yates洗牌算法
      while (currentIndex !== 0) {
        const randomIndex = Math.floor(Math.random() * currentIndex);
        currentIndex--;
        [shuffledArr[currentIndex], shuffledArr[randomIndex]] = 
        [shuffledArr[randomIndex], shuffledArr[currentIndex]];
      }
      let pointer = 0;
      return () => {
        if (pointer >= shuffledArr.length) {
          pointer = 0;
          // 重新洗牌
          currentIndex = shuffledArr.length;
          while (currentIndex !== 0) {
            const randomIndex = Math.floor(Math.random() * currentIndex);
            currentIndex--;
            [shuffledArr[currentIndex], shuffledArr[randomIndex]] = 
            [shuffledArr[randomIndex], shuffledArr[currentIndex]];
          }
        }
        return shuffledArr[pointer++];
      };
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:09:29