diff --git a/examples/custom_filters.py b/examples/custom_filters.py new file mode 100644 index 0000000..23cebe3 --- /dev/null +++ b/examples/custom_filters.py @@ -0,0 +1,46 @@ +import telebot +from telebot import util + +bot = telebot.TeleBot('TOKEN') + + +# AdvancedCustomFilter is for list, string filter values +class MainFilter(util.AdvancedCustomFilter): + key='text' + @staticmethod + def check(message, text): + return message.text in text + +# SimpleCustomFilter is for boolean values, such as is_admin=True +class IsAdmin(util.SimpleCustomFilter): + key='is_admin' + @staticmethod + def check(message: telebot.types.Message): + if bot.get_chat_member(message.chat.id,message.from_user.id).status in ['administrator','creator']: + return True + else: + return False + + +@bot.message_handler(is_admin=True, commands=['admin']) # Check if user is admin +def admin_rep(message): + bot.send_message(message.chat.id, "Hi admin") + +@bot.message_handler(is_admin=False, commands=['admin']) # If user is not admin +def not_admin(message): + bot.send_message(message.chat.id, "You are not admin") + +@bot.message_handler(text=['hi']) # Response to hi message +def welcome_hi(message): + bot.send_message(message.chat.id, 'You said hi') + +@bot.message_handler(text=['bye']) # Response to bye message +def bye_user(message): + bot.send_message(message.chat.id, 'You said bye') + + +# Do not forget to register filters +bot.add_custom_filter(MainFilter) +bot.add_custom_filter(IsAdmin) + +bot.polling(skip_pending=True) # Skip old updates \ No newline at end of file diff --git a/telebot/__init__.py b/telebot/__init__.py index e379435..5816cdf 100644 --- a/telebot/__init__.py +++ b/telebot/__init__.py @@ -3140,9 +3140,9 @@ class TeleBot: filter_check = self.custom_filters.get(message_filter) if not filter_check: return False - elif isinstance(filter_check, util.SimpleCustomFilter): + elif isinstance(filter_check(), util.SimpleCustomFilter): return filter_value == filter_check.check(message) - elif isinstance(filter_check, util.AdvancedCustomFilter): + elif isinstance(filter_check(), util.AdvancedCustomFilter): return filter_check.check(message, filter_value) else: logger.error("Custom filter: wrong type. Should be SimpleCustomFilter or AdvancedCustomFilter.")