将排行榜限制为10个用户/将排行榜分成几页



我当前的排行榜显示字典中的每一个用户,我希望有一个分页的排行榜,每页显示10个用户,而不是显示排行榜中的每个用户,但我真的找不到用我当前的代码做到这一点的方法。

这是我当前的代码:

@commands.command()
@commands.guild_only()
@commands.cooldown(1, 3, commands.BucketType.guild)
async def leaderboard(self, ctx):
with open('json/servers/{Guild}/User.json'.format(Guild=ctx.guild.id), 'r') as f:
users = json.load(f)
leaderboard = {}
total_amt = {}
pages = []

total_amt = {user:users[str(user)]['MONEY'] + users[str(user)]['BANK'] for user in users.keys()}
leaderboard = {user: amount for user, amount in sorted(total_amt.items(), key=lambda item: item[1], reverse=True)}
em = discord.Embed(title='Top de Dinero', color=0x96edfd)
em.description = 'n'.join(f'**{list(leaderboard.keys()).index(user) + 1}.**' f"{'None' if self.bot.get_user(int(user)) == None else self.bot.get_user(int(user)).mention} " + f"**{amt}**" for user, amt in leaderboard.items())
await ctx.send(embed=em)

哇。。。显然,这比我想象的要容易,我正在测试并找到了我问题的解决方案,天哪,我以前怎么能不想到呢。

只需要稍微修改一下这个部分:

em.description = 'n'.join(f'**{index + 1}.**' f"{'None' if self.bot.get_user(int(user)) == None else self.bot.get_user(int(user)).mention} " + f"**{amt}** {emoji}" for index, (user, amt) in enumerate(list(leaderboard.items())[:10]))

最新更新