如何根据谁拥有最多xp制作排行榜?

时间:2018-05-22 01:42:36

标签: discord.py

现在我有一个正常工作的xp /找平系统,正如标题中所说,有一种方式可以显示谁拥有最多xp?有点像排行榜类型的东西,如果有人会给出一个很棒的例子!

if message.content.lower().startswith('/xp'):
    await client.send_message(message.channel, "You currently have `{}` XP!".format(get_xp(message.author.id)))

user_add_xp(message.author.id, 2)


def user_add_xp(user_id: int, xp: int):
if os.path.isfile("users.json"):
    try:
        with open('users.json', 'r') as fp:
            users = json.load(fp)
        users[user_id]['xp'] += xp
        with open('users.json', 'w') as fp:
            json.dump(users, fp, sort_keys=True, indent=4)
    except KeyError:
        with open('users.json', 'r') as fp:
            users = json.load(fp)
        users[user_id] = {}
        users[user_id]['xp'] = xp
        with open('users.json', 'w') as fp:
            json.dump(users, fp, sort_keys=True, indent=4)
else:
    users = {user_id: {}}
    users[user_id]['xp'] = xp
    with open('users.json', 'w') as fp:
        json.dump(users, fp, sort_keys=True, indent=4)


def get_xp(user_id: int):
if os.path.isfile('users.json'):
    with open('users.json', 'r') as fp:
        users = json.load(fp)
    return users[user_id]['xp']
else:
    return 0

1 个答案:

答案 0 :(得分:1)

嗯,你已经有办法通过以下方式抓住用户:

with open('users.json', 'r') as fp:
    users = json.load(fp)

因此,您可以将其与sorted结合使用,这样可以根据xp按顺序为用户提供一个列表。

sorted(users, key=lambda x : users[x].get('xp', 0), reverse=True)

从那里你将不得不采取这个清单,并使其成为人们消化的简单方法。这是一个例子。

high_score_list = sorted(users, key=lambda x : users[x].get('xp', 0), reverse=True)
message = ''
for number, user in enumerate(high_score_list):
    message += '{0}. {1} with {2}xp\n'.format(number + 1, user, users[user].get('xp', 0))

这应该为您提供从上到下按顺序发送的消息,显示他们的排名,名称和xp。