现在我有一个正常工作的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
答案 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。