Ну, у вас уже есть способ получить пользователей с помощью:
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.