shurup77
@shurup77

Как сделать таблицу лидеров по числу count на Aiogram?

Привет! Пишу бота на Aiogram, у меня он работает с СУБД pgAdmin4.

Есть команда для получение какого-то количества монет:
Код
@dp.message_handler(text=['/get', '/get@bot'])
async def command_vine(message: types.Message):
    user = await commands.select_user(message.from_user.id)
    vine = await commands.select_vine(message.from_user.id)

    gen_count = random.randint(1, 6)
    new_count = vine.count + int(gen_count)

    if user.user_id != 11111111111:
        if user.status == 'active':
            await commands.update_vine(user_id=message.from_user.id,
                                       new_count=int(new_count))
            await message.answer(
                f"@{user.name} получил {gen_count} монет.\n\n<b>Всего монет:</b> {new_count}")
    else:
        await message.reply(f"Извини, но тебе запрещено выполнять данную команду")


Также имеются функции:
select_user
async def select_user(user_id):
    user = await User.query.where(User.user_id == user_id).gino.first()
    return user

select_vine
async def select_vine(user_id):
    user = await Vine.query.where(Vine.user_id == user_id).gino.first()
    return user


Мне нужно, чтобы на команду, например: "/stats", отправлялась таблица лидеров (топ 7 человек, например)
Предположительная функция
async def get_top_users():
    users = await Vine.select('user_id', 'count').where(Vine.count != 0).gino.all()

И вот как-то нужно отсортировать count, вернуть user_id совместно с count, расположив по убыванию и вывести через команду
Вот преположительный вывод
@dp.message_handler(text=['/stats', '/stats@bot'])
async def command_stats(message: types.Message):
    top_users = await commands.get_top_users()
    
    msg = ''
    count = 10
    id = 0

    for user_id, count in top_users:
        id += 1
        if id <= count:
            user = await commands.select_user(user_id)
            if user:
                mention = f'<a href="tg://user?id={user.user_id}">{user.name}</a>'
                msg += f'{id}. {mention} - {count}\n'
            else:
                id -= 1
        else:
            break

    await message.answer(f'Статистика:\n {msg}')

И вот как-то надо сделать, чтобы функция "get_top_users()" ворщала отсортированные значение count вместе с их user_id. Как это реализовать?
  • Вопрос задан
  • 235 просмотров
Пригласить эксперта
Ответы на вопрос 1
Dr_Elvis
@Dr_Elvis Куратор тега Python
В гугле забанен
order by
Посмотрите как он в используемой вами библиотеке реализован.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы