Skip to content

Commit 8e3c9d8

Browse files
committed
Add edited message handler.
1 parent 0b9f91c commit 8e3c9d8

File tree

2 files changed

+48
-7
lines changed

2 files changed

+48
-7
lines changed

telebot/__init__.py

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ def __init__(self, token, threaded=True, skip_pending=False):
6666
self.pre_message_subscribers_next_step = {}
6767

6868
self.message_handlers = []
69+
self.edited_message_handlers = []
6970
self.inline_handlers = []
7071
self.chosen_inline_handlers = []
7172
self.callback_query_handlers = []
@@ -123,6 +124,7 @@ def __retrieve_updates(self, timeout=20):
123124

124125
def process_new_updates(self, updates):
125126
new_messages = []
127+
edited_new_messages = []
126128
new_inline_querys = []
127129
new_chosen_inline_results = []
128130
new_callback_querys = []
@@ -131,6 +133,8 @@ def process_new_updates(self, updates):
131133
self.last_update_id = update.update_id
132134
if update.message:
133135
new_messages.append(update.message)
136+
if update.edited_message:
137+
edited_new_messages.append(update.edited_message)
134138
if update.inline_query:
135139
new_inline_querys.append(update.inline_query)
136140
if update.chosen_inline_result:
@@ -140,6 +144,8 @@ def process_new_updates(self, updates):
140144
logger.debug('Received {0} new updates'.format(len(updates)))
141145
if len(new_messages) > 0:
142146
self.process_new_messages(new_messages)
147+
if len(edited_new_messages) > 0:
148+
self.process_new_edited_messages(edited_new_messages)
143149
if len(new_inline_querys) > 0:
144150
self.process_new_inline_query(new_inline_querys)
145151
if len(new_chosen_inline_results) > 0:
@@ -154,6 +160,9 @@ def process_new_messages(self, new_messages):
154160
self._notify_message_subscribers(new_messages)
155161
self._notify_message_next_handler(new_messages)
156162

163+
def process_new_edited_messages(self, edited_message):
164+
self._notify_command_handlers(self.edited_message_handlers, edited_message)
165+
157166
def process_new_inline_query(self, new_inline_querys):
158167
self._notify_command_handlers(self.inline_handlers, new_inline_querys)
159168

@@ -305,7 +314,7 @@ def get_chat_members_count(self, chat_id):
305314
return result
306315

307316
def get_chat_member(self, chat_id, user_id):
308-
result = apihelper.get_chat_member(self.token, chat_id,user_id)
317+
result = apihelper.get_chat_member(self.token, chat_id, user_id)
309318
return types.ChatMember.de_json(result)
310319

311320
def send_message(self, chat_id, text, disable_web_page_preview=None, reply_to_message_id=None, reply_markup=None,
@@ -388,7 +397,8 @@ def send_voice(self, chat_id, voice, duration=None, reply_to_message_id=None, re
388397
apihelper.send_voice(self.token, chat_id, voice, duration, reply_to_message_id, reply_markup,
389398
disable_notification, timeout))
390399

391-
def send_document(self, chat_id, data, reply_to_message_id=None, caption=None, reply_markup=None, disable_notification=None, timeout=None):
400+
def send_document(self, chat_id, data, reply_to_message_id=None, caption=None, reply_markup=None,
401+
disable_notification=None, timeout=None):
392402
"""
393403
Use this method to send general files.
394404
:param chat_id:
@@ -401,7 +411,8 @@ def send_document(self, chat_id, data, reply_to_message_id=None, caption=None, r
401411
apihelper.send_data(self.token, chat_id, data, 'document', reply_to_message_id, reply_markup,
402412
disable_notification, timeout, caption=caption))
403413

404-
def send_sticker(self, chat_id, data, reply_to_message_id=None, reply_markup=None, disable_notification=None, timeout=None):
414+
def send_sticker(self, chat_id, data, reply_to_message_id=None, reply_markup=None, disable_notification=None,
415+
timeout=None):
405416
"""
406417
Use this method to send .webp stickers.
407418
:param chat_id:
@@ -502,8 +513,8 @@ def answer_callback_query(self, callback_query_id, text=None, show_alert=None):
502513
def edit_message_text(self, text, chat_id=None, message_id=None, inline_message_id=None, parse_mode=None,
503514
disable_web_page_preview=None, reply_markup=None):
504515
result = apihelper.edit_message_text(self.token, text, chat_id, message_id, inline_message_id, parse_mode,
505-
disable_web_page_preview, reply_markup)
506-
if type(result) == bool: # if edit inline message return is bool not Message.
516+
disable_web_page_preview, reply_markup)
517+
if type(result) == bool: # if edit inline message return is bool not Message.
507518
return result
508519
return types.Message.de_json(result)
509520

@@ -670,6 +681,32 @@ def add_message_handler(self, handler, commands=None, regexp=None, func=None, co
670681

671682
self.message_handlers.append(handler_dict)
672683

684+
def edited_message_handler(self, commands=None, regexp=None, func=None, content_types=['text']):
685+
def decorator(handler):
686+
self.add_edited_message_handler(handler, commands, regexp, func, content_types)
687+
return handler
688+
689+
return decorator
690+
691+
def add_edited_message_handler(self, handler, commands=None, regexp=None, func=None, content_types=None):
692+
if content_types is None:
693+
content_types = ['text']
694+
695+
filters = {'content_types': content_types}
696+
if regexp:
697+
filters['regexp'] = regexp
698+
if func:
699+
filters['lambda'] = func
700+
if commands:
701+
filters['commands'] = commands
702+
703+
handler_dict = {
704+
'function': handler,
705+
'filters': filters
706+
}
707+
708+
self.edited_message_handlers.append(handler_dict)
709+
673710
def inline_handler(self, func):
674711
def decorator(handler):
675712
self.add_inline_handler(handler, func)

telebot/types.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,21 +91,25 @@ def de_json(cls, json_type):
9191
obj = cls.check_json(json_type)
9292
update_id = obj['update_id']
9393
message = None
94+
edited_message = None
9495
inline_query = None
9596
chosen_inline_result = None
9697
callback_query = None
9798
if 'message' in obj:
9899
message = Message.de_json(obj['message'])
100+
if 'edited_message' in obj:
101+
edited_message = Message.de_json(obj['edited_message'])
99102
if 'inline_query' in obj:
100103
inline_query = InlineQuery.de_json(obj['inline_query'])
101104
if 'chosen_inline_result' in obj:
102105
chosen_inline_result = ChosenInlineResult.de_json(obj['chosen_inline_result'])
103106
if 'callback_query' in obj:
104107
callback_query = CallbackQuery.de_json(obj['callback_query'])
105-
return cls(update_id, message, inline_query, chosen_inline_result, callback_query)
108+
return cls(update_id, message, edited_message, inline_query, chosen_inline_result, callback_query)
106109

107-
def __init__(self, update_id, message, inline_query, chosen_inline_result, callback_query):
110+
def __init__(self, update_id, message, edited_message, inline_query, chosen_inline_result, callback_query):
108111
self.update_id = update_id
112+
self.edited_message = edited_message
109113
self.message = message
110114
self.inline_query = inline_query
111115
self.chosen_inline_result = chosen_inline_result

0 commit comments

Comments
 (0)