经济排行榜命令:未定义

时间:2021-04-09 22:07:49

标签: discord.js quick.db

我正在制作一个不和谐的经济/货币机器人,这是排行榜命令。它有效,但是每当我运行命令 !leaderboard 时,我都没有得到任何用户的标签,我只是得到了 undefined#0000。我希望我的排行榜命令显示货币数量最高的用户。

const { MessageEmbed } = require('discord.js');
const db = require('quick.db');

module.exports = {
        name: "leaderboard",
        description: 'server\'s $ leaderboard',
        aliases: ['lb'],
    }
    module.exports.run = async (message) => {
        let money = db.all().filter(data => data.ID.startsWith(`money_`)).sort((a, b) => b.data - a.data);
        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 = await db.fetch(`currency_${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.cache.get(money[i].ID.split('_')[1]) ? message.guild.members.cache.get(money[i].ID.split('_')[1]).tag : "undefined#0000"}** - ${money[i].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);
    }

2 个答案:

答案 0 :(得分:0)

试试下面的代码:

let money = db.all().filter(data => data.ID.startsWith(`money_${message.guild.id}`)).sort((a, b) => b.data - a.data)
money.length = 10;

var finalLb = "";
for (var i in money) {
  finalLb += `**${money.indexOf(money[i])+1}. ${client.users.cache.get(money[i].ID.split('_')[1]) ? client.users.cache.get(money[i].ID.split('_')[1]).tag : "Unknown User#0000"}** - ${money[i].data}\n`;
}
const embed = new Discord.MessageEmbed()
.setAuthor(`Global Coin Leaderboard!`, message.guild.iconURL())
.setColor("#7289da")
.setDescription(finalLb)
.setFooter(client.user.tag, client.user.displayAvatarURL())
.setTimestamp()
message.channel.send(embed);

我个人为我的机器人使用了上面的代码,它对我来说效果很好。

答案 1 :(得分:-1)

尝试将 client.login('token') 放在代码的底部。也许机器人因此找不到用户标签?