python, библиотека telebot. как остановить обработку сообщений @bot.message_handler(content_types=['text'])?
пишу телеграм-бота, проверяющего знания по физике. есть команда /class, с помощью которой можно выбрать класс (кнопками, которые отправляют текст). и даже после того, как запускается другая команда, @bot.message_handler(content_types=['text']) всё равно продолжает обрабатывать сообщения, и если это обычный текст, то отвечать 'Ошибка! Указано некорректное значение. Этот бот предназначен только для 8-10 классов.' (что должно выходить при вводе букв, например). а мне нужно, чтобы этот хендлер прекратил обработку сообщений. помогите, пожалуйста!
import telebot
from telebot import types
bot = telebot.TeleBot('токен')
@bot.message_handler(commands=['class'])
def chose_class1(message):
class_btn = types.ReplyKeyboardMarkup(resize_keyboard=True)
class_8 = types.KeyboardButton('8 класс')
class_9 = types.KeyboardButton('9 класс')
class_10 = types.KeyboardButton('10 класс')
class_btn.add(class_8, class_9, class_10)
bot.send_message(message.chat.id, 'В каком классе ты учишься?', reply_markup=class_btn)
global user_class
user_class = 0
@bot.message_handler(content_types=['text'])
def choose_class2(message):
if(message.text[0:2] not in ['8 ', '9 ', '10']):
bot.send_message(message.chat.id, 'Ошибка! Указано некорректное значение. '
'Этот бот предназначен только для 8-10 классов.')
else:
user_class = int(message.text[0:2])
bot.send_message(message.chat.id, f'Отлично, ты учишься в {user_class} классе.')
print(user_class)
def test_q(message):
global right_ans
ans = types.ReplyKeyboardMarkup(resize_keyboard=True)
r_ans = types.KeyboardButton('Верный ответ')
w_ans1 = types.KeyboardButton('Неверный ответ 1')
w_ans2 = types.KeyboardButton('Неверный ответ 2')
w_ans3 = types.KeyboardButton('Неверный ответ 3')
ans.add(r_ans, w_ans1, w_ans2, w_ans3)
bot.send_message(message.chat.id, 'Тестовый вопрос:', reply_markup=ans)
@bot.message_handler(content_types=['text'])
def result(message):
global right_ans
if(message.text == 'Верный ответ'):
bot.send_message(message.chat.id, 'Верно!')
right_ans += 1
else:
bot.send_message(message.chat.id, 'Неправильно. Верным ответом является "Верный ответ"')
@bot.message_handler(commands=['beta_test'])
def beta_test_msg(message):
bot.send_message(message.chat.id,
'Это бета-версия теста')
global right_ans
right_ans = 0
test_q(message)
bot.polling(none_stop=True)
Ответы (1 шт):
Автор решения: Daniel
→ Ссылка
Не совсем понял, что вы хотите увидеть в ответе. Могу предложить что-нибудь подобное
import telebot
from telebot import types
bot = telebot.TeleBot('токен')
@bot.message_handler(commands=['class'])
def chose_class1(message):
class_btn = types.ReplyKeyboardMarkup(resize_keyboard=True)
class_8 = types.KeyboardButton('8 класс')
class_9 = types.KeyboardButton('9 класс')
class_10 = types.KeyboardButton('10 класс')
class_btn.add(class_8, class_9, class_10)
bot.send_message(message.chat.id, 'В каком классе ты учишься?', reply_markup=class_btn)
bot.register_next_step_handler(message, choose_class2)
def choose_class2(message):
if message.text not in ['8 класс', '9 класс', '10 класс']:
bot.send_message(message.chat.id, 'Ошибка! Указано некорректное значение. '
'Этот бот предназначен только для 8-10 классов.')
return
user_class = int(message.text.split()[0])
bot.send_message(message.chat.id, f'Отлично, ты учишься в {user_class} классе.')
print(user_class)
@bot.message_handler(commands=['beta_test'])
def beta_test_msg(message):
bot.send_message(message.chat.id, 'Это бета-версия теста')
right_ans = 0
test_q(message)
def test_q(message):
ans = types.ReplyKeyboardMarkup(resize_keyboard=True)
r_ans = types.KeyboardButton('Верный ответ')
w_ans1 = types.KeyboardButton('Неверный ответ 1')
w_ans2 = types.KeyboardButton('Неверный ответ 2')
w_ans3 = types.KeyboardButton('Неверный ответ 3')
ans.add(r_ans, w_ans1, w_ans2, w_ans3)
bot.send_message(message.chat.id, 'Тестовый вопрос:', reply_markup=ans)
bot.register_next_step_handler(message, result)
def result(message):
if message.text == 'Верный ответ':
bot.send_message(message.chat.id, 'Верно!')
right_ans += 1
else:
bot.send_message(message.chat.id, 'Неправильно. Верным ответом является "Верный ответ"')
bot.polling(none_stop=True)