Как сделать лидерборд в 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 шт):
Начнем с того, что твой бот не сохраняет статистику пользователей. У тебя есть глобальные переменные:
score = 0
user = 0
Но для всех пользователей эти переменные одинаковы, то есть их статистика общая. Так как статистика игроков сохраняет счет как общий, пользователь только один, и leaderboard
из этого никак не построить.
Советую сделать сохранение через sql, если лень разворачивать отдельную базу данных, то попробуй библиотеку sqlite.
Еще, поскольку значения хранятся в переменных, после перезапуска бота весь счет стирается.
В твоем вопросе виден botAPI токен.
bot = telebot.TeleBot("7202344488:AAGtzy6uQn8v5QN4WHrdiuC4CTvLKoM0Stk")
Этот токен ни в коем случае нельзя никому показывать, и если будешь задавать вопросы на форумах, то вместо токена пиши просто TOKEN
.