@Desmoke

Как пофиксить ошибку?

Есть топ игроков в боте, но у людей с одинаковым уровнем - одинаковый ник.

Топ 10 профи.

1 • FRESH - 38 уровень.
2 • ᗪ乇丂爪ㄖҜ乇 - 2 уровень.
3 • ᗪ乇丂爪ㄖҜ乇 - 2 уровень.
4 • ᗪ乇丂爪ㄖҜ乇 - 2 уровень.
5 • /root@ᎠeadiŇside (дед) - 1 уровень.
6 • /root@ᎠeadiŇside (дед) - 1 уровень.
7 • /root@ᎠeadiŇside (дед) - 1 уровень.
8 • /root@ᎠeadiŇside (дед) - 1 уровень.
9 • /root@ᎠeadiŇside (дед) - 1 уровень.
10 • /root@ᎠeadiŇside (дед) - 1 уровень
.

Как видите, у людей с 1 и 2 уровнем одинаковый ник, хотя аккаунты разные.
Вот код:

@dp.message_handler(commands=['top_lvl'])
async def cmd_top(message: types.Message):
    tops = cursor.execute("SELECT lvl FROM users").fetchall()
    tops.sort()
    top1 = tops[-1][0]
    top2 = tops[-2][0]
    top3 = tops[-3][0]
    top4 = tops[-4][0]
    top5 = tops[-5][0]
    top6 = tops[-6][0]
    top7 = tops[-7][0]
    top8 = tops[-8][0]
    top9 = tops[-9][0]
    top10 = tops[-10][0]
    allt = [top1, top2, top3, top4, top5, top6, top7, top8, top9, top10]
    alltops = ""
    num = 0
    for x in allt:
        get = cursor.execute("SELECT user_id FROM users WHERE lvl=?", (x,)).fetchall()
        user = await bot.get_chat(str(get[0][0]))
        fname = quote_html(user.full_name)
        num += 1
        alltops += f"{num} • {fname} - <b><i>{x}</i></b> уровень.\n"
    await message.reply(f"Топ 10 профи.\n\n{alltops}")
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
@qid00000000
Мало что знаю, но информацию найду в гугле
Код нужно переписать. Задача решается 1 запросом:

select user_id from users order by lvl desc limit 10;


Как-то так..
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы