Как создать доску с уровнями лидеров в discord-py с помощью базы данных MongoDB?
Участники уже могут зарабатывать уровни, но как сделать так что при вводе команды +top (асинхронная функция с аргументом ctx) писались имена и рядом с ними уровни участников в порядке убывания (+опыт). В таком формате:
Топ 10 лидеров по уровням
#1) Member: 17 lvl (120 / 1140 xp)
#2) Member: 14 lvl (600 / 1010 xp)
#3) Member: 13 lvl (150 / 980 xp)
#4) Member: 10 lvl (470 / 830 xp)
#5) Member: 6 lvl (320 / 340 xp)
У меня есть база данных с содержимым:
data = {
"_id": member.id,
"name": member,
"lvl": 1,
"xp": 0
}
Вот прошу объяснить мне, пожалуйста, какой цикл может помочь или что делать чтобы всё работало как я задумал?
Ответы (1 шт):
Автор решения: Merka
→ Ссылка
Про опыт я не совсем понял как он показывается после /, но думаю вы сможете там всё сделать сами, я наглядно всё показал и расписал
Если где то вдруг ошибка выйдет, в комменты напишите
@bot.command()
async def top(ctx, iters = 50):
rows = collestionuser.find(limit=iters).sort("lvl", -1) # получаем список с рейтингом по убыванию. collestionuser коллекция с пользователями (на свое замените). в дискорде бесконечно нельзя выводить текст, так что давайте ограничим число мест в выводе
count = 0
text = ""
for row in rows:
nam = ctx.guild.get_member(int(row["_id"])) # получаем имя
if nam == None: # если имя нельзя получить, т.е пользователь вышел с сервера, то пропускаем. Иначе вместо имени будет просто None
continue
lvl = row["lvl"] # получаем лвл
text += f"#{str(count+1)}) {nam}: {lvl} lvl\n" # {nam.mention} ещё можно поставить для упоминания.
count += 1
await ctx.send(text)