经济排行榜命令:未定义
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);
我个人将上面的代码用于我的机器人,它对我来说效果很好。
【讨论】:
以上是关于经济排行榜命令:未定义的主要内容,如果未能解决你的问题,请参考以下文章