diff --git a/README.md b/README.md index 09e45a7..a68a957 100644 --- a/README.md +++ b/README.md @@ -167,6 +167,7 @@ TeleBot supports the following filters: |content_types|list of strings (default `['text']`)|`True` if message.content_type is in the list of strings.| |regexp|a regular expression as a string|`True` if `re.search(regexp_arg)` returns `True` and `message.content_type == 'text'` (See [Python Regular Expressions](https://docs.python.org/2/library/re.html))| |commands|list of strings|`True` if `message.content_type == 'text'` and `message.text` starts with a command that is in the list of strings.| +|chat_types|list of chat types|`True` if `message.chat.type` in your filter |func|a function (lambda or function reference)|`True` if the lambda or function reference returns `True` Here are some examples of using the filters and message handlers: diff --git a/telebot/__init__.py b/telebot/__init__.py index 49a24ca..504e515 100644 --- a/telebot/__init__.py +++ b/telebot/__init__.py @@ -2476,7 +2476,7 @@ class TeleBot: else: self.default_middleware_handlers.append(handler) - def message_handler(self, commands=None, regexp=None, func=None, content_types=None, **kwargs): + def message_handler(self, commands=None, regexp=None, func=None, content_types=None, chat_types=None, **kwargs): """ Message handler decorator. This decorator can be used to decorate functions that must handle certain types of messages. @@ -2491,6 +2491,11 @@ class TeleBot: def command_help(message): bot.send_message(message.chat.id, 'Did someone call for help?') + # Handles messages in private chat + @bot.message_handler(chat_types=['private']) # You can add more chat types + def command_help(message): + bot.send_message(message.chat.id, 'Private chat detected, sir!') + # Handle all sent documents of type 'text/plain'. @bot.message_handler(func=lambda message: message.document.mime_type == 'text/plain', content_types=['document']) @@ -2508,6 +2513,7 @@ class TeleBot: :param func: Optional lambda function. The lambda receives the message to test as the first parameter. It must return True if the command should handle the message. :param content_types: Supported message content types. Must be a list. Defaults to ['text']. + :param chat_types: list of chat types """ if content_types is None: @@ -2518,6 +2524,7 @@ class TeleBot: content_types=content_types, commands=commands, regexp=regexp, + chat_types=chat_types, func=func, **kwargs) self.add_message_handler(handler_dict) @@ -2533,7 +2540,7 @@ class TeleBot: """ self.message_handlers.append(handler_dict) - def register_message_handler(self, callback, content_types=None, commands=None, regexp=None, func=None, **kwargs): + def register_message_handler(self, callback, content_types=None, commands=None, regexp=None, func=None, chat_types=None, **kwargs): """ Registers message handler. :param callback: function to be called @@ -2541,6 +2548,7 @@ class TeleBot: :param commands: list of commands :param regexp: :param func: + :param chat_types: True for private chat :return: decorated function """ handler_dict = self._build_handler_dict(callback, @@ -2548,15 +2556,17 @@ class TeleBot: commands=commands, regexp=regexp, func=func, + chat_types=chat_types, **kwargs) self.add_message_handler(handler_dict) - def edited_message_handler(self, commands=None, regexp=None, func=None, content_types=None, **kwargs): + def edited_message_handler(self, commands=None, regexp=None, func=None, content_types=None, chat_types=None, **kwargs): """ Edit message handler decorator :param commands: :param regexp: :param func: :param content_types: + :param chat_types: list of chat types :param kwargs: :return: """ @@ -2570,6 +2580,7 @@ class TeleBot: regexp=regexp, func=func, content_types=content_types, + chat_types=chat_types, **kwargs) self.add_edited_message_handler(handler_dict) return handler @@ -2584,7 +2595,7 @@ class TeleBot: """ self.edited_message_handlers.append(handler_dict) - def register_edited_message_handler(self, callback, content_types=None, commands=None, regexp=None, func=None, **kwargs): + def register_edited_message_handler(self, callback, content_types=None, commands=None, regexp=None, func=None, chat_types=None, **kwargs): """ Registers edited message handler. :param callback: function to be called @@ -2592,6 +2603,7 @@ class TeleBot: :param commands: list of commands :param regexp: :param func: + :param chat_types: True for private chat :return: decorated function """ handler_dict = self._build_handler_dict(callback, @@ -2599,6 +2611,7 @@ class TeleBot: commands=commands, regexp=regexp, func=func, + chat_types=chat_types, **kwargs) self.add_edited_message_handler(handler_dict) def channel_post_handler(self, commands=None, regexp=None, func=None, content_types=None, **kwargs): @@ -3046,6 +3059,8 @@ class TeleBot: return message.content_type == 'text' and re.search(filter_value, message.text, re.IGNORECASE) elif message_filter == 'commands': return message.content_type == 'text' and util.extract_command(message.text) in filter_value + elif message_filter == 'chat_types': + return message.chat.type in filter_value elif message_filter == 'func': return filter_value(message) else: