经济排行榜命令:未定义

Posted

技术标签:

【中文标题】经济排行榜命令:未定义【英文标题】: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);
    

【问题讨论】:

【参考方案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);

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

【讨论】:

以上是关于经济排行榜命令:未定义的主要内容,如果未能解决你的问题,请参考以下文章

discord.js - 排行榜未定义的用户名

最新!中国 GDP 十强城市排行榜

Google Play 排行榜未显示

排行榜分数未更新

Google Play 商店中未显示排行榜和成就徽章

写入 Google Play 排行榜 API 回调成功返回,但未记录分数