diff --git a/telebot/__init__.py b/telebot/__init__.py index 4c4996a..6e4ef40 100644 --- a/telebot/__init__.py +++ b/telebot/__init__.py @@ -1285,16 +1285,23 @@ class TeleBot: while i < len(new_messages): message = new_messages[i] chat_id = message.chat.id + was_poped = False if chat_id in self.next_step_handlers.keys(): handlers = self.next_step_handlers[chat_id] - for handler in handlers: - self._exec_task(handler["callback"], message, *handler["args"], **handler["kwargs"]) + if (handlers): + for handler in handlers: + self._exec_task(handler["callback"], message, *handler["args"], **handler["kwargs"]) + new_messages.pop(i) # removing message that detects with next_step_handler + was_poped = True self.next_step_handlers.pop(chat_id, None) new_messages.pop(i) # removing message that detects with next_step_handler if self.next_step_saver is not None: self.next_step_saver.start_save_timer() i += 1 + if (not was_poped): + i += 1 + @staticmethod def _build_handler_dict(handler, **filters): @@ -1486,254 +1493,256 @@ class AsyncTeleBot(TeleBot): def __init__(self, *args, **kwargs): TeleBot.__init__(self, *args, **kwargs) - @util.async() + @util.async_dec() def enable_save_next_step_handlers(self, delay=120, filename="./.handler-saves/step.save", del_file_after_loading=True): return TeleBot.enable_save_next_step_handlers(self, delay, filename, del_file_after_loading) - @util.async() + @util.async_dec() def enable_save_reply_handlers(self, delay=120, filename="./.handler-saves/reply.save", del_file_after_loading=True): return TeleBot.enable_save_reply_handlers(self, delay, filename, del_file_after_loading) - @util.async() + @util.async_dec() def disable_save_next_step_handlers(self): return TeleBot.disable_save_next_step_handlers(self) - @util.async() + @util.async_dec() def disable_save_reply_handlers(self): return TeleBot.enable_save_reply_handlers(self) - @util.async() + @util.async_dec() def load_next_step_handlers(self, filename="./.handler-saves/step.save"): return TeleBot.load_next_step_handlers(self, filename) - @util.async() + @util.async_dec() def load_reply_handlers(self, filename="./.handler-saves/reply.save"): return TeleBot.load_reply_handlers(self, filename) - @util.async() + @util.async_dec() + + @util.async_dec() def get_me(self): return TeleBot.get_me(self) - @util.async() + @util.async_dec() def get_file(self, *args): return TeleBot.get_file(self, *args) - @util.async() + @util.async_dec() def download_file(self, *args): return TeleBot.download_file(self, *args) - @util.async() + @util.async_dec() def get_user_profile_photos(self, *args, **kwargs): return TeleBot.get_user_profile_photos(self, *args, **kwargs) - @util.async() + @util.async_dec() def get_chat(self, *args): return TeleBot.get_chat(self, *args) - @util.async() + @util.async_dec() def leave_chat(self, *args): return TeleBot.leave_chat(self, *args) - @util.async() + @util.async_dec() def get_chat_administrators(self, *args): return TeleBot.get_chat_administrators(self, *args) - @util.async() + @util.async_dec() def get_chat_members_count(self, *args): return TeleBot.get_chat_members_count(self, *args) - @util.async() + @util.async_dec() def set_chat_sticker_set(self, *args): return TeleBot.set_chat_sticker_set(self, *args) - @util.async() + @util.async_dec() def delete_chat_sticker_set(self, *args): return TeleBot.delete_chat_sticker_set(self, *args) - @util.async() + @util.async_dec() def get_chat_member(self, *args): return TeleBot.get_chat_member(self, *args) - @util.async() + @util.async_dec() def send_message(self, *args, **kwargs): return TeleBot.send_message(self, *args, **kwargs) - @util.async() + @util.async_dec() def forward_message(self, *args, **kwargs): return TeleBot.forward_message(self, *args, **kwargs) - @util.async() + @util.async_dec() def delete_message(self, *args): return TeleBot.delete_message(self, *args) - @util.async() + @util.async_dec() def send_photo(self, *args, **kwargs): return TeleBot.send_photo(self, *args, **kwargs) - @util.async() + @util.async_dec() def send_audio(self, *args, **kwargs): return TeleBot.send_audio(self, *args, **kwargs) - @util.async() + @util.async_dec() def send_voice(self, *args, **kwargs): return TeleBot.send_voice(self, *args, **kwargs) - @util.async() + @util.async_dec() def send_document(self, *args, **kwargs): return TeleBot.send_document(self, *args, **kwargs) - @util.async() + @util.async_dec() def send_sticker(self, *args, **kwargs): return TeleBot.send_sticker(self, *args, **kwargs) - @util.async() + @util.async_dec() def send_video(self, *args, **kwargs): return TeleBot.send_video(self, *args, **kwargs) - @util.async() + @util.async_dec() def send_video_note(self, *args, **kwargs): return TeleBot.send_video_note(self, *args, **kwargs) - @util.async() + @util.async_dec() def send_media_group(self, *args, **kwargs): return TeleBot.send_media_group(self, *args, **kwargs) - @util.async() + @util.async_dec() def send_location(self, *args, **kwargs): return TeleBot.send_location(self, *args, **kwargs) - @util.async() + @util.async_dec() def edit_message_live_location(self, *args, **kwargs): return TeleBot.edit_message_live_location(self, *args, **kwargs) - @util.async() + @util.async_dec() def stop_message_live_location(self, *args, **kwargs): return TeleBot.stop_message_live_location(self, *args, **kwargs) - @util.async() + @util.async_dec() def send_venue(self, *args, **kwargs): return TeleBot.send_venue(self, *args, **kwargs) - @util.async() + @util.async_dec() def send_contact(self, *args, **kwargs): return TeleBot.send_contact(self, *args, **kwargs) - @util.async() + @util.async_dec() def send_chat_action(self, *args, **kwargs): return TeleBot.send_chat_action(self, *args, **kwargs) - @util.async() + @util.async_dec() def kick_chat_member(self, *args, **kwargs): return TeleBot.kick_chat_member(self, *args, **kwargs) - @util.async() + @util.async_dec() def unban_chat_member(self, *args): return TeleBot.unban_chat_member(self, *args) - @util.async() + @util.async_dec() def restrict_chat_member(self, *args, **kwargs): return TeleBot.restrict_chat_member(self, *args, **kwargs) - @util.async() + @util.async_dec() def promote_chat_member(self, *args, **kwargs): return TeleBot.promote_chat_member(self, *args, **kwargs) - @util.async() + @util.async_dec() def export_chat_invite_link(self, *args): return TeleBot.export_chat_invite_link(self, *args) - @util.async() + @util.async_dec() def set_chat_photo(self, *args): return TeleBot.set_chat_photo(self, *args) - @util.async() + @util.async_dec() def delete_chat_photo(self, *args): return TeleBot.delete_chat_photo(self, *args) - @util.async() + @util.async_dec() def set_chat_title(self, *args): return TeleBot.set_chat_title(self, *args) - @util.async() + @util.async_dec() def set_chat_description(self, *args): return TeleBot.set_chat_description(self, *args) - @util.async() + @util.async_dec() def pin_chat_message(self, *args, **kwargs): return TeleBot.pin_chat_message(self, *args, **kwargs) - @util.async() + @util.async_dec() def unpin_chat_message(self, *args): return TeleBot.unpin_chat_message(self, *args) - @util.async() + @util.async_dec() def edit_message_text(self, *args, **kwargs): return TeleBot.edit_message_text(self, *args, **kwargs) - @util.async() + @util.async_dec() def edit_message_reply_markup(self, *args, **kwargs): return TeleBot.edit_message_reply_markup(self, *args, **kwargs) - @util.async() + @util.async_dec() def send_game(self, *args, **kwargs): return TeleBot.send_game(self, *args, **kwargs) - @util.async() + @util.async_dec() def set_game_score(self, *args, **kwargs): return TeleBot.set_game_score(self, *args, **kwargs) - @util.async() + @util.async_dec() def get_game_high_scores(self, *args, **kwargs): return TeleBot.get_game_high_scores(self, *args, **kwargs) - @util.async() + @util.async_dec() def send_invoice(self, *args, **kwargs): return TeleBot.send_invoice(self, *args, **kwargs) - @util.async() + @util.async_dec() def answer_shipping_query(self, *args, **kwargs): return TeleBot.answer_shipping_query(self, *args, **kwargs) - @util.async() + @util.async_dec() def answer_pre_checkout_query(self, *args, **kwargs): return TeleBot.answer_pre_checkout_query(self, *args, **kwargs) - @util.async() + @util.async_dec() def edit_message_caption(self, *args, **kwargs): return TeleBot.edit_message_caption(self, *args, **kwargs) - @util.async() + @util.async_dec() def answer_inline_query(self, *args, **kwargs): return TeleBot.answer_inline_query(self, *args, **kwargs) - @util.async() + @util.async_dec() def answer_callback_query(self, *args, **kwargs): return TeleBot.answer_callback_query(self, *args, **kwargs) - @util.async() + @util.async_dec() def send_sticker(self, *args, **kwargs): return TeleBot.send_sticker(self, *args, **kwargs) - @util.async() + @util.async_dec() def get_sticker_set(self, *args, **kwargs): return TeleBot.get_sticker_set(self, *args, **kwargs) - @util.async() + @util.async_dec() def upload_sticker_file(self, *args, **kwargs): return TeleBot.upload_sticker_file(self, *args, **kwargs) - @util.async() + @util.async_dec() def create_new_sticker_set(self, *args, **kwargs): return TeleBot.create_new_sticker_set(self, *args, **kwargs) - @util.async() + @util.async_dec() def add_sticker_to_set(self, *args, **kwargs): return TeleBot.add_sticker_to_set(self, *args, **kwargs) - @util.async() + @util.async_dec() def set_sticker_position_in_set(self, *args, **kwargs): return TeleBot.set_sticker_position_in_set(self, *args, **kwargs) - @util.async() + @util.async_dec() def delete_sticker_from_set(self, *args, **kwargs): return TeleBot.delete_sticker_from_set(self, *args, **kwargs) diff --git a/telebot/types.py b/telebot/types.py index d958908..5ca1b4e 100644 --- a/telebot/types.py +++ b/telebot/types.py @@ -437,8 +437,7 @@ class Message(JsonDeserializable): setattr(self, key, options[key]) self.json = json_string - @property - def html_text(self): + def __html_text(self, text, entities): """ Author: @sviat9440 Message: "*Test* parse _formatting_, [url](https://example.com), [text_mention](tg://user?id=123456) and mention @username" @@ -455,19 +454,20 @@ class Message(JsonDeserializable): >> "Test parse formatting, url and text_mention and mention @username" """ - if not self.entities: - return self.text + if not entities: + return text _subs = { "bold": "{text}", "italic": "{text}", "pre": "
{text}", "code": "
{text}
",
- "url": "{text}"
+ "url": "{text}",
+ "text_link": "{text}"
}
if hasattr(self, "custom_subs"):
for type in self.custom_subs:
_subs[type] = self.custom_subs[type]
- utf16_text = self.text.encode("utf-16-le")
+ utf16_text = text.encode("utf-16-le")
html_text = ""
def func(text, type=None, url=None, user=None):
text = text.decode("utf-16-le")
@@ -483,7 +483,7 @@ class Message(JsonDeserializable):
return subs.format(text=text, url=url)
offset = 0
- for entity in self.entities:
+ for entity in entities:
if entity.offset > offset:
html_text += func(utf16_text[offset * 2 : entity.offset * 2])
offset = entity.offset
@@ -493,6 +493,13 @@ class Message(JsonDeserializable):
html_text += func(utf16_text[offset * 2:])
return html_text
+ @property
+ def html_text(self):
+ return self.__html_text(self.text, self.entities)
+
+ @property
+ def html_caption(self):
+ return self.__html_text(self.caption, self.caption_entities)
class MessageEntity(JsonDeserializable):
@classmethod
diff --git a/telebot/util.py b/telebot/util.py
index 769f73b..f448d78 100644
--- a/telebot/util.py
+++ b/telebot/util.py
@@ -143,7 +143,7 @@ class AsyncTask:
return self.result
-def async():
+def async_dec():
def decorator(fn):
def wrapper(*args, **kwargs):
return AsyncTask(fn, *args, **kwargs)