所以我最近在我的练级系统中实现了一个排行榜命令,但它不起作用没有错误弹出,比如当我输入 -asdfghjhgf 时,我的机器人说找不到 cmd do -help 获取 cmds 列表,但是当我这样做时 -排行榜什么都没有出现 这是我的代码
@client.command()
async def leaderboard(ctx):
with open('users.json', 'r') as f:
data = json.load(f)
top_users = {k: v for k, v in sorted(data.items(), key=lambda item: item[1], reverse=True)}
names = ''
for postion, user in enumerate(top_users):
# add 1 to postion to make the index start from 1
names += f'{postion+1} - <@!{user}> with {top_users[user]}\n'
embed = discord.Embed(title="Leaderboard")
embed.add_field(name="Names", value=names, inline=False)
await ctx.send(embed=embed)
如果你想知道我的 users.json 文件是格式化的
userid, xp ,lvl
ppl 需要我的 users.json 文件,所以在这里
{"466969761033748490": {"experience": 730, "level": 5}, "832560001758789682": {"experience": 240, "level": 3}, "788864044413091853": {"experience": 5, "level": 1}}
答案 0 :(得分:0)
我认为您的代码非常接近。您的源数据是一个对象,其键是用户 ID,每个键都指向用户的数据。
我认为您排序的问题在于您如何使用该项目。
top_users = {k: v for k, v in sorted(data.items(), key=lambda item: item[1]['experience'], reverse=True)}
names = ''
for position, (user, value) in enumerate(top_users):
# add 1 to postion to make the index start from 1
names += f'{postion+1} - <@!{user}> with {value}\n'
您将获得一个以键为第一个元素,子对象为第二个元素的对列表。