编辑消息时消息内容必须为非空字符串

Message content must be a non-empty string when editing message

我想发出一个命令让机器人 return 它与数据库的连接状态,但是我得到了一个错误,我现在有点困惑。

RangeError [MESSAGE_CONTENT_TYPE]: Message content must be a non-empty string.
const { MessageEmbed } = require('discord.js');
const quick = require('quick.db');

module.exports = {
  name: 'ping',
  aliases: [],
  description: 'Get bot ping.',
  permissions: [],
  async execute(message, client) {
    const ping = await getDBPingData();
    const messagePing = Date.now();
    const msg = await message.channel.send('Loading...');
    const endMessagePing = Date.now() - messagePing;

    const embed = new MessageEmbed()
      .setDescription(
        `
        Database ping data:
        - Fetch ping: \`${ping.endGet}ms\`
        - Wright ping: \`${ping.endWright}ms\`
        - Avrage ping: \`${ping.avarage}ms\`
        Message ping: \`${endMessagePing}ms\`
      `
      )
      .setColor('GREEN')
      .setTimestamp();

    msg.edit({
      content: '',
      embed,
    });
  },
};

async function getDBPingData() {
  // get the fetch data ping
  const startGet = Date.now();
  await quick.get('QR=.');
  const endGet = Date.now() - startGet;

  // get the wright data ping
  const startWright = Date.now();
  await quick.set('QR=.', Buffer.from(startWright.toString()).toString('base64'));
  const endWright = Date.now() - startWright;

  // avrage ping time
  const avarage = (endGet + endWright) / 2;
  try {
    quick.delete('QR=.'); 
  } catch (error) {}
  return { endGet, endWright, avarage };
}

我正在使用 discord.js v13,此命令使用的软件包是:discord.jsquick.db.

试试这个:

    // only need to edit embed in an embeds array
    msg.edit({ embeds: [embed] })

在 v13 中,机器人发送的消息现在最多支持 10 个嵌入。因此,嵌入选项被删除并替换为嵌入数组,该数组必须位于选项对象中,因此您的消息编辑应为 msg.edit({ embeds: [embed] }).

如果您还想删除之前的文本 (Loading...),您需要添加 content: null 作为空字符串 ('') 因为 content 会抛出 RangeError.

msg.edit({
  content: null,
  embeds: [embed],
});