Таблица Лидеров с распределением по страницам(эмбедам) Discord.py Mongodb
Всем привет, я пытаюсь написать код для таблицы лидеров по количеству игр, на которые пришёл человек. Использую базу-данных Mongodb и библиотеку discord.py. Перепробовал уже множество способов, но, к сожалению, не смог сделать равномерное распределение по страницам (по 10 человек на каждой). Проблема заключается в том, что с каждой новой страницей (начиная со второй) появляются дубликаты, убирая которые на странице остаётся около 4-ёх пользователей, вместо 10. Возможно ли вообще выполнить эту задачу, используя базу данных Mongodb или нужно будет переходить на SQLLite3? Заранее благодарю вас за помощь. Код, на котором остановился:
@bot.command (aliases = ['topgames', 'tgames', 'tgam', 'topgam'])
async def топигры (ctx):
guild = ctx.guild.id
number = 0
much = members.count_documents({"guild_id": guild})
much = math.ceil(much/10)
embeds = []
ID = []
for i in range(much):
emb1 = discord.Embed( title = f':trophy: **Топ по Играм** :trophy:', colour = discord.Colour.from_rgb(220,239,61) )
emb1.set_author( name= f'Запрос от: {ctx.message.author.display_name}#{ctx.message.author.discriminator} ', icon_url = ctx.message.author.avatar_url)
emb1.set_footer( text = f'❖ {i+1}/{much} ❖')
data = members.find().sort("games", -1)
for m, x in enumerate(members.find().sort("games", -1).skip(i*10).limit(10)):
member = ctx.guild.get_member(x['member_id'])
memberg = x['guild_id']
memberid = x['member_id']
if ID.count(memberid) > 0:
continue
if memberg == guild:
emb1.add_field(name = f"{number+1}. {str(x['displayname'])}", value =f"**{str(x['games'])}** Игр", inline = False)
number = number + 1
ID.append(memberid)
embeds.append(emb1)
index = 0
message = await ctx.send(embed=embeds[0])
emojis = ["◀️", "⏹", "▶️"]
for emoji in emojis:
await message.add_reaction(emoji)
while not bot.is_closed():
try:
react, user = await bot.wait_for(
"reaction_add",
timeout = 300.0,
check = lambda r, u: r.emoji in emojis and u.id == ctx.author.id and r.message.id == message.id
)
if react.emoji == emojis[0] and index > 0:
index -= 1
await message.remove_reaction(react.emoji, u.id)
elif react.emoji == emojis[1]:
await message.delete()
break
elif react.emoji == emojis[2] and index < len(embeds) - 1:
index += 1
await message.remove_reaction(react.emoji, u.id)
await message.edit(embed=embeds[index])
except asyncio.TimeoutError:
await message.delete()
break```