【发布时间】:2022-01-25 18:07:32
【问题描述】:
好的,所以我创建了一个排行榜,并让它显示获胜次数最多的玩家。出于某种原因,当多人获得相同数量的胜利时,它只会一遍又一遍地显示一个人的名字。
这里是main.py
@client.command()
@commands.cooldown(1,5, BucketType.user)
async def leaderboard(ctx, x = 1):
users = await get_win_data()
leader_board = {}
total = []
for user in users:
name = int(user)
total_amount = users[user]["Wins"]
leader_board[total_amount] = name
total.append(total_amount)
total = sorted(total, reverse=True)
demb = discord.Embed(title = f"Top winners!", descripition = "These are the people with the most amount of wins.", color=discord.Color.red())
index = 1
for wins in total:
id_ = leader_board[wins]
member = client.get_user(id_)
name = member.name
demb.add_field(name = f"{index}. {name}", value=f"Won **{wins}** times", inline=False)
if index == x:
break
else:
index += 1
await ctx.send(embed = demb)
这是json
{
"427924596164132864": {
"Wins": 1
},
"441638109587832842": {
"Wins": 1
},
"479527342860140544": {
"Wins": 1
}
}
我想知道是否有任何方法可以显示所有 3 名玩家,即使他们的获胜次数都相同。
【问题讨论】:
-
你能解释一下
x的用法吗?现在,您的代码将分数映射到一个名称(这就是它没有 3 个不同名称的原因),将每个分数添加到列表中,按降序对其进行排序并循环。对已有的usersdict 进行排序和循环会更好。 -
这是为了将排行榜限制在
x位置吗? -
@shriakhilc 正确当有人运行 ?leaderboard 5 时它会显示 5 个位置,因此该命令中的 5 将是 x
标签: python json discord discord.py