Перейти к содержанию

Updates Module

enrich_event(event_object, bot) async

Дополняет объект события данными чата, пользователя и ссылкой на бота.

Parameters:

Name Type Description Default
event_object Any

Событие, которое нужно дополнить.

required
bot Bot

Экземпляр бота.

required

Returns:

Name Type Description
Any Any

Обновлённый объект события.

Source code in maxapi/utils/updates.py
async def enrich_event(event_object: Any, bot: Bot) -> Any:
    """
    Дополняет объект события данными чата, пользователя и ссылкой на бота.

    Args:
        event_object (Any): Событие, которое нужно дополнить.
        bot (Bot): Экземпляр бота.

    Returns:
        Any: Обновлённый объект события.
    """

    if not bot.auto_requests:
        return event_object

    # Определяем заранее: чат недоступен (удалён или бот убран из канала)
    is_chat_unavailable = isinstance(event_object, DialogRemoved) or (
        isinstance(event_object, BotRemoved)
        and getattr(event_object, "is_channel", False)
    )

    if hasattr(event_object, "chat_id"):
        # Если чат недоступен — не пытаемся его получить
        if not is_chat_unavailable:
            event_object.chat = await bot.get_chat_by_id(event_object.chat_id)
        else:
            event_object.chat = None

    if isinstance(event_object, (MessageCreated, MessageEdited)):
        recipient = event_object.message.recipient
        if recipient.chat_id is not None and event_object.chat is None:
            event_object.chat = await bot.get_chat_by_id(recipient.chat_id)

        event_object.from_user = getattr(event_object.message, "sender", None)

    elif isinstance(event_object, MessageCallback):
        message = event_object.message
        if message is not None and message.recipient.chat_id is not None:
            chat_id = message.recipient.chat_id
            if event_object.chat is None:
                event_object.chat = await bot.get_chat_by_id(chat_id)

        event_object.from_user = getattr(event_object.callback, "user", None)

    elif isinstance(event_object, MessageRemoved):
        if event_object.chat is None:
            event_object.chat = await bot.get_chat_by_id(event_object.chat_id)

        if event_object.chat and event_object.chat.type == ChatType.CHAT:
            event_object.from_user = await bot.get_chat_member(
                chat_id=event_object.chat_id, user_id=event_object.user_id
            )

        elif event_object.chat and event_object.chat.type == ChatType.DIALOG:
            event_object.from_user = event_object.chat

    elif isinstance(event_object, UserRemoved):
        if event_object.chat is None:
            event_object.chat = await bot.get_chat_by_id(event_object.chat_id)
        if event_object.admin_id:
            event_object.from_user = await bot.get_chat_member(
                chat_id=event_object.chat_id, user_id=event_object.admin_id
            )

    elif isinstance(
        event_object,
        (
            UserAdded,
            BotAdded,
            BotRemoved,
            BotStarted,
            ChatTitleChanged,
            BotStopped,
            DialogCleared,
            DialogMuted,
            DialogUnmuted,
        ),
    ):
        if event_object.chat is None and not is_chat_unavailable:
            event_object.chat = await bot.get_chat_by_id(event_object.chat_id)
        event_object.from_user = event_object.user

    elif isinstance(event_object, DialogRemoved):
        # Чат уже удалён — получить его невозможно
        event_object.from_user = event_object.user

    if isinstance(
        event_object, (MessageCreated, MessageEdited, MessageCallback)
    ):
        object_message = event_object.message

        if object_message is not None:
            object_message.bot = bot
            if object_message.body is not None:
                for att in object_message.body.attachments or []:
                    if hasattr(att, "bot"):
                        att.bot = bot

    if hasattr(event_object, "bot"):
        event_object.bot = bot

    return event_object