Добавил настройку для Bot() : auto_requests

This commit is contained in:
Денис Семёнов 2025-06-21 20:12:19 +03:00
parent de684aa200
commit 8f5fc9f398
2 changed files with 36 additions and 10 deletions

View File

@ -78,7 +78,8 @@ class Bot(BaseConnection):
self, self,
token: str, token: str,
parse_mode: Optional[ParseMode] = None, 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 token: Токен доступа к API бота
:param parse_mode: Форматирование по умолчанию :param parse_mode: Форматирование по умолчанию
:param disable_notifications: Отключение уведомлений при отправке сообщений (по умолчанию игнорируется) :param disable_notifications: Отключение уведомлений при отправке сообщений (по умолчанию игнорируется)
:param auto_requests: Автоматическое заполнение полей chat и from_user в Update
с помощью API запросов если они не заложены как полноценные объекты в Update (по умолчанию True, при False chat и from_user в некоторых событиях будут выдавать None)
""" """
super().__init__() super().__init__()
@ -98,6 +101,7 @@ class Bot(BaseConnection):
self.parse_mode = parse_mode self.parse_mode = parse_mode
self.disable_notifications = disable_notifications self.disable_notifications = disable_notifications
self.auto_requests = auto_requests
async def send_message( async def send_message(
self, self,

View File

@ -36,7 +36,10 @@ async def get_update_model(event: dict, bot: 'Bot'):
case UpdateType.MESSAGE_CALLBACK: case UpdateType.MESSAGE_CALLBACK:
event_object = MessageCallback(**event) 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 event_object.from_user = event_object.callback.user
case UpdateType.MESSAGE_CHAT_CREATED: case UpdateType.MESSAGE_CHAT_CREATED:
@ -45,40 +48,59 @@ async def get_update_model(event: dict, bot: 'Bot'):
case UpdateType.MESSAGE_CREATED: case UpdateType.MESSAGE_CREATED:
event_object = MessageCreated(**event) 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 event_object.from_user = event_object.message.sender
case UpdateType.MESSAGE_EDITED: case UpdateType.MESSAGE_EDITED:
event_object = MessageEdited(**event) 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 event_object.from_user = event_object.message.sender
case UpdateType.MESSAGE_REMOVED: case UpdateType.MESSAGE_REMOVED:
event_object = MessageRemoved(**event) 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( event_object.from_user = await bot.get_chat_member(
chat_id=event_object.chat_id, chat_id=event_object.chat_id,
user_id=event_object.user_id user_id=event_object.user_id
) ) if bot.auto_requests else None
case UpdateType.USER_ADDED: case UpdateType.USER_ADDED:
event_object = UserAdded(**event) 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 event_object.from_user = event_object.user
case UpdateType.USER_REMOVED: case UpdateType.USER_REMOVED:
event_object = UserRemoved(**event) 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( event_object.from_user = await bot.get_chat_member(
chat_id=event_object.chat_id, chat_id=event_object.chat_id,
user_id=event_object.admin_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, if event['update_type'] in (UpdateType.BOT_ADDED,
UpdateType.BOT_REMOVED, UpdateType.BOT_REMOVED,
UpdateType.BOT_STARTED, UpdateType.BOT_STARTED,
UpdateType.CHAT_TITLE_CHANGED): 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 event_object.from_user = event_object.user
if hasattr(event_object, 'bot'): if hasattr(event_object, 'bot'):