Как сделать лидерборд в telegram боте?

у меня есть такой код на Python:

import telebot
import random

bot = telebot.TeleBot("7202344488:AAGtzy6uQn8v5QN4WHrdiuC4CTvLKoM0Stk")
questions = {
    "Какого цвета небо?": "синее",
    "Сколько лап у собаки?": "четыре",
    "Какая столица Франции?": "Париж",
    "какого цвета трава?": "Зеленого" or "зеленого"
    ""
}

current_question = None


score = 0
user = 0


@bot.message_handler(commands=['start'])
def send_welcome(message):
    bot.send_message(message.chat.id, "Меню бота:\n1 начать квест /quiz_start\n2 лидеры /liders\n3 мои баллы /profile_user")




@bot.message_handler(commands=['quiz_start'])
def send_question(message):
    global current_question
    current_question = random.choice(list(questions.keys()))
    bot.send_message(message.chat.id, current_question)
@bot.message_handler(commands=['profile_user'])
def userID(message):
    global score
    bot.send_message(message.chat.id, text= "аккаунт" + message.from_user.first_name + ". добро пожаловать!")
    bot.send_message(message.chat.id, text= f"баллы: {score}")

@bot.message_handler(func=lambda message: True)
def check_answer(message):
    global score

    global current_question
    if current_question:
        correct_answer = questions[current_question]
        if message.text.lower() == correct_answer.lower():
            bot.send_message(message.chat.id, f"Правильно ваш ответ {correct_answer}")
            score += 1
            bot.send_message(message.chat.id, text= f" баллы: {score}")
        else:
            bot.send_message(message.chat.id, f"Неправильно! Правильный ответ: {correct_answer}.")
        current_question = None
        send_welcome(message)
    else:
        send_welcome(message)





#bot.polling()

bot.polling()

как сделать лидерборд из пяти мест? чтобы на команду /liders были имена пользователей и их баллы? спасибо


Ответы (1 шт):

Автор решения: kretoffer

Начнем с того, что твой бот не сохраняет статистику пользователей. У тебя есть глобальные переменные:

score = 0
user = 0

Но для всех пользователей эти переменные одинаковы, то есть их статистика общая. Так как статистика игроков сохраняет счет как общий, пользователь только один, и leaderboard из этого никак не построить.

Советую сделать сохранение через sql, если лень разворачивать отдельную базу данных, то попробуй библиотеку sqlite.

Еще, поскольку значения хранятся в переменных, после перезапуска бота весь счет стирается.

В твоем вопросе виден botAPI токен.

bot = telebot.TeleBot("7202344488:AAGtzy6uQn8v5QN4WHrdiuC4CTvLKoM0Stk")

Этот токен ни в коем случае нельзя никому показывать, и если будешь задавать вопросы на форумах, то вместо токена пиши просто TOKEN.

→ Ссылка