0
const { MessageEmbed } = require('discord.js');
  const fs = require('fs');
  const db = require('quick.db');
  const bot = ('Discord.Client')
  module.exports = {
      name: 'leaderboard',
  
  description: "idk something",
execute(message, args) {
    let money = db.all().filter(data => data.ID.startsWith(`money_`)).sort((a, b) => b.data - a.data);
    console.log(money)
            if (!money.length) {
                let noEmbed = new MessageEmbed()
                    .setAuthor(message.member.displayName, message.author.displayAvatarURL())
                    .setColor("BLUE")
                    .setFooter("No leaderboard")
                return message.channel.send(noEmbed)
            };
    
            money.length = 10;
            var finalLb = "";
            for (var i in money) {
                let currency1;
                let fetched = db.fetch(`money_${message.guild.id}`);
                if (fetched == null) {
                    currency1 = ''
                } else {
                    currency1 = fetched
                }
                if (money[i].data === null) {money[i].data = 0}
                finalLb += `**${money.indexOf(money[i]) + 1}.${message.guild.members.fetch(money.ID.split('_')[1]) ? message.guild.members.fetch(money.ID.split('_')[1]).tag : ""}** - ${money.data} ${currency1}\n`;
            };
    
            const embed = new MessageEmbed()
                .setTitle(message.guild.name)
                .setColor("BLUE")
                .setDescription(finalLb)
                .setTimestamp()
                .setFooter('Command: !help for currency commands')
            message.channel.send(embed);
  }
  }

尝试制作排行榜命令并收到此错误 TypeError: Cannot read property 'split' of undefined。我一直在寻找答案,但到目前为止,我还没有看到任何特定于我的情况的东西。谁能帮忙?

4

1 回答 1

0

似乎您在函数中进行了很多异步调用。可能发生的情况是您调用 split 函数的字符串值不存在,因为来自服务器的数据尚未到达客户端。

要解决此问题,请在函数名称(执行)之前添加关键字“async”,并在对 db 的所有函数调用之前添加关键字“await”

async execute(message, args){
...
}

    let money = await db.all().filter(data => data.ID.startsWith(`money_`)).sort((a, b) => b.data - a.data);

     let fetched = await db.fetch(`money_${message.guild.id}`);

我还建议您阅读 javascript 中的异步函数

于 2021-05-05T22:44:29.793 回答