diff --git a/docs/source/api/bound-methods.rst b/docs/source/api/bound-methods.rst index e6729da6..83b3dbbe 100644 --- a/docs/source/api/bound-methods.rst +++ b/docs/source/api/bound-methods.rst @@ -81,13 +81,13 @@ CallbackQuery ^^^^^^^^^^^^^ .. hlist:: - :columns: 4 + :columns: 3 - :meth:`~CallbackQuery.answer` - - :meth:`~CallbackQuery.edit_text` - - :meth:`~CallbackQuery.edit_caption` - - :meth:`~CallbackQuery.edit_media` - - :meth:`~CallbackQuery.edit_reply_markup` + - :meth:`~CallbackQuery.edit_message_text` + - :meth:`~CallbackQuery.edit_message_caption` + - :meth:`~CallbackQuery.edit_message_media` + - :meth:`~CallbackQuery.edit_message_reply_markup` InlineQuery ^^^^^^^^^^^ @@ -141,10 +141,10 @@ Details .. CallbackQuery .. automethod:: CallbackQuery.answer() -.. automethod:: CallbackQuery.edit_text() -.. automethod:: CallbackQuery.edit_caption() -.. automethod:: CallbackQuery.edit_media() -.. automethod:: CallbackQuery.edit_reply_markup() +.. automethod:: CallbackQuery.edit_message_text() +.. automethod:: CallbackQuery.edit_message_caption() +.. automethod:: CallbackQuery.edit_message_media() +.. automethod:: CallbackQuery.edit_message_reply_markup() .. InlineQuery .. automethod:: InlineQuery.answer() diff --git a/pyrogram/client/ext/dispatcher.py b/pyrogram/client/ext/dispatcher.py index 8b32e076..92b1d640 100644 --- a/pyrogram/client/ext/dispatcher.py +++ b/pyrogram/client/ext/dispatcher.py @@ -22,7 +22,6 @@ from collections import OrderedDict import pyrogram from pyrogram.api import types - from . import utils from ..handlers import ( CallbackQueryHandler, MessageHandler, DeletedMessagesHandler, @@ -63,6 +62,8 @@ class Dispatcher: self.updates_queue = asyncio.Queue() self.groups = OrderedDict() + self.lock = asyncio.Lock() + async def message_parser(update, users, chats): return await pyrogram.Message._parse(self.client, update.message, users, chats), MessageHandler @@ -113,17 +114,19 @@ class Dispatcher: log.info("Stopped {} UpdateWorkerTasks".format(self.workers)) def add_handler(self, handler, group: int): - if group not in self.groups: - self.groups[group] = [] - self.groups = OrderedDict(sorted(self.groups.items())) + with self.lock: + if group not in self.groups: + self.groups[group] = [] + self.groups = OrderedDict(sorted(self.groups.items())) - self.groups[group].append(handler) + self.groups[group].append(handler) def remove_handler(self, handler, group: int): - if group not in self.groups: - raise ValueError("Group {} does not exist. Handler was not removed.".format(group)) + with self.lock: + if group not in self.groups: + raise ValueError("Group {} does not exist. Handler was not removed.".format(group)) - self.groups[group].remove(handler) + self.groups[group].remove(handler) async def update_worker(self): while True: @@ -142,29 +145,30 @@ class Dispatcher: else (None, type(None)) ) - for group in self.groups.values(): - for handler in group: - args = None + with self.lock: + for group in self.groups.values(): + for handler in group: + args = None - if isinstance(handler, handler_type): - if handler.check(parsed_update): - args = (parsed_update,) - elif isinstance(handler, RawUpdateHandler): - args = (update, users, chats) + if isinstance(handler, handler_type): + if handler.check(parsed_update): + args = (parsed_update,) + elif isinstance(handler, RawUpdateHandler): + args = (update, users, chats) - if args is None: - continue + if args is None: + continue - try: - await handler.callback(self.client, *args) - except pyrogram.StopPropagation: - raise - except pyrogram.ContinuePropagation: - continue - except Exception as e: - log.error(e, exc_info=True) + try: + await handler.callback(self.client, *args) + except pyrogram.StopPropagation: + raise + except pyrogram.ContinuePropagation: + continue + except Exception as e: + log.error(e, exc_info=True) - break + break except pyrogram.StopPropagation: pass except Exception as e: diff --git a/pyrogram/client/types/bots_and_keyboards/callback_query.py b/pyrogram/client/types/bots_and_keyboards/callback_query.py index daecaa35..4ab0ccc2 100644 --- a/pyrogram/client/types/bots_and_keyboards/callback_query.py +++ b/pyrogram/client/types/bots_and_keyboards/callback_query.py @@ -173,14 +173,14 @@ class CallbackQuery(Object, Update): cache_time=cache_time ) - def edit_text( + def edit_message_text( self, text: str, parse_mode: str = "", disable_web_page_preview: bool = None, reply_markup: "pyrogram.InlineKeyboardMarkup" = None ) -> Union["pyrogram.Message", bool]: - """Edit the text of messages attached to this callback query. + """Edit the text of messages attached to callback queries. Bound method *edit_message_text* of :obj:`CallbackQuery`. @@ -223,13 +223,13 @@ class CallbackQuery(Object, Update): reply_markup=reply_markup ) - def edit_caption( + def edit_message_caption( self, caption: str, parse_mode: str = "", reply_markup: "pyrogram.InlineKeyboardMarkup" = None ) -> Union["pyrogram.Message", bool]: - """Edit the caption of media messages attached to this callback query. + """Edit the caption of media messages attached to callback queries. Bound method *edit_message_caption* of :obj:`CallbackQuery`. @@ -251,14 +251,14 @@ class CallbackQuery(Object, Update): Raises: RPCError: In case of a Telegram RPC error. """ - return self.edit_text(caption, parse_mode, reply_markup) + return self.edit_message_text(caption, parse_mode, reply_markup) - def edit_media( + def edit_message_media( self, media: "pyrogram.InputMedia", reply_markup: "pyrogram.InlineKeyboardMarkup" = None ) -> Union["pyrogram.Message", bool]: - """Edit animation, audio, document, photo or video messages attached to this callback query. + """Edit animation, audio, document, photo or video messages attached to callback queries. Bound method *edit_message_media* of :obj:`CallbackQuery`. @@ -290,11 +290,11 @@ class CallbackQuery(Object, Update): reply_markup=reply_markup ) - def edit_reply_markup( + def edit_message_reply_markup( self, reply_markup: "pyrogram.InlineKeyboardMarkup" = None ) -> Union["pyrogram.Message", bool]: - """Edit only the reply markup of messages attached to this callback query. + """Edit only the reply markup of messages attached to callback queries. Bound method *edit_message_reply_markup* of :obj:`CallbackQuery`.