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

MessageCallback

Message

Bases: BaseModel, BotMixin, PeerShortcutMixin, ChatActionShortcutMixin

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

Attributes:

Name Type Description
sender User | None

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

recipient Recipient

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

timestamp int

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

link LinkedMessage | None

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

body MessageBody | None

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

stat MessageStat | None

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

url str | None

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

bot Any | None

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

url property

Прямая ссылка на сообщение в интерфейсе MAX.

Для каналов возвращается ссылка, полученная от API. Для диалогов и групповых чатов ссылка строится из body.mid.

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.

None
attachments list[Attachment | InputMedia | InputMediaBuffer | AttachmentUpload] | None

Список вложений. Может быть None.

None
link NewMessageLink | None

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

None
format TextFormat | None

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

None
parse_mode ParseMode | None

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

None
notify bool | None

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

None
disable_link_preview bool | None

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

None
sleep_after_input_media bool | None

Флаг задержки после отправки вложений типа 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: Текст ответа. Может быть None.
        attachments: Список вложений. Может быть None.
        link: Связь с другим сообщением.
            Может быть None.
        format: Режим форматирования текста.
            Может быть None.
        parse_mode: Режим форматирования текста.
            Может быть None.
        notify: Флаг отправки уведомления. По умолчанию True.
        disable_link_preview: Флаг генерации превью.
        sleep_after_input_media: Флаг задержки
            после отправки вложений типа InputMedia. По умолчанию True.

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

    return await self.send(
        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.

None
attachments list[Attachment | InputMedia | InputMediaBuffer | AttachmentUpload] | None

Список вложений. Может быть None.

None
notify bool | None

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

None
format TextFormat | None

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

None
parse_mode ParseMode | None

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

None
disable_link_preview bool | None

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

None
sleep_after_input_media bool | None

Флаг задержки после отправки вложений типа InputMedia. По умолчанию 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: Текст ответа. Может быть None.
        attachments: Список вложений. Может быть None.
        notify: Флаг отправки уведомления. По умолчанию True.
        format: Режим форматирования текста.
            Может быть None.
        parse_mode: Режим форматирования текста.
            Может быть None.
        disable_link_preview: Флаг генерации превью.
        sleep_after_input_media: Флаг задержки
            после отправки вложений типа InputMedia. По умолчанию 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 | None

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

required
user_id int | None

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

None
attachments list[Attachment | InputMedia | InputMediaBuffer | AttachmentUpload] | None

Список вложений. Может быть None.

None
notify bool | None

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

None
format TextFormat | None

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

None
parse_mode ParseMode | None

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

None
disable_link_preview bool | None

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

None
sleep_after_input_media bool | None

Флаг задержки после отправки вложений типа InputMedia. По умолчанию 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: ID чата для отправки (обязателен, если не
            указан user_id)
        user_id: ID пользователя для отправки (обязателен,
            если не указан chat_id). По умолчанию None
        attachments: Список вложений. Может быть None.
        notify: Флаг отправки уведомления. По умолчанию True.
        format: Режим форматирования
            текста. Может быть None.
        parse_mode: Режим форматирования
            текста. Может быть None.
        disable_link_preview: Флаг генерации превью.
        sleep_after_input_media: Флаг задержки
            после отправки вложений типа InputMedia. По умолчанию 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.

None
attachments list[Attachment | InputMedia | InputMediaBuffer | AttachmentUpload] | list[Attachments] | None

Новые вложения. Может быть None.

None
link NewMessageLink | None

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

None
format TextFormat | None

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

None
parse_mode ParseMode | None

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

None
notify bool

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

True
sleep_after_input_media bool | None

Флаг задержки после отправки вложений типа 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: Новый текст сообщения. Может быть None.
        attachments: Новые вложения. Может быть None.
        link: Новая связь с сообщением.
            Может быть None.
        format: Режим форматирования текста.
            Может быть None.
        parse_mode: Режим форматирования текста.
            Может быть None.
        notify: Флаг отправки уведомления. По умолчанию True.
        sleep_after_input_media: Флаг задержки
            после отправки вложений типа 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: Флаг отправки уведомления. По умолчанию 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,
    )

unpin() async

Снимает закрепленное сообщение в чате текущего сообщения.

Returns:

Name Type Description
DeletedPinMessage DeletedPinMessage

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

Source code in maxapi/types/message.py
async def unpin(self) -> DeletedPinMessage:
    """
    Снимает закрепленное сообщение в чате текущего сообщения.

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

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

    return await self._ensure_bot().delete_pin_message(
        chat_id=self.recipient.chat_id,
    )

MessageForCallback

Bases: BaseModel

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

Attributes:

Name Type Description
text str | None

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

attachments list[AttachmentInput] | None

Список вложений. None означает, что поле не будет отправлено в callback-ответе; пустой список очищает вложения.

link NewMessageLink | None

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

notify bool | None

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

format ParseMode | None

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

MessageCallback

Bases: BaseUpdate

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

Attributes:

Name Type Description
message Message | None

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

user_locale str | None

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

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

ack(notification=None) async

Подтвердить callback без изменения исходного сообщения.

Source code in maxapi/types/updates/message_callback.py
async def ack(
    self,
    notification: str | None = None,
) -> SendedCallback:
    """Подтвердить callback без изменения исходного сообщения."""

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

defer(notification=None) async

Семантический alias для ack().

Source code in maxapi/types/updates/message_callback.py
async def defer(
    self,
    notification: str | None = None,
) -> SendedCallback:
    """Семантический alias для ack()."""

    return await self.ack(notification=notification)

edit(text=None, attachments=None, link=None, format=None, *, notification=None, notify=True, raise_if_not_exists=True) async

Изменить сообщение, связанное с callback.

Parameters:

Name Type Description Default
text str | None

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

None
attachments Sequence[AttachmentInput] | None

Вложения для сообщения. None сохраняет вложения исходного сообщения, пустой список очищает их, непустой список заменяет существующие вложения.

None
link NewMessageLink | None

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

None
format ParseMode | None

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

None
notification str | None

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

None
notify bool

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

True
raise_if_not_exists bool

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

True

Returns:

Name Type Description
SendedCallback SendedCallback

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

Source code in maxapi/types/updates/message_callback.py
async def edit(
    self,
    text: str | None = None,
    attachments: Sequence[AttachmentInput] | None = None,
    link: NewMessageLink | None = None,
    format: ParseMode | None = None,
    *,
    notification: str | None = None,
    notify: bool = True,
    raise_if_not_exists: bool = True,
) -> SendedCallback:
    """
    Изменить сообщение, связанное с callback.

    Args:
        text: Новый текст сообщения.
        attachments: Вложения для сообщения. None сохраняет вложения
            исходного сообщения, пустой список очищает их, непустой список
            заменяет существующие вложения.
        link: Связь с другим сообщением.
        format: Режим разбора текста.
        notification: Текст уведомления.
        notify: Отправлять ли уведомление.
        raise_if_not_exists: Выдавать ошибку при отсутствии сообщения,
            если пытаются изменить его содержимое.

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

    message = self.message
    original_body = None if message is None else message.body

    if original_body is None:
        if raise_if_not_exists and (
            text is not None
            or attachments is not None
            or link is not None
            or format is not None
        ):
            raise ValueError(
                "Невозможно изменить сообщение: "
                "исходное сообщение отсутствует"
            )

        return await self.ack(notification=notification)

    bot = self._ensure_bot()
    resolved_attachments: Sequence[AttachmentInput]
    if attachments is None:
        resolved_attachments = original_body.attachments or []
    else:
        resolved_attachments = attachments

    message_for_callback = MessageForCallback(
        text=text,
        attachments=list(resolved_attachments),
        link=link,
        notify=notify,
        format=bot.resolve_format(format),
    )

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

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

Отправить новое сообщение в тот же peer, откуда пришел callback.

Source code in maxapi/types/updates/message_callback.py
async def send(
    self,
    text: str | None = None,
    attachments: list[AttachmentInput] | 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:
    """Отправить новое сообщение в тот же peer, откуда пришел callback."""

    return await self._require_message().send(
        text=text,
        attachments=attachments,
        link=link,
        format=format,
        parse_mode=parse_mode,
        notify=notify,
        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

Отправить reply на исходное сообщение callback.

Source code in maxapi/types/updates/message_callback.py
async def reply(
    self,
    text: str | None = None,
    attachments: list[AttachmentInput] | 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:
    """Отправить reply на исходное сообщение callback."""

    return await self._require_message().reply(
        text=text,
        attachments=attachments,
        format=format,
        parse_mode=parse_mode,
        notify=notify,
        disable_link_preview=disable_link_preview,
        sleep_after_input_media=sleep_after_input_media,
    )

delete() async

Удалить исходное сообщение callback.

Source code in maxapi/types/updates/message_callback.py
async def delete(self) -> DeletedMessage:
    """Удалить исходное сообщение callback."""

    return await self._require_message().delete()

pin(*, notify=True) async

Закрепить исходное сообщение callback.

Source code in maxapi/types/updates/message_callback.py
async def pin(self, *, notify: bool = True) -> PinnedMessage:
    """Закрепить исходное сообщение callback."""

    return await self._require_message().pin(notify=notify)

unpin() async

Снять закрепление сообщения callback.

Source code in maxapi/types/updates/message_callback.py
async def unpin(self) -> DeletedPinMessage:
    """Снять закрепление сообщения callback."""

    return await self._require_message().unpin()

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

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

Parameters:

Name Type Description Default
notification str | None

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

None
new_text str | None

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

None
attachments Sequence[AttachmentInput] | None

Вложения для сообщения. None сохраняет вложения исходного сообщения, пустой список очищает их, непустой список заменяет существующие вложения.

None
link NewMessageLink | None

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

None
notify bool

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

True
format ParseMode | None

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

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,
    attachments: Sequence[AttachmentInput] | None = None,
    link: NewMessageLink | None = None,
    format: ParseMode | None = None,
    *,
    notify: bool = True,
    raise_if_not_exists: bool = True,
) -> SendedCallback:
    """
    Отправляет ответ на callback с возможностью изменить текст
    и параметры уведомления.

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

    Returns:
        SendedCallback: Результат вызова send_callback бота.
    """
    return await self.edit(
        text=new_text,
        attachments=attachments,
        link=link,
        format=format,
        notification=notification,
        notify=notify,
        raise_if_not_exists=raise_if_not_exists,
    )