как сделать таблицу лидеров, основанную на том, у кого больше всего опыта? - PullRequest
0 голосов
/ 22 мая 2018

Прямо сейчас у меня есть работающая система XP / Leveling, как сказано в заголовке, есть ли способ показать, у кого больше всего 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 голосов
/ 22 мая 2018

Ну, у вас уже есть способ получить пользователей с помощью:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...