我希望我的排行榜根据有多少用户分成多个页面。例如,如果有 5 个用户,则只剩下一个页面,如果有 23 个用户,则将它们分成 3 个页面,其中前 2 个显示 10 个用户,最后一个显示最后 3 个用户。我已经尝试了很多方法,但我已经到了我不知道该怎么做的地步。你能解决吗?只要可行,任何方法都可以接受。
@client.command()
async def leaderboard(ctx):
cursor = levelsystem_db.cursor()
cursor.execute("SELECT users.user_level, users.user_xp, users.client_id\nFROM users\nORDER BY users.user_level DESC , users.user_xp DESC")
leaderboard = cursor.fetchall()
embed = discord.Embed(
title=f"Leaderboard del {ctx.guild.name}",
colour=0x003399
)
for i, pos in enumerate(leaderboard, start=1):
lvl, xp, member_id = pos
cursor.execute(f"SELECT xp_level FROM levels WHERE level = {lvl+1}")
xp_level = cursor.fetchall()
xp_level = xp_level[0][0]
member = await client.fetch_user(member_id)
sorted_users = ## get all the members and sort them...
pages = grouper(sorted_users, 10)
print(pages)
embed.add_field(
name=f"{i}. {member.display_name}",
value=f"Livello attuale: {lvl}\n\t\tXP: {xp}/{xp_level}\n",
inline=False
)
await ctx.send(embed=embed)
def grouper(iterable, n, fillvalue=None):
args = [iter(iterable)] * n
return zip_longest(*args, fillvalue=fillvalue)