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

Package: maxapi.types

maxapi.types

Command(commands, prefix='/', *, check_case=False, ignore_symbol_at_sign=False, only_with_bot_username=False)

Bases: BaseFilter

Фильтр сообщений на соответствие команде.

Parameters:

Name Type Description Default
commands str | List[str]

Ожидаемая команда или список команд без префикса.

required
prefix str

Префикс команды (по умолчанию '/').

'/'
check_case bool

Учитывать регистр при сравнении (по умолчанию False).

False
ignore_symbol_at_sign bool

Учитывать символ "@" при отправке команды с упоминанием бота (по умолчанию False).

False
only_with_bot_username bool

Обязательно упоминать бота при отправке команды (по умолчанию False).

False

Инициализация фильтра команд.

Source code in maxapi/filters/command.py
def __init__(
    self,
    commands: str | list[str],
    prefix: str = "/",
    *,
    check_case: bool = False,
    ignore_symbol_at_sign: bool = False,
    only_with_bot_username: bool = False,
):
    """
    Инициализация фильтра команд.
    """

    if isinstance(commands, str):
        self.commands = [commands]
    else:
        self.commands = commands

    self.prefix = prefix
    self.check_case = check_case
    self.ignore_symbol_at_sign = ignore_symbol_at_sign
    self.only_with_bot_username = only_with_bot_username

    if not check_case:
        self.commands = [cmd.lower() for cmd in self.commands]

parse_command(text, bot_username)

Извлекает команду из текста.

Parameters:

Name Type Description Default
text str

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

required
bot_username str

Имя пользователя бота.

required

Returns:

Type Description
tuple[str, list[str]]

Tuple[str, List[str]]: Кортеж из команды без префикса и списка аргументов, либо ('', []) если команда не найдена или текст не соответствует формату.

Source code in maxapi/filters/command.py
def parse_command(
    self, text: str, bot_username: str
) -> tuple[str, list[str]]:
    """
    Извлекает команду из текста.

    Args:
        text (str): Текст сообщения.
        bot_username (str): Имя пользователя бота.

    Returns:
        Tuple[str, List[str]]: Кортеж из команды без префикса и
            списка аргументов, либо ('', []) если команда не найдена
            или текст не соответствует формату.
    """

    if not text.strip():
        return "", []

    args = text.split()

    if not args:
        return "", []

    first = args[0]

    if self.ignore_symbol_at_sign and first == bot_username:
        first = "@" + first

    if first.startswith("@"):
        if len(args) < 2:
            return "", []

        if first[1:] != bot_username:
            return "", []

        command_part = args[1]

        if not command_part.startswith(self.prefix):
            return "", []

        command = command_part[len(self.prefix) :]
        arguments = args[2:]

    else:
        if self.only_with_bot_username:
            return "", []

        command_part = first

        if not command_part.startswith(self.prefix):
            return "", []

        command = command_part[len(self.prefix) :]
        arguments = args[1:]

    return command, arguments

__call__(event) async

Проверяет, соответствует ли сообщение заданной(ым) команде(ам).

Parameters:

Name Type Description Default
event MessageCreated

Событие сообщения.

required

Returns:

Type Description
dict[str, list[str]] | bool

dict | bool: dict с аргументами команды при совпадении, иначе False.

Source code in maxapi/filters/command.py
async def __call__(
    self, event: UpdateUnion
) -> dict[str, list[str]] | bool:
    """
    Проверяет, соответствует ли сообщение заданной(ым) команде(ам).

    Args:
        event (MessageCreated): Событие сообщения.

    Returns:
        dict | bool: dict с аргументами команды при совпадении,
            иначе False.
    """

    if not isinstance(event, MessageCreated):
        return False

    # body может быть None — защитимся от обращения
    body = event.message.body
    if body is None:
        return False

    text = body.text
    if not text:
        return False

    # TODO: временно
    bot_me = event._ensure_bot().me  # noqa: SLF001
    bot_username = ""
    if bot_me:
        bot_username = bot_me.username or ""

    parsed_command, args = self.parse_command(text, bot_username)
    if not parsed_command:
        return False

    if not self.check_case:
        if parsed_command.lower() in [
            commands.lower() for commands in self.commands
        ]:
            return {"args": args}
        else:
            return False

    if parsed_command in self.commands:
        return {"args": args}

    return False

CommandStart(prefix='/', *, check_case=False, ignore_symbol_at_sign=False, only_with_bot_username=False)

Bases: Command

Фильтр для команды /start.

Parameters:

Name Type Description Default
prefix str

Префикс команды (по умолчанию '/').

'/'
check_case bool

Учитывать регистр (по умолчанию False)

False
ignore_symbol_at_sign bool

Учитывать символ "@" при отправке команды с упоминанием бота (по умолчанию False).

False
only_with_bot_username bool

Обязательно упоминать бота при отправке команды (по умолчанию False)..

False
Source code in maxapi/filters/command.py
def __init__(
    self,
    prefix: str = "/",
    *,
    check_case: bool = False,
    ignore_symbol_at_sign: bool = False,
    only_with_bot_username: bool = False,
) -> None:
    super().__init__(
        "start",
        prefix=prefix,
        check_case=check_case,
        ignore_symbol_at_sign=ignore_symbol_at_sign,
        only_with_bot_username=only_with_bot_username,
    )

Attachment

Bases: BaseModel

Универсальный класс вложения с типом и полезной нагрузкой.

Attributes:

Name Type Description
type AttachmentType

Тип вложения.

payload Optional[Union[...]]

Полезная нагрузка, зависит от типа вложения.

ButtonsPayload

Bases: BaseModel

Данные для вложения с кнопками.

Attributes:

Name Type Description
buttons List[List[InlineButtonUnion]]

Двумерный список inline-кнопок.

ContactAttachmentPayload

Bases: BaseModel

Данные для контакта.

Attributes:

Name Type Description
vcf_info Optional[str]

Информация в формате vcf.

max_info Optional[User]

Дополнительная информация о пользователе.

vcf property

Доступ к данным из vcf_info.

OtherAttachmentPayload

Bases: BaseModel

Данные для общих типов вложений (файлы и т.п.).

Attributes:

Name Type Description
url str

URL вложения.

token Optional[str]

Опциональный токен доступа.

PhotoAttachmentPayload

Bases: BaseModel

Данные для фото-вложения.

Attributes:

Name Type Description
photo_id int

Идентификатор фотографии.

token str

Токен для доступа к фото.

url str

URL фотографии.

StickerAttachmentPayload

Bases: BaseModel

Данные для вложения типа стикер.

Attributes:

Name Type Description
url str

URL стикера.

code str

Код стикера.

CallbackButton

Bases: Button

Кнопка с callback-действием.

Attributes:

Name Type Description
type ButtonType

Тип кнопки (фиксированное значение ButtonType.CALLBACK)

text str

Текст, отображаемый на кнопке (наследуется от Button)

payload str | None

Дополнительные данные (до 256 символов), передаваемые при нажатии

intent Intent

Намерение кнопки (визуальный стиль и поведение)

ChatButton(**data)

Bases: Button

.. deprecated:: 0.9.14 Используйте другие типы кнопок.

Attributes:

Name Type Description
text str

Текст кнопки (наследуется от Button)

chat_title str

Название чата (до 128 символов)

chat_description str | None

Описание чата (до 256 символов)

start_payload str | None

Данные, передаваемые при старте чата (до 512 символов)

uuid int | None

Уникальный идентификатор чата

Source code in maxapi/types/attachments/buttons/chat_button.py
def __init__(self, **data):
    super().__init__(**data)
    warnings.warn(
        "ChatButton устарел и будет удален в будущих версиях. "
        "Используйте другие типы кнопок.",
        DeprecationWarning,
        stacklevel=2,
    )

LinkButton

Bases: Button

Кнопка с внешней ссылкой.

Attributes:

Name Type Description
url Optional[str]

Ссылка для перехода (должна содержать http/https)

MessageButton

Bases: Button

Кнопка для отправки текста

Attributes:

Name Type Description
type ButtonType

Тип кнопки (определяет её поведение и функционал)

text str

Отправляемый текст

OpenAppButton

Bases: Button

Кнопка для открытия приложения

Attributes:

Name Type Description
text str

Видимый текст кнопки

web_app str | None

Публичное имя (username) бота или ссылка на него, чьё мини-приложение надо запустить

contact_id int | None

Идентификатор бота, чьё мини-приложение надо запустить

payload str | None

Параметр запуска, который будет передан в initData мини-приложения

RequestContactButton

Bases: Button

Кнопка с контактом

Attributes:

Name Type Description
text str

Текст кнопки

RequestGeoLocationButton

Bases: Button

Кнопка запроса геолокации пользователя.

Attributes:

Name Type Description
quick bool

Если True, запрашивает геолокацию без дополнительного подтверждения пользователя (по умолчанию False)

PhotoAttachmentRequestPayload

Bases: BaseModel

Полезная нагрузка для запроса фото-вложения.

Attributes:

Name Type Description
url Optional[str]

URL изображения.

token Optional[str]

Токен доступа к изображению.

photos Optional[str]

Дополнительные данные о фотографиях.

BotCommand

Bases: BaseModel

Модель команды бота для сериализации.

Attributes:

Name Type Description
name str

Название команды.

description Optional[str]

Описание команды. Может быть None.

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,
    )

Bases: BaseModel

Модель ссылки на новое сообщение.

Attributes:

Name Type Description
type MessageLinkType

Тип связи.

mid str

Идентификатор сообщения.

BotAdded

Bases: BaseUpdate

Обновление, сигнализирующее о добавлении бота в чат.

Attributes:

Name Type Description
chat_id int

Идентификатор чата, куда добавлен бот.

user User

Объект пользователя-бота.

is_channel bool

Указывает, был ли бот добавлен в канал или нет

BotRemoved

Bases: BaseUpdate

Обновление, сигнализирующее об удалении бота из чата.

Attributes:

Name Type Description
chat_id int

Идентификатор чата, из которого удалён бот.

user User

Объект пользователя-бота.

is_channel bool

Указывает, был ли пользователь добавлен в канал или нет

BotStarted

Bases: BaseUpdate

Обновление, сигнализирующее о первом старте бота.

Attributes:

Name Type Description
chat_id int

Идентификатор чата.

user User

Пользователь (бот).

user_locale Optional[str]

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

payload Optional[str]

Дополнительные данные.

BotStopped

Bases: BaseUpdate

Обновление, сигнализирующее об остановке бота.

Attributes:

Name Type Description
chat_id int

Идентификатор чата.

user User

Пользователь (бот).

user_locale Optional[str]

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

payload Optional[str]

Дополнительные данные.

ChatTitleChanged

Bases: BaseUpdate

Обновление, сигнализирующее об изменении названия чата.

Attributes:

Name Type Description
chat_id Optional[int]

Идентификатор чата.

user User

Пользователь, совершивший изменение.

title str

Новое название чата.

DialogCleared

Bases: BaseUpdate

Обновление, сигнализирующее об очистке диалога с ботом.

Attributes:

Name Type Description
chat_id int

Идентификатор чата.

user User

Пользователь (бот).

user_locale Optional[str]

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

DialogMuted

Bases: BaseUpdate

Обновление, сигнализирующее об отключении оповещений от бота.

Attributes:

Name Type Description
chat_id int

Идентификатор чата.

muted_until int

Время до включения оповещений от бота.

user User

Пользователь (бот).

user_locale Optional[str]

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

DialogRemoved

Bases: BaseUpdate

Обновление, сигнализирующее об удалении диалога с ботом.

Attributes:

Name Type Description
chat_id int

Идентификатор чата.

user User

Пользователь (бот).

user_locale Optional[str]

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

DialogUnmuted

Bases: BaseUpdate

Обновление, сигнализирующее о включении оповещений от бота.

Attributes:

Name Type Description
chat_id int

Идентификатор чата.

user User

Пользователь (бот).

user_locale Optional[str]

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

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,
    )

MessageChatCreated(**data)

Bases: BaseUpdate

.. deprecated:: 0.9.14 Это событие устарело и будет удалено в будущих версиях.

Событие создания чата.

Attributes:

Name Type Description
chat Chat

Объект чата.

title Optional[str]

Название чата.

message_id Optional[str]

ID сообщения.

start_payload Optional[str]

Payload для старта.

Source code in maxapi/types/updates/message_chat_created.py
def __init__(self, **data):
    super().__init__(**data)
    warnings.warn(
        "MessageChatCreated устарел и будет удален в будущих версиях.",
        DeprecationWarning,
        stacklevel=2,
    )

MessageCreated

Bases: BaseUpdate

Обновление, сигнализирующее о создании нового сообщения.

Attributes:

Name Type Description
message Message

Объект сообщения.

user_locale Optional[str]

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

get_ids()

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

Returns:

Type Description
tuple[int | None, int | None]

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

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

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

    chat_id = self.message.recipient.chat_id
    user_id = self.message.sender.user_id if self.message.sender else None
    return chat_id, user_id

MessageEdited

Bases: BaseUpdate

Обновление, сигнализирующее об изменении сообщения.

Attributes:

Name Type Description
message Message

Объект измененного сообщения.

get_ids()

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

Returns:

Type Description
tuple[int | None, int | None]

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

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

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

    return self.message.recipient.chat_id, self.message.recipient.user_id

MessageRemoved

Bases: BaseUpdate

Класс для обработки события удаления сообщения в чате.

Attributes:

Name Type Description
message_id str

Идентификатор удаленного сообщения. Может быть None.

chat_id int

Идентификатор чата. Может быть None.

user_id int

Идентификатор пользователя. Может быть None.

get_ids()

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

Returns:

Type Description
tuple[int | None, int | None]

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

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

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

    return self.chat_id, self.user_id

UserAdded

Bases: BaseUpdate

Класс для обработки события добавления пользователя в чат.

Attributes:

Name Type Description
inviter_id int

Идентификатор пользователя, добавившего нового участника. Может быть None.

chat_id int

Идентификатор чата. Может быть None.

user User

Объект пользователя, добавленного в чат.

is_channel bool

Указывает, был ли пользователь добавлен в канал или нет

get_ids()

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

Returns:

Type Description
tuple[int | None, int | None]

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

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

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

    return self.chat_id, self.inviter_id

UserRemoved

Bases: BaseUpdate

Класс для обработки события выходе/удаления пользователя из чата.

Attributes:

Name Type Description
admin_id Optional[int]

Идентификатор администратора, удалившего пользователя. None при выходе из чата самим пользователем.

chat_id int

Идентификатор чата. Может быть None.

user User

Объект пользователя, удаленного из чата.

is_channel bool

Указывает, был ли пользователь удален из канала или нет

get_ids()

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

Returns:

Type Description
tuple[int | None, int | None]

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

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

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

    return self.chat_id, self.admin_id

InputMedia(path, type=None)

Класс для представления медиафайла.

Attributes:

Name Type Description
path str

Путь к файлу.

type UploadType

Тип файла, определенный на основе содержимого (MIME-типа).

Инициализирует объект медиафайла.

Parameters:

Name Type Description Default
path str

Путь к файлу.

required
type UploadType

Тип файла. Если не указан, определяется автоматически.

None
Source code in maxapi/types/input_media.py
def __init__(self, path: str, type: UploadType | None = None):
    """
    Инициализирует объект медиафайла.

    Args:
        path (str): Путь к файлу.
        type (UploadType, optional): Тип файла. Если не указан,
            определяется автоматически.
    """

    self.path = path
    self.type = type or self.__detect_file_type(path)

__detect_file_type(path)

Определяет тип файла на основе его содержимого (MIME-типа).

Parameters:

Name Type Description Default
path str

Путь к файлу.

required

Returns:

Name Type Description
UploadType UploadType

Тип файла (VIDEO, IMAGE, AUDIO или FILE).

Source code in maxapi/types/input_media.py
def __detect_file_type(self, path: str) -> UploadType:
    """
    Определяет тип файла на основе его содержимого (MIME-типа).

    Args:
        path (str): Путь к файлу.

    Returns:
        UploadType: Тип файла (VIDEO, IMAGE, AUDIO или FILE).
    """

    with Path(path).open("rb") as f:
        sample = f.read(4096)

    try:
        matches = puremagic.magic_string(sample)
        if matches:
            mime_type = matches[0].mime_type
        else:
            mime_type = None
    except Exception:
        mime_type = None

    if mime_type is None:
        return UploadType.FILE

    if mime_type.startswith("video/"):
        return UploadType.VIDEO
    elif mime_type.startswith("image/"):
        return UploadType.IMAGE
    elif mime_type.startswith("audio/"):
        return UploadType.AUDIO
    else:
        return UploadType.FILE

InputMediaBuffer(buffer, filename=None, type=None)

Класс для представления медиафайла из буфера.

Attributes:

Name Type Description
buffer bytes

Буфер с содержимым файла.

type UploadType

Тип файла, определенный по содержимому.

Инициализирует объект медиафайла из буфера.

Parameters:

Name Type Description Default
buffer bytes

Буфер с содержимым файла.

required
filename str

Название файла (по умолчанию присваивается uuid4).

None
type UploadType

Тип файла. Если не указан, определяется автоматически.

None
Source code in maxapi/types/input_media.py
def __init__(
    self,
    buffer: bytes,
    filename: str | None = None,
    type: UploadType | None = None,
):
    """
    Инициализирует объект медиафайла из буфера.

    Args:
        buffer (bytes): Буфер с содержимым файла.
        filename (str, optional): Название файла (по умолчанию
            присваивается uuid4).
        type (UploadType, optional): Тип файла. Если не указан,
            определяется автоматически.
    """

    self.filename = filename
    self.buffer = buffer
    self.type = type or self.__detect_file_type(buffer)

attachments

attachment

StickerAttachmentPayload

Bases: BaseModel

Данные для вложения типа стикер.

Attributes:

Name Type Description
url str

URL стикера.

code str

Код стикера.

PhotoAttachmentPayload

Bases: BaseModel

Данные для фото-вложения.

Attributes:

Name Type Description
photo_id int

Идентификатор фотографии.

token str

Токен для доступа к фото.

url str

URL фотографии.

OtherAttachmentPayload

Bases: BaseModel

Данные для общих типов вложений (файлы и т.п.).

Attributes:

Name Type Description
url str

URL вложения.

token Optional[str]

Опциональный токен доступа.

ContactAttachmentPayload

Bases: BaseModel

Данные для контакта.

Attributes:

Name Type Description
vcf_info Optional[str]

Информация в формате vcf.

max_info Optional[User]

Дополнительная информация о пользователе.

vcf property

Доступ к данным из vcf_info.

ButtonsPayload

Bases: BaseModel

Данные для вложения с кнопками.

Attributes:

Name Type Description
buttons List[List[InlineButtonUnion]]

Двумерный список inline-кнопок.

Attachment

Bases: BaseModel

Универсальный класс вложения с типом и полезной нагрузкой.

Attributes:

Name Type Description
type AttachmentType

Тип вложения.

payload Optional[Union[...]]

Полезная нагрузка, зависит от типа вложения.

audio

Audio

Bases: Attachment

Вложение с типом аудио.

Attributes:

Name Type Description
transcription Optional[str]

Транскрипция аудио (если есть).

buttons

attachment_button
AttachmentButton

Bases: Attachment

Модель кнопки вложения для сообщения.

Attributes:

Name Type Description
type Literal[INLINE_KEYBOARD]

Тип кнопки, фиксированное значение 'inline_keyboard'

payload AttachmentUpload | PhotoAttachmentPayload | OtherAttachmentPayload | ButtonsPayload | ContactAttachmentPayload | StickerAttachmentPayload | None

Полезная нагрузка кнопки (массив рядов кнопок)

button
Button

Bases: BaseModel

Базовая модель кнопки для сообщений.

Attributes:

Name Type Description
type ButtonType

Тип кнопки (определяет её поведение и функционал)

text str

Текст, отображаемый на кнопке (1-64 символа)

callback_button
CallbackButton

Bases: Button

Кнопка с callback-действием.

Attributes:

Name Type Description
type ButtonType

Тип кнопки (фиксированное значение ButtonType.CALLBACK)

text str

Текст, отображаемый на кнопке (наследуется от Button)

payload str | None

Дополнительные данные (до 256 символов), передаваемые при нажатии

intent Intent

Намерение кнопки (визуальный стиль и поведение)

chat_button
ChatButton(**data)

Bases: Button

.. deprecated:: 0.9.14 Используйте другие типы кнопок.

Attributes:

Name Type Description
text str

Текст кнопки (наследуется от Button)

chat_title str

Название чата (до 128 символов)

chat_description str | None

Описание чата (до 256 символов)

start_payload str | None

Данные, передаваемые при старте чата (до 512 символов)

uuid int | None

Уникальный идентификатор чата

Source code in maxapi/types/attachments/buttons/chat_button.py
def __init__(self, **data):
    super().__init__(**data)
    warnings.warn(
        "ChatButton устарел и будет удален в будущих версиях. "
        "Используйте другие типы кнопок.",
        DeprecationWarning,
        stacklevel=2,
    )

Bases: Button

Кнопка с внешней ссылкой.

Attributes:

Name Type Description
url Optional[str]

Ссылка для перехода (должна содержать http/https)

message_button
MessageButton

Bases: Button

Кнопка для отправки текста

Attributes:

Name Type Description
type ButtonType

Тип кнопки (определяет её поведение и функционал)

text str

Отправляемый текст

open_app_button
OpenAppButton

Bases: Button

Кнопка для открытия приложения

Attributes:

Name Type Description
text str

Видимый текст кнопки

web_app str | None

Публичное имя (username) бота или ссылка на него, чьё мини-приложение надо запустить

contact_id int | None

Идентификатор бота, чьё мини-приложение надо запустить

payload str | None

Параметр запуска, который будет передан в initData мини-приложения

request_contact
RequestContactButton

Bases: Button

Кнопка с контактом

Attributes:

Name Type Description
text str

Текст кнопки

request_geo_location_button
RequestGeoLocationButton

Bases: Button

Кнопка запроса геолокации пользователя.

Attributes:

Name Type Description
quick bool

Если True, запрашивает геолокацию без дополнительного подтверждения пользователя (по умолчанию False)

contact

Contact

Bases: Attachment

Вложение с типом контакта.

file

File

Bases: Attachment

Вложение с типом файла.

Attributes:

Name Type Description
filename Optional[str]

Имя файла.

size Optional[int]

Размер файла в байтах.

image

PhotoAttachmentRequestPayload

Bases: BaseModel

Полезная нагрузка для запроса фото-вложения.

Attributes:

Name Type Description
url Optional[str]

URL изображения.

token Optional[str]

Токен доступа к изображению.

photos Optional[str]

Дополнительные данные о фотографиях.

Image

Bases: Attachment

Вложение с типом изображения.

Attributes:

Name Type Description
type Literal['image']

Тип вложения, всегда 'image'.

location

Location

Bases: Attachment

Вложение с типом геолокации.

Attributes:

Name Type Description
latitude Optional[float]

Широта.

longitude Optional[float]

Долгота.

share

Share

Bases: Attachment

Вложение с типом "share" (поделиться).

Attributes:

Name Type Description
title Optional[str]

Заголовок для шаринга.

description Optional[str]

Описание.

image_url Optional[str]

URL изображения для предпросмотра.

sticker

Sticker

Bases: Attachment

Вложение с типом стикера.

Attributes:

Name Type Description
width Optional[int]

Ширина стикера в пикселях.

height Optional[int]

Высота стикера в пикселях.

upload

AttachmentPayload

Bases: BaseModel

Полезная нагрузка вложения с токеном.

Attributes:

Name Type Description
token str

Токен для доступа или идентификации вложения.

AttachmentUpload

Bases: BaseModel

Вложение с полезной нагрузкой для загрузки на сервера MAX.

Attributes:

Name Type Description
type UploadType

Тип вложения (например, image, video, audio).

payload AttachmentPayload

Полезная нагрузка с токеном.

video

VideoUrl

Bases: BaseModel

URLs различных разрешений видео.

Attributes:

Name Type Description
mp4_1080 Optional[str]

URL видео в 1080p.

mp4_720 Optional[str]

URL видео в 720p.

mp4_480 Optional[str]

URL видео в 480p.

mp4_360 Optional[str]

URL видео в 360p.

mp4_240 Optional[str]

URL видео в 240p.

mp4_144 Optional[str]

URL видео в 144p.

hls Optional[str]

URL HLS потока.

VideoThumbnail

Bases: BaseModel

Миниатюра видео.

Attributes:

Name Type Description
url str

URL миниатюры.

Video

Bases: Attachment

Вложение с типом видео.

Attributes:

Name Type Description
token Optional[str]

Токен видео.

urls Optional[VideoUrl]

URLs видео разных разрешений.

thumbnail VideoThumbnail

Миниатюра видео.

width Optional[int]

Ширина видео.

height Optional[int]

Высота видео.

duration Optional[int]

Продолжительность видео в секундах.

bot Optional[Any]

Ссылка на экземпляр бота, не сериализуется.

bot_mixin

BotMixin

Миксин для проверки инициализации bot.

callback

Callback

Bases: BaseModel

Модель callback-запроса.

Attributes:

Name Type Description
timestamp int

Временная метка callback.

callback_id str

Уникальный идентификатор callback.

payload Optional[str]

Дополнительные данные callback. Может быть None.

user User

Объект пользователя, инициировавшего callback.

chats

Icon

Bases: BaseModel

Модель иконки чата.

Attributes:

Name Type Description
url str

URL-адрес иконки.

Chat

Bases: BaseModel

Модель чата.

Attributes:

Name Type Description
chat_id int

Уникальный идентификатор чата.

type ChatType

Тип чата.

status ChatStatus

Статус чата.

title Optional[str]

Название чата.

icon Optional[Icon]

Иконка чата. Может быть None.

last_event_time int

Временная метка последнего события в чате.

participants_count int

Количество участников чата.

owner_id Optional[int]

Идентификатор владельца чата.

participants Optional[Dict[str, datetime]]

Словарь участников с временными метками. Может быть None.

is_public bool

Флаг публичности чата.

link Optional[str]

Ссылка на чат. Может быть None.

description Optional[str]

Описание чата. Может быть None.

dialog_with_user Optional[User]

Пользователь, с которым ведется диалог. Может быть None.

messages_count Optional[int]

Количество сообщений в чате. Может быть None.

chat_message_id Optional[str]

Идентификатор сообщения чата. Может быть None.

pinned_message Optional[Message]

Закрепленное сообщение. Может быть None.

convert_timestamps(value) classmethod

Преобразовать временные метки участников из миллисекунд в объекты datetime.

Parameters:

Name Type Description Default
value Optional[Dict[str, int]]

Словарь с временными метками в миллисекундах. Может быть None, если участников нет.

required

Returns:

Type Description
dict[str, datetime | None] | None

Optional[Dict[str, Optional[datetime]]]: Словарь с временными метками в формате datetime. Может быть None, если входное значение было None.

Source code in maxapi/types/chats.py
@field_validator("participants", mode="before")
@classmethod
def convert_timestamps(
    cls,
    value: dict[str, int] | None,
) -> dict[str, datetime | None] | None:
    """
    Преобразовать временные метки участников из миллисекунд
    в объекты datetime.

    Args:
        value (Optional[Dict[str, int]]): Словарь с временными
            метками в миллисекундах. Может быть None, если участников нет.

    Returns:
        Optional[Dict[str, Optional[datetime]]]: Словарь с
            временными метками в формате datetime. Может быть None,
            если входное значение было None.
    """
    if value is None:
        return None

    return {key: from_ms(ts) for key, ts in value.items()}
serialize_participants(value, info)

Serialize participants dict: datetime -> milliseconds

Source code in maxapi/types/chats.py
@field_serializer("participants")
def serialize_participants(self, value: dict[str, datetime] | None, info):
    """Serialize participants dict: datetime -> milliseconds"""
    if value is None:
        return None
    return {key: to_ms(dt) for key, dt in value.items()}

Chats

Bases: BaseModel

Модель списка чатов.

Attributes:

Name Type Description
chats List[Chat]

Список чатов. По умолчанию пустой.

marker Optional[int]

Маркер для пагинации. Может быть None.

ChatMember

Bases: User

Модель участника чата.

Attributes:

Name Type Description
last_access_time Optional[int]

Время последнего доступа. Может быть None.

is_owner Optional[bool]

Флаг владельца чата. Может быть None.

is_admin Optional[bool]

Флаг администратора чата. Может быть None.

join_time Optional[int]

Время присоединения к чату. Может быть None.

permissions Optional[List[ChatPermission]]

Список разрешений участника. Может быть None.

alias Optional[str]

Заголовок, который будет показан на клиент. Может быть None.

command

BotCommand

Bases: BaseModel

Модель команды бота для сериализации.

Attributes:

Name Type Description
name str

Название команды.

description Optional[str]

Описание команды. Может быть None.

input_media

InputMedia(path, type=None)

Класс для представления медиафайла.

Attributes:

Name Type Description
path str

Путь к файлу.

type UploadType

Тип файла, определенный на основе содержимого (MIME-типа).

Инициализирует объект медиафайла.

Parameters:

Name Type Description Default
path str

Путь к файлу.

required
type UploadType

Тип файла. Если не указан, определяется автоматически.

None
Source code in maxapi/types/input_media.py
def __init__(self, path: str, type: UploadType | None = None):
    """
    Инициализирует объект медиафайла.

    Args:
        path (str): Путь к файлу.
        type (UploadType, optional): Тип файла. Если не указан,
            определяется автоматически.
    """

    self.path = path
    self.type = type or self.__detect_file_type(path)
__detect_file_type(path)

Определяет тип файла на основе его содержимого (MIME-типа).

Parameters:

Name Type Description Default
path str

Путь к файлу.

required

Returns:

Name Type Description
UploadType UploadType

Тип файла (VIDEO, IMAGE, AUDIO или FILE).

Source code in maxapi/types/input_media.py
def __detect_file_type(self, path: str) -> UploadType:
    """
    Определяет тип файла на основе его содержимого (MIME-типа).

    Args:
        path (str): Путь к файлу.

    Returns:
        UploadType: Тип файла (VIDEO, IMAGE, AUDIO или FILE).
    """

    with Path(path).open("rb") as f:
        sample = f.read(4096)

    try:
        matches = puremagic.magic_string(sample)
        if matches:
            mime_type = matches[0].mime_type
        else:
            mime_type = None
    except Exception:
        mime_type = None

    if mime_type is None:
        return UploadType.FILE

    if mime_type.startswith("video/"):
        return UploadType.VIDEO
    elif mime_type.startswith("image/"):
        return UploadType.IMAGE
    elif mime_type.startswith("audio/"):
        return UploadType.AUDIO
    else:
        return UploadType.FILE

InputMediaBuffer(buffer, filename=None, type=None)

Класс для представления медиафайла из буфера.

Attributes:

Name Type Description
buffer bytes

Буфер с содержимым файла.

type UploadType

Тип файла, определенный по содержимому.

Инициализирует объект медиафайла из буфера.

Parameters:

Name Type Description Default
buffer bytes

Буфер с содержимым файла.

required
filename str

Название файла (по умолчанию присваивается uuid4).

None
type UploadType

Тип файла. Если не указан, определяется автоматически.

None
Source code in maxapi/types/input_media.py
def __init__(
    self,
    buffer: bytes,
    filename: str | None = None,
    type: UploadType | None = None,
):
    """
    Инициализирует объект медиафайла из буфера.

    Args:
        buffer (bytes): Буфер с содержимым файла.
        filename (str, optional): Название файла (по умолчанию
            присваивается uuid4).
        type (UploadType, optional): Тип файла. Если не указан,
            определяется автоматически.
    """

    self.filename = filename
    self.buffer = buffer
    self.type = type or self.__detect_file_type(buffer)

message

MarkupElement

Bases: BaseModel

Модель элемента разметки текста.

Attributes:

Name Type Description
type TextStyle

Тип разметки.

from_ int

Начальная позиция разметки в тексте.

length int

Длина разметки.

Bases: MarkupElement

Модель разметки ссылки.

Attributes:

Name Type Description
url Optional[str]

URL ссылки. Может быть None.

MarkupUserMention

Bases: MarkupElement

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

Attributes:

Name Type Description
user_id Optional[int]

Идентификатор пользователя. Может быть None.

user_link Optional[str]

Ссылка на пользователя. Может быть None.

Recipient

Bases: BaseModel

Модель получателя сообщения.

Attributes:

Name Type Description
user_id Optional[int]

Идентификатор пользователя. Может быть None.

chat_id Optional[int]

Идентификатор чата. Может быть None.

chat_type ChatType

Тип получателя (диалог или чат).

MessageBody

Bases: BaseModel

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

Attributes:

Name Type Description
mid str

Уникальный идентификатор сообщения.

seq int

Порядковый номер сообщения.

text str

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

html_text property

Преобразует исходный текст сообщения в HTML строку, основываясь на разметке markup с помощью класса Text.

md_text property

Преобразует исходный текст сообщения в Markdown строку, основываясь на разметке markup с помощью класса Text.

text_decorated property

Разбирает текст и разметку сообщения в дерево форматирования. Если текст отсутствует, возвращает None. Если разметка отсутствует, возвращает Text с простым текстом.

Returns:

Type Description
Text | None

Optional[Text]: Дерево форматирования или None.

MessageStat

Bases: BaseModel

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

Attributes:

Name Type Description
views int

Количество просмотров сообщения.

LinkedMessage

Bases: BaseModel

Модель связанного сообщения.

Attributes:

Name Type Description
type MessageLinkType

Тип связи.

sender Optional[User]

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

chat_id Optional[int]

Идентификатор чата. Может быть None.

message MessageBody

Тело связанного сообщения.

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,
    )

Messages

Bases: BaseModel

Модель списка сообщений.

Attributes:

Name Type Description
messages List[Message]

Список сообщений.

bot Optional[Bot]

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

Bases: BaseModel

Модель ссылки на новое сообщение.

Attributes:

Name Type Description
type MessageLinkType

Тип связи.

mid str

Идентификатор сообщения.

subscription

Subscription

Bases: BaseModel

Подписка для вебхука

Attributes:

Name Type Description
url str

URL вебхука

time int

Unix-время, когда была создана подписка

update_types List[str]

Типы обновлений, на которые подписан бот

updates

base_update

BaseUpdate

Bases: BaseModel, BotMixin

Базовая модель обновления.

Attributes:

Name Type Description
update_type UpdateType

Тип обновления.

timestamp int

Временная метка обновления.

bot_added

BotAdded

Bases: BaseUpdate

Обновление, сигнализирующее о добавлении бота в чат.

Attributes:

Name Type Description
chat_id int

Идентификатор чата, куда добавлен бот.

user User

Объект пользователя-бота.

is_channel bool

Указывает, был ли бот добавлен в канал или нет

bot_removed

BotRemoved

Bases: BaseUpdate

Обновление, сигнализирующее об удалении бота из чата.

Attributes:

Name Type Description
chat_id int

Идентификатор чата, из которого удалён бот.

user User

Объект пользователя-бота.

is_channel bool

Указывает, был ли пользователь добавлен в канал или нет

bot_started

BotStarted

Bases: BaseUpdate

Обновление, сигнализирующее о первом старте бота.

Attributes:

Name Type Description
chat_id int

Идентификатор чата.

user User

Пользователь (бот).

user_locale Optional[str]

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

payload Optional[str]

Дополнительные данные.

bot_stopped

BotStopped

Bases: BaseUpdate

Обновление, сигнализирующее об остановке бота.

Attributes:

Name Type Description
chat_id int

Идентификатор чата.

user User

Пользователь (бот).

user_locale Optional[str]

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

payload Optional[str]

Дополнительные данные.

chat_title_changed

ChatTitleChanged

Bases: BaseUpdate

Обновление, сигнализирующее об изменении названия чата.

Attributes:

Name Type Description
chat_id Optional[int]

Идентификатор чата.

user User

Пользователь, совершивший изменение.

title str

Новое название чата.

dialog_cleared

DialogCleared

Bases: BaseUpdate

Обновление, сигнализирующее об очистке диалога с ботом.

Attributes:

Name Type Description
chat_id int

Идентификатор чата.

user User

Пользователь (бот).

user_locale Optional[str]

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

dialog_muted

DialogMuted

Bases: BaseUpdate

Обновление, сигнализирующее об отключении оповещений от бота.

Attributes:

Name Type Description
chat_id int

Идентификатор чата.

muted_until int

Время до включения оповещений от бота.

user User

Пользователь (бот).

user_locale Optional[str]

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

dialog_removed

DialogRemoved

Bases: BaseUpdate

Обновление, сигнализирующее об удалении диалога с ботом.

Attributes:

Name Type Description
chat_id int

Идентификатор чата.

user User

Пользователь (бот).

user_locale Optional[str]

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

dialog_unmuted

DialogUnmuted

Bases: BaseUpdate

Обновление, сигнализирующее о включении оповещений от бота.

Attributes:

Name Type Description
chat_id int

Идентификатор чата.

user User

Пользователь (бот).

user_locale Optional[str]

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

message_callback

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,
    )

message_chat_created

MessageChatCreated(**data)

Bases: BaseUpdate

.. deprecated:: 0.9.14 Это событие устарело и будет удалено в будущих версиях.

Событие создания чата.

Attributes:

Name Type Description
chat Chat

Объект чата.

title Optional[str]

Название чата.

message_id Optional[str]

ID сообщения.

start_payload Optional[str]

Payload для старта.

Source code in maxapi/types/updates/message_chat_created.py
def __init__(self, **data):
    super().__init__(**data)
    warnings.warn(
        "MessageChatCreated устарел и будет удален в будущих версиях.",
        DeprecationWarning,
        stacklevel=2,
    )

message_created

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,
    )
MessageCreated

Bases: BaseUpdate

Обновление, сигнализирующее о создании нового сообщения.

Attributes:

Name Type Description
message Message

Объект сообщения.

user_locale Optional[str]

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

get_ids()

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

Returns:

Type Description
tuple[int | None, int | None]

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

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

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

    chat_id = self.message.recipient.chat_id
    user_id = self.message.sender.user_id if self.message.sender else None
    return chat_id, user_id

message_edited

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,
    )
MessageEdited

Bases: BaseUpdate

Обновление, сигнализирующее об изменении сообщения.

Attributes:

Name Type Description
message Message

Объект измененного сообщения.

get_ids()

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

Returns:

Type Description
tuple[int | None, int | None]

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

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

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

    return self.message.recipient.chat_id, self.message.recipient.user_id

message_removed

MessageRemoved

Bases: BaseUpdate

Класс для обработки события удаления сообщения в чате.

Attributes:

Name Type Description
message_id str

Идентификатор удаленного сообщения. Может быть None.

chat_id int

Идентификатор чата. Может быть None.

user_id int

Идентификатор пользователя. Может быть None.

get_ids()

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

Returns:

Type Description
tuple[int | None, int | None]

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

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

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

    return self.chat_id, self.user_id

user_added

UserAdded

Bases: BaseUpdate

Класс для обработки события добавления пользователя в чат.

Attributes:

Name Type Description
inviter_id int

Идентификатор пользователя, добавившего нового участника. Может быть None.

chat_id int

Идентификатор чата. Может быть None.

user User

Объект пользователя, добавленного в чат.

is_channel bool

Указывает, был ли пользователь добавлен в канал или нет

get_ids()

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

Returns:

Type Description
tuple[int | None, int | None]

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

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

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

    return self.chat_id, self.inviter_id

user_removed

UserRemoved

Bases: BaseUpdate

Класс для обработки события выходе/удаления пользователя из чата.

Attributes:

Name Type Description
admin_id Optional[int]

Идентификатор администратора, удалившего пользователя. None при выходе из чата самим пользователем.

chat_id int

Идентификатор чата. Может быть None.

user User

Объект пользователя, удаленного из чата.

is_channel bool

Указывает, был ли пользователь удален из канала или нет

get_ids()

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

Returns:

Type Description
tuple[int | None, int | None]

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

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

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

    return self.chat_id, self.admin_id

users

User

Bases: BaseModel

Модель пользователя.

Attributes:

Name Type Description
user_id int

Уникальный идентификатор пользователя.

first_name str

Имя пользователя.

last_name Optional[str]

Фамилия пользователя. Может быть None.

username Optional[str]

Имя пользователя (ник). Может быть None.

is_bot bool

Флаг, указывающий, является ли пользователь ботом.

last_activity_time int

Временная метка последней активности.

description Optional[str]

Описание пользователя. Может быть None.

avatar_url Optional[str]

URL аватара пользователя. Может быть None.

full_avatar_url Optional[str]

URL полного аватара пользователя. Может быть None.

commands Optional[List[BotCommand]]

Список команд бота. Может быть None.

full_name property

Полное имя пользователя

mention_html property

Упоминание пользователя в формате HTML.

Ссылка max://user/user_id, текст — полное имя из профиля MAX. Пример: Имя Фамилия

mention_markdown property

Упоминание пользователя в формате Markdown.

Ссылка max://user/user_id, текст — полное имя из профиля MAX. Пример: Имя Фамилия

ChatAdmin

Bases: BaseModel

Модель администратора чата.

Attributes:

Name Type Description
user_id int

Уникальный идентификатор администратора.

permissions List[ChatPermission]

Список разрешений администратора.