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

MessageCallback

Message

Bases: BaseModel, BotMixin

Модель сообщения.

Attributes:

Name Type Description
sender Optional[User]

Отправитель сообщения, может быть None, если сообщение отправлено каналом https://github.com/love-apples/maxapi/discussions/14.

recipient Recipient

Получатель сообщения.

timestamp int

Временная метка сообщения.

link Optional[LinkedMessage]

Связанное сообщение. Может быть None.

body Optional[MessageBody]

Содержимое сообщения. Текст + вложения. Может быть null, если сообщение содержит только пересланное сообщение

stat Optional[MessageStat]

Статистика сообщения. Может быть None.

url Optional[str]

URL сообщения. Может быть None.

bot Optional[Bot]

Объект бота, исключается из сериализации.

answer(text=None, attachments=None, link=None, format=None, parse_mode=None, *, notify=None, disable_link_preview=None, sleep_after_input_media=True) async

Отправляет сообщение (автозаполнение chat_id, user_id).

Parameters:

Name Type Description Default
text str

Текст ответа. Может быть None.

None
link NewMessageLink

Связь с другим сообщением. Может быть None.

None
format TextFormat

Режим форматирования текста. Может быть None.

None
parse_mode ParseMode

Режим форматирования текста. Может быть None.

None
notify bool

Флаг отправки уведомления. По умолчанию True.

None
disable_link_preview bool

Флаг генерации превью.

None
sleep_after_input_media bool

Флаг задержки после отправки вложений типа InputMedia. По умолчанию True.

True

Returns:

Type Description
SendedMessage | None

Optional[SendedMessage]: Результат выполнения метода send_message бота.

Source code in maxapi/types/message.py
async def answer(
    self,
    text: str | None = None,
    attachments: list[
        Attachment | InputMedia | InputMediaBuffer | AttachmentUpload
    ]
    | None = None,
    link: NewMessageLink | None = None,
    format: TextFormat | None = None,
    parse_mode: ParseMode | None = None,
    *,
    notify: bool | None = None,
    disable_link_preview: bool | None = None,
    sleep_after_input_media: bool | None = True,
) -> SendedMessage | None:
    """
    Отправляет сообщение (автозаполнение chat_id, user_id).

    Args:
        text (str, optional): Текст ответа. Может быть None.
        attachments (List[Attachment | InputMedia | InputMediaBuffer
            | AttachmentUpload], optional): Список вложений.
            Может быть None.
        link (NewMessageLink, optional): Связь с другим сообщением.
            Может быть None.
        format (TextFormat, optional): Режим форматирования текста.
            Может быть None.
        parse_mode (ParseMode, optional): Режим форматирования текста.
            Может быть None.
        notify (bool): Флаг отправки уведомления. По умолчанию True.
        disable_link_preview (bool, optional): Флаг генерации превью.
        sleep_after_input_media (bool, optional): Флаг задержки
            после отправки вложений типа InputMedia. По умолчанию True.

    Returns:
        Optional[SendedMessage]: Результат выполнения метода
            send_message бота.
    """

    return await self._ensure_bot().send_message(
        chat_id=self.recipient.chat_id,
        user_id=self.recipient.user_id,
        text=text,
        attachments=attachments,
        link=link,
        notify=notify,
        format=format,
        parse_mode=parse_mode,
        disable_link_preview=disable_link_preview,
        sleep_after_input_media=sleep_after_input_media,
    )

reply(text=None, attachments=None, format=None, parse_mode=None, *, notify=None, disable_link_preview=None, sleep_after_input_media=True) async

Отправляет ответное сообщение (автозаполнение chat_id, user_id, link).

Parameters:

Name Type Description Default
text str

Текст ответа. Может быть None.

None
notify bool

Флаг отправки уведомления. По умолчанию True.

None
format TextFormat

Режим форматирования текста. Может быть None.

None
parse_mode ParseMode

Режим форматирования текста. Может быть None.

None
disable_link_preview bool

Флаг генерации превью.

None
sleep_after_input_media bool | None

Optional[bool] = True,

True

Returns:

Type Description
SendedMessage | None

Optional[SendedMessage]: Результат выполнения метода send_message бота.

Source code in maxapi/types/message.py
async def reply(
    self,
    text: str | None = None,
    attachments: list[
        Attachment | InputMedia | InputMediaBuffer | AttachmentUpload
    ]
    | None = None,
    format: TextFormat | None = None,
    parse_mode: ParseMode | None = None,
    *,
    notify: bool | None = None,
    disable_link_preview: bool | None = None,
    sleep_after_input_media: bool | None = True,
) -> SendedMessage | None:
    """
    Отправляет ответное сообщение (автозаполнение chat_id, user_id, link).

    Args:
        text (str, optional): Текст ответа. Может быть None.
        attachments (List[Attachment | InputMedia | InputMediaBuffer
            | AttachmentUpload], optional): Список вложений.
            Может быть None.
        notify (bool): Флаг отправки уведомления. По умолчанию True.
        format (TextFormat, optional): Режим форматирования текста.
            Может быть None.
        parse_mode (ParseMode, optional): Режим форматирования текста.
            Может быть None.
        disable_link_preview (bool, optional): Флаг генерации превью.
        sleep_after_input_media: Optional[bool] = True,

    Returns:
        Optional[SendedMessage]: Результат выполнения метода
            send_message бота.
    """

    if self.body is None:
        msg = "Невозможно ответить: поле body отсутствует у сообщения"
        raise ValueError(msg)

    if self.recipient.chat_id is None:
        msg = "Невозможно ответить: chat_id отсутствует"
        raise ValueError(msg)

    return await self._ensure_bot().send_message(
        chat_id=self.recipient.chat_id,
        user_id=self.recipient.user_id,
        text=text,
        attachments=attachments,
        link=NewMessageLink(type=MessageLinkType.REPLY, mid=self.body.mid),
        notify=notify,
        format=format,
        parse_mode=parse_mode,
        disable_link_preview=disable_link_preview,
        sleep_after_input_media=sleep_after_input_media,
    )

forward(chat_id, user_id=None, attachments=None, format=None, parse_mode=None, *, notify=None, disable_link_preview=None, sleep_after_input_media=True) async

Пересылает отправленное сообщение в указанный чат. (автозаполнение link)

Parameters:

Name Type Description Default
chat_id int

ID чата для отправки (обязателен, если не указан user_id)

required
user_id int

ID пользователя для отправки (обязателен, если не указан chat_id). По умолчанию None

None
notify bool

Флаг отправки уведомления. По умолчанию True.

None
format TextFormat

Режим форматирования текста. Может быть None.

None
parse_mode ParseMode

Режим форматирования текста. Может быть None.

None
disable_link_preview bool

Флаг генерации превью.

None
sleep_after_input_media bool | None

Optional[bool] = True,

True

Returns:

Type Description
SendedMessage | None

Optional[SendedMessage]: Результат выполнения метода send_message бота.

Source code in maxapi/types/message.py
async def forward(
    self,
    chat_id: int | None,
    user_id: int | None = None,
    attachments: list[
        Attachment | InputMedia | InputMediaBuffer | AttachmentUpload
    ]
    | None = None,
    format: TextFormat | None = None,
    parse_mode: ParseMode | None = None,
    *,
    notify: bool | None = None,
    disable_link_preview: bool | None = None,
    sleep_after_input_media: bool | None = True,
) -> SendedMessage | None:
    """
    Пересылает отправленное сообщение в указанный чат.
    (автозаполнение link)

    Args:
        chat_id (int): ID чата для отправки (обязателен, если не
            указан user_id)
        user_id (int): ID пользователя для отправки (обязателен,
            если не указан chat_id). По умолчанию None
        attachments (List[Attachment | InputMedia | InputMediaBuffer
            | AttachmentUpload], optional): Список вложений.
            Может быть None.
        notify (bool): Флаг отправки уведомления. По умолчанию True.
        format (TextFormat, optional): Режим форматирования
            текста. Может быть None.
        parse_mode (ParseMode, optional): Режим форматирования
            текста. Может быть None.
        disable_link_preview (bool, optional): Флаг генерации превью.
        sleep_after_input_media: Optional[bool] = True,

    Returns:
        Optional[SendedMessage]: Результат выполнения метода
            send_message бота.
    """

    if self.body is None:
        msg = "Невозможно переслать: поле body отсутствует у сообщения"
        raise ValueError(msg)

    return await self._ensure_bot().send_message(
        chat_id=chat_id,
        user_id=user_id,
        attachments=attachments,
        link=NewMessageLink(
            type=MessageLinkType.FORWARD, mid=self.body.mid
        ),
        notify=notify,
        format=format,
        parse_mode=parse_mode,
        disable_link_preview=disable_link_preview,
        sleep_after_input_media=sleep_after_input_media,
    )

edit(text=None, attachments=None, link=None, format=None, parse_mode=None, *, notify=True, sleep_after_input_media=True) async

Редактирует текущее сообщение.

Parameters:

Name Type Description Default
text str

Новый текст сообщения. Может быть None.

None
link NewMessageLink

Новая связь с сообщением. Может быть None.

None
format TextFormat

Режим форматирования текста. Может быть None.

None
parse_mode ParseMode

Режим форматирования текста. Может быть None.

None
notify bool

Флаг отправки уведомления. По умолчанию True.

True
sleep_after_input_media bool

Флаг задержки после отправки вложений типа InputMedia. По умолчанию True.

True

Returns: Optional[EditedMessage]: Результат выполнения метода edit_message бота.

Source code in maxapi/types/message.py
async def edit(
    self,
    text: str | None = None,
    attachments: list[
        Attachment | InputMedia | InputMediaBuffer | AttachmentUpload
    ]
    | list[Attachments]
    | None = None,
    link: NewMessageLink | None = None,
    format: TextFormat | None = None,
    parse_mode: ParseMode | None = None,
    *,
    notify: bool = True,
    sleep_after_input_media: bool | None = True,
) -> EditedMessage | None:
    """
    Редактирует текущее сообщение.

    Args:
        text (str, optional): Новый текст сообщения. Может быть None.
        attachments (List[Attachment | InputMedia | InputMediaBuffer |
            AttachmentUpload], optional): Новые вложения. Может быть None.
        link (NewMessageLink, optional): Новая связь с сообщением.
            Может быть None.
        format (TextFormat, optional): Режим форматирования текста.
            Может быть None.
        parse_mode (ParseMode, optional): Режим форматирования текста.
            Может быть None.
        notify (bool): Флаг отправки уведомления. По умолчанию True.
        sleep_after_input_media (bool, optional): Флаг задержки
            после отправки вложений типа InputMedia. По умолчанию True.
    Returns:
        Optional[EditedMessage]: Результат выполнения метода
            edit_message бота.
    """

    if link is None and self.link:
        link = NewMessageLink(
            type=self.link.type, mid=self.link.message.mid
        )

    if (
        attachments is None
        and self.body is not None
        and self.body.attachments
    ):
        attachments = self.body.attachments

    if self.body is None:
        msg = "Невозможно редактировать: поле body отсутствует у сообщения"
        raise ValueError(msg)

    return await self._ensure_bot().edit_message(
        message_id=self.body.mid,
        text=text,
        attachments=attachments,
        link=link,
        notify=notify,
        format=format,
        parse_mode=parse_mode,
        sleep_after_input_media=sleep_after_input_media,
    )

delete() async

Удаляет текущее сообщение.

Returns:

Name Type Description
DeletedMessage DeletedMessage

Результат выполнения метода delete_message бота.

Source code in maxapi/types/message.py
async def delete(self) -> DeletedMessage:
    """
    Удаляет текущее сообщение.

    Returns:
        DeletedMessage: Результат выполнения метода delete_message бота.
    """

    if self.body is None:
        msg = "Невозможно удалить: поле body отсутствует у сообщения"
        raise ValueError(msg)

    return await self._ensure_bot().delete_message(
        message_id=self.body.mid,
    )

pin(*, notify=True) async

Закрепляет текущее сообщение в чате.

Parameters:

Name Type Description Default
notify bool

Флаг отправки уведомления. По умолчанию True.

True

Returns:

Name Type Description
PinnedMessage PinnedMessage

Результат выполнения метода pin_message бота.

Source code in maxapi/types/message.py
async def pin(self, *, notify: bool = True) -> PinnedMessage:
    """
    Закрепляет текущее сообщение в чате.

    Args:
        notify (bool): Флаг отправки уведомления. По умолчанию True.

    Returns:
        PinnedMessage: Результат выполнения метода pin_message бота.
    """

    if self.body is None:
        msg = "Невозможно закрепить: поле body отсутствует у сообщения"
        raise ValueError(msg)

    if self.recipient.chat_id is None:
        raise ValueError("chat_id не может быть None")

    return await self._ensure_bot().pin_message(
        chat_id=self.recipient.chat_id,
        message_id=self.body.mid,
        notify=notify,
    )

MessageForCallback

Bases: BaseModel

Модель сообщения для ответа на callback-запрос.

Attributes:

Name Type Description
text Optional[str]

Текст сообщения.

link Optional[NewMessageLink]

Связь с другим сообщением.

notify Optional[bool]

Отправлять ли уведомление.

format Optional[ParseMode]

Режим разбора текста.

MessageCallback

Bases: BaseUpdate

Обновление с callback-событием сообщения.

Attributes:

Name Type Description
message Optional[Message]

Изначальное сообщение, содержащее встроенную клавиатуру. Может быть null, если оно было удалено к моменту, когда бот получил это обновление.

user_locale Optional[str]

Локаль пользователя.

callback Callback

Объект callback.

get_ids()

Возвращает кортеж идентификаторов (chat_id, user_id).

Returns:

Type Description
tuple[int | None, int]

tuple[Optional[int], int]: Идентификаторы чата и пользователя.

Source code in maxapi/types/updates/message_callback.py
def get_ids(self) -> tuple[int | None, int]:
    """
    Возвращает кортеж идентификаторов (chat_id, user_id).

    Returns:
        tuple[Optional[int], int]: Идентификаторы чата и пользователя.
    """

    chat_id: int | None = None
    if self.message is not None:
        chat_id = self.message.recipient.chat_id

    return chat_id, self.callback.user.user_id

answer(notification=None, new_text=None, link=None, format=None, *, notify=True, raise_if_not_exists=True) async

Отправляет ответ на callback с возможностью изменить текст, вложения и параметры уведомления.

Parameters:

Name Type Description Default
notification str

Текст уведомления.

None
new_text Optional[str]

Новый текст сообщения.

None
link Optional[NewMessageLink]

Связь с другим сообщением.

None
notify bool

Отправлять ли уведомление.

True
format Optional[ParseMode]

Режим разбора текста.

None
raise_if_not_exists bool

Выдавать ошибку при отсутствии сообщения, если пытаются изменить его содержимое (new_text/link/format).

True

Returns:

Name Type Description
SendedCallback SendedCallback

Результат вызова send_callback бота.

Source code in maxapi/types/updates/message_callback.py
async def answer(
    self,
    notification: str | None = None,
    new_text: str | None = None,
    link: NewMessageLink | None = None,
    format: ParseMode | None = None,
    *,
    notify: bool = True,
    raise_if_not_exists: bool = True,
) -> "SendedCallback":
    """
    Отправляет ответ на callback с возможностью изменить текст,
    вложения и параметры уведомления.

    Args:
        notification (str): Текст уведомления.
        new_text (Optional[str]): Новый текст сообщения.
        link (Optional[NewMessageLink]): Связь с другим сообщением.
        notify (bool): Отправлять ли уведомление.
        format (Optional[ParseMode]): Режим разбора текста.
        raise_if_not_exists: Выдавать ошибку при отсутствии сообщения,
            если пытаются изменить его содержимое (new_text/link/format).

    Returns:
        SendedCallback: Результат вызова send_callback бота.
    """

    # Если исходного сообщения нет (например, оно удалено),
    # не стоит синтезировать пустой payload message.
    # Два варианта поведения:
    #  - если вызывающий просит изменить сообщение (new_text/link/format)
    #    => выбросить исключение
    #  - иначе отправить только notification с message=None,
    #  чтобы API не получил пустой объект message
    original_body = None
    if self.message is not None:
        original_body = self.message.body

    if original_body is None:
        # если пытаются изменить контент/вложение/связь
        if raise_if_not_exists and (
            new_text is not None or link is not None or format is not None
        ):
            raise ValueError(
                "Невозможно изменить сообщение: "
                "исходное сообщение отсутствует"
            )

        # отправляем только уведомление (без поля message)
        return await self._ensure_bot().send_callback(
            callback_id=self.callback.callback_id,
            message=None,
            notification=notification,
        )

    # Если исходное сообщение есть —
    # собираем MessageForCallback на его основе
    message_for_callback = MessageForCallback()
    message_for_callback.text = new_text

    attachments: list[Attachments] = original_body.attachments or []

    message_for_callback.attachments = attachments
    message_for_callback.link = link
    message_for_callback.notify = notify
    message_for_callback.format = format

    return await self._ensure_bot().send_callback(
        callback_id=self.callback.callback_id,
        message=message_for_callback,
        notification=notification,
    )