@bot.message_handler
Хотел написать телеграм бота с викториной, но почему-то, когда ввожу вариант ответа, он присваевает его переменной name и цик начинается заново. Изучаю python пару дней. Помогите плиз
import telebot
bot = telebot.TeleBot("токен", parse_mode=None)
@bot.message_handler(commands=['start'])
def send_message(message):
bot.reply_to(message, "Ведите фамилию!")
@bot.message_handler(content_types=["text"])
def send_message(message):
name = (message.text)
answer = " Привет! " + name
bot.send_message(message.chat.id, answer)
print(name + " в игре!")
bot.send_message(message.chat.id, "окей, первый вопрос:")
bot.send_message(message.chat.id, "тут должен быть вопрос")
bot.send_message(message.chat.id, "тут 3 варианта ответов")
@bot.message_handler(content_types=["text"])
def send_message(message):
bot.send_message(message.chat.id, "окей, дальше")
if message.text == 3:
score + 1
print(name + "получает 1 балл!")
bot.send_message(message.chat.id, "окей, дальше")
bot.polling()
Ответы (1 шт):
Автор решения: Violet
→ Ссылка
Дело в том, что вы используете два handler (обработчика) с одним типом - text.
После ввода ответа у вас срабатывает первый (верхний) из-за этого ответ и присваивается переменной name.
На скорую руку я прикинул код:
@bot.message_handler(commands=['start'])
def start(message):
msg = bot.reply_to(message, "Ведите фамилию!")
bot.register_next_step_handler(msg, start_2)
def start_2(message):
msg = bot.send_message(message.chat.id, 'Привет! {}\nпервый вопрос:'.format(message.text))
bot.register_next_step_handler(msg, answer)
def answer(message):
score = 0
if message.text == '3':
score += 1
bot.send_message(message.chat.id, 'получаете {} балл!\nокей, дальше'.format(score))
bot.polling(none_stop=True, interval=0)
Здесь используется bot.register_next_step_handler для ожидания ввода от пользователя с переходом на другой шаг. https://ru.stackoverflow.com/a/1254764/234134