From bf8736e17e432f67464614fd3f9446b15c9580a6 Mon Sep 17 00:00:00 2001 From: _run Date: Fri, 1 Oct 2021 23:29:59 +0500 Subject: [PATCH] Critical fix --- examples/custom_states.py | 16 ++++++++++++++++ telebot/custom_filters.py | 5 +++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/examples/custom_states.py b/examples/custom_states.py index 1d46f6c..ac70bb9 100644 --- a/examples/custom_states.py +++ b/examples/custom_states.py @@ -8,6 +8,9 @@ bot = telebot.TeleBot("") @bot.message_handler(commands=['start']) def start_ex(message): + """ + Start command. Here we are starting state + """ bot.set_state(message.chat.id, 1) bot.send_message(message.chat.id, 'Hi, write me a name') @@ -15,11 +18,17 @@ def start_ex(message): @bot.message_handler(state="*", commands='cancel') def any_state(message): + """ + Cancel state + """ bot.send_message(message.chat.id, "Your state was cancelled.") bot.delete_state(message.chat.id) @bot.message_handler(state=1) def name_get(message): + """ + State 1. Will process when user's state is 1. + """ bot.send_message(message.chat.id, f'Now write me a surname') bot.set_state(message.chat.id, 2) with bot.retrieve_data(message.chat.id) as data: @@ -28,21 +37,28 @@ def name_get(message): @bot.message_handler(state=2) def ask_age(message): + """ + State 2. Will process when user's state is 2. + """ bot.send_message(message.chat.id, "What is your age?") bot.set_state(message.chat.id, 3) with bot.retrieve_data(message.chat.id) as data: data['surname'] = message.text +# result @bot.message_handler(state=3, is_digit=True) def ready_for_answer(message): with bot.retrieve_data(message.chat.id) as data: bot.send_message(message.chat.id, "Ready, take a look:\nName: {name}\nSurname: {surname}\nAge: {age}".format(name=data['name'], surname=data['surname'], age=message.text), parse_mode="html") bot.delete_state(message.chat.id) +#incorrect number @bot.message_handler(state=3, is_digit=False) def age_incorrect(message): bot.send_message(message.chat.id, 'Looks like you are submitting a string in the field age. Please enter a number') +# register filters + bot.add_custom_filter(custom_filters.StateFilter(bot)) bot.add_custom_filter(custom_filters.IsDigitFilter()) bot.infinity_polling(skip_pending=True) \ No newline at end of file diff --git a/telebot/custom_filters.py b/telebot/custom_filters.py index 20b42c3..bce2399 100644 --- a/telebot/custom_filters.py +++ b/telebot/custom_filters.py @@ -159,8 +159,9 @@ class StateFilter(AdvancedCustomFilter): def check(self, message, text): if self.bot.current_states.current_state(message.from_user.id) is False:return False - elif '*' in text:return True - return self.bot.current_states.current_state(message.from_user.id) in text + elif text == '*':return True + elif type(text) is list:return self.bot.current_states.current_state(message.from_user.id) in text + return self.bot.current_states.current_state(message.from_user.id) == text class IsDigitFilter(SimpleCustomFilter): """