diff --git a/maxapi/bot.py b/maxapi/bot.py index 1c0d34b..731e7f3 100644 --- a/maxapi/bot.py +++ b/maxapi/bot.py @@ -78,7 +78,8 @@ class Bot(BaseConnection): self, token: str, parse_mode: Optional[ParseMode] = None, - disable_notifications: Optional[bool] = None + disable_notifications: Optional[bool] = None, + auto_requests: bool = True, ): """Инициализирует экземпляр бота с указанным токеном. @@ -86,6 +87,8 @@ class Bot(BaseConnection): :param token: Токен доступа к API бота :param parse_mode: Форматирование по умолчанию :param disable_notifications: Отключение уведомлений при отправке сообщений (по умолчанию игнорируется) + :param auto_requests: Автоматическое заполнение полей chat и from_user в Update + с помощью API запросов если они не заложены как полноценные объекты в Update (по умолчанию True, при False chat и from_user в некоторых событиях будут выдавать None) """ super().__init__() @@ -98,6 +101,7 @@ class Bot(BaseConnection): self.parse_mode = parse_mode self.disable_notifications = disable_notifications + self.auto_requests = auto_requests async def send_message( self, diff --git a/maxapi/methods/types/getted_updates.py b/maxapi/methods/types/getted_updates.py index ceaafb9..7fa8550 100644 --- a/maxapi/methods/types/getted_updates.py +++ b/maxapi/methods/types/getted_updates.py @@ -36,7 +36,10 @@ async def get_update_model(event: dict, bot: 'Bot'): case UpdateType.MESSAGE_CALLBACK: event_object = MessageCallback(**event) - event_object.chat = await bot.get_chat_by_id(event_object.message.recipient.chat_id) + + event_object.chat = await bot.get_chat_by_id(event_object.message.recipient.chat_id) \ + if bot.auto_requests else None + event_object.from_user = event_object.callback.user case UpdateType.MESSAGE_CHAT_CREATED: @@ -45,40 +48,59 @@ async def get_update_model(event: dict, bot: 'Bot'): case UpdateType.MESSAGE_CREATED: event_object = MessageCreated(**event) - event_object.chat = await bot.get_chat_by_id(event_object.message.recipient.chat_id) + + event_object.chat = await bot.get_chat_by_id(event_object.message.recipient.chat_id) \ + if bot.auto_requests else None + event_object.from_user = event_object.message.sender case UpdateType.MESSAGE_EDITED: event_object = MessageEdited(**event) - event_object.chat = await bot.get_chat_by_id(event_object.message.recipient.chat_id) + + event_object.chat = await bot.get_chat_by_id(event_object.message.recipient.chat_id) \ + if bot.auto_requests else None + event_object.from_user = event_object.message.sender case UpdateType.MESSAGE_REMOVED: event_object = MessageRemoved(**event) - event_object.chat = await bot.get_chat_by_id(event_object.chat_id) + + event_object.chat = await bot.get_chat_by_id(event_object.chat_id) \ + if bot.auto_requests else None + event_object.from_user = await bot.get_chat_member( chat_id=event_object.chat_id, user_id=event_object.user_id - ) + ) if bot.auto_requests else None case UpdateType.USER_ADDED: event_object = UserAdded(**event) - event_object.chat = await bot.get_chat_by_id(event_object.chat_id) + + event_object.chat = await bot.get_chat_by_id(event_object.chat_id) \ + if bot.auto_requests else None + event_object.from_user = event_object.user case UpdateType.USER_REMOVED: event_object = UserRemoved(**event) - event_object.chat = await bot.get_chat_by_id(event_object.chat_id) + + event_object.chat = await bot.get_chat_by_id(event_object.chat_id) \ + if bot.auto_requests else None + event_object.from_user = await bot.get_chat_member( chat_id=event_object.chat_id, user_id=event_object.admin_id - ) if event_object.admin_id else None + ) if event_object.admin_id and \ + bot.auto_requests else None if event['update_type'] in (UpdateType.BOT_ADDED, UpdateType.BOT_REMOVED, UpdateType.BOT_STARTED, UpdateType.CHAT_TITLE_CHANGED): - event_object.chat = await bot.get_chat_by_id(event_object.chat_id) + + event_object.chat = await bot.get_chat_by_id(event_object.chat_id) \ + if bot.auto_requests else None + event_object.from_user = event_object.user if hasattr(event_object, 'bot'):