diff --git a/telebot/__init__.py b/telebot/__init__.py index 1eb496f..c18f7dc 100644 --- a/telebot/__init__.py +++ b/telebot/__init__.py @@ -2741,6 +2741,14 @@ class TeleBot: """ self.add_middleware_handler(callback, update_types) + def __check_commands_input(self, commands, method_name): + if not isinstance(commands, list) or not all(isinstance(item, str) for item in commands): + logger.error(f"{method_name}: Commands filter should be list of strings (commands), unknown type supplied to the 'commands' filter list. Not able to use the supplied type.") + + def __check_regexp_input(self, regexp, method_name): + if not isinstance(regexp, str): + logger.error(f"{method_name}: Regexp filter should be string. Not able to use the supplied type.") + def message_handler(self, commands=None, regexp=None, func=None, content_types=None, chat_types=None, **kwargs): """ Message handler decorator. @@ -2783,9 +2791,13 @@ class TeleBot: if content_types is None: content_types = ["text"] - if isinstance(commands, str): - logger.warning("message_handler: 'commands' filter should be List of strings (commands), not string.") - commands = [commands] + method_name = "message_handler" + + if commands is not None: + self.__check_commands_input(commands, method_name) + + if regexp is not None: + self.__check_regexp_input(regexp, method_name) if isinstance(content_types, str): logger.warning("message_handler: 'content_types' filter should be List of strings (content types), not string.") @@ -2824,9 +2836,13 @@ class TeleBot: :param pass_bot: Pass TeleBot to handler. :return: decorated function """ - if isinstance(commands, str): - logger.warning("register_message_handler: 'commands' filter should be List of strings (commands), not string.") - commands = [commands] + method_name = "register_message_handler" + + if commands is not None: + self.__check_commands_input(commands, method_name) + + if regexp is not None: + self.__check_regexp_input(regexp, method_name) if isinstance(content_types, str): logger.warning("register_message_handler: 'content_types' filter should be List of strings (content types), not string.") @@ -2856,9 +2872,13 @@ class TeleBot: if content_types is None: content_types = ["text"] - if isinstance(commands, str): - logger.warning("edited_message_handler: 'commands' filter should be List of strings (commands), not string.") - commands = [commands] + method_name = "edited_message_handler" + + if commands is not None: + self.__check_commands_input(commands, method_name) + + if regexp is not None: + self.__check_regexp_input(regexp, method_name) if isinstance(content_types, str): logger.warning("edited_message_handler: 'content_types' filter should be List of strings (content types), not string.") @@ -2897,9 +2917,13 @@ class TeleBot: :param pass_bot: Pass TeleBot to handler. :return: decorated function """ - if isinstance(commands, str): - logger.warning("register_edited_message_handler: 'commands' filter should be List of strings (commands), not string.") - commands = [commands] + method_name = "register_edited_message_handler" + + if commands is not None: + self.__check_commands_input(commands, method_name) + + if regexp is not None: + self.__check_regexp_input(regexp, method_name) if isinstance(content_types, str): logger.warning("register_edited_message_handler: 'content_types' filter should be List of strings (content types), not string.") @@ -2929,9 +2953,13 @@ class TeleBot: if content_types is None: content_types = ["text"] - if isinstance(commands, str): - logger.warning("channel_post_handler: 'commands' filter should be List of strings (commands), not string.") - commands = [commands] + method_name = "channel_post_handler" + + if commands is not None: + self.__check_commands_input(commands, method_name) + + if regexp is not None: + self.__check_regexp_input(regexp, method_name) if isinstance(content_types, str): logger.warning("channel_post_handler: 'content_types' filter should be List of strings (content types), not string.") @@ -2968,9 +2996,13 @@ class TeleBot: :param pass_bot: Pass TeleBot to handler. :return: decorated function """ - if isinstance(commands, str): - logger.warning("register_channel_post_handler: 'commands' filter should be List of strings (commands), not string.") - commands = [commands] + method_name = "register_channel_post_handler" + + if commands is not None: + self.__check_commands_input(commands, method_name) + + if regexp is not None: + self.__check_regexp_input(regexp, method_name) if isinstance(content_types, str): logger.warning("register_channel_post_handler: 'content_types' filter should be List of strings (content types), not string.") @@ -2998,9 +3030,13 @@ class TeleBot: if content_types is None: content_types = ["text"] - if isinstance(commands, str): - logger.warning("edited_channel_post_handler: 'commands' filter should be List of strings (commands), not string.") - commands = [commands] + method_name = "edited_channel_post_handler" + + if commands is not None: + self.__check_commands_input(commands, method_name) + + if regexp is not None: + self.__check_regexp_input(regexp, method_name) if isinstance(content_types, str): logger.warning("edited_channel_post_handler: 'content_types' filter should be List of strings (content types), not string.") @@ -3037,9 +3073,13 @@ class TeleBot: :param pass_bot: Pass TeleBot to handler. :return: decorated function """ - if isinstance(commands, str): - logger.warning("register_edited_channel_post_handler: 'commands' filter should be List of strings (commands), not string.") - commands = [commands] + method_name = "register_edited_channel_post_handler" + + if commands is not None: + self.__check_commands_input(commands, method_name) + + if regexp is not None: + self.__check_regexp_input(regexp, method_name) if isinstance(content_types, str): logger.warning("register_edited_channel_post_handler: 'content_types' filter should be List of strings (content types), not string.")