【问题标题】:Economy leaderboard command: undefined经济排行榜命令:未定义
【发布时间】:2021-07-05 18:59:23
【问题描述】:

我正在制作一个不和谐的经济/货币机器人,这是排行榜命令。它可以工作,但是每当我运行命令 !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);
    }

【问题讨论】:

    标签: discord.js quick.db


    【解决方案1】:

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

    【讨论】:

    • 此时不是假设客户端已经登录了吗?否则客户端如何发出消息事件并调用命令文件
    • @Elitezen 好吧,他们可能正在使用命令处理程序,就像我对我的机器人所做的那样,所以 client.login 可以在 main.js 文件中,这将解释机器人正确启动。
    【解决方案2】:

    试试下面的代码:

    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);
    

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

    【讨论】:

      猜你喜欢
      • 2021-03-12
      • 2022-06-13
      • 1970-01-01
      • 2020-11-22
      • 2021-05-29
      • 2020-11-05
      • 2021-09-14
      • 2021-04-20
      • 2021-03-20
      相关资源
      最近更新 更多