Фасады¶
Фасады - это обёртки, упрощающие взаимодействие с API и управление контекстом события. Они автоматически внедряются в аргументы обработчиков, если указать соответствующий тип.
Зачем нужны фасады?¶
Обычно, чтобы отправить сообщение в ответ пользователю, нужно знать chat_id или user_id и вручную вызывать методы бота. В классическом подходе это выглядит так:
await bot.send_message(chat_id=chat_id, text="Hello!")
С использованием фасада код становится короче и понятнее, так как фасад уже знает контекст текущего обновления (в каком чате произошло событие, кто его инициатор):
# В аргументах хендлера: facade: MessageCreatedFacade
await facade.answer_text("Hello!")
Основные возможности¶
Быстрые ответы: методы
answer_text,reply_text,answer_photoи т.д. автоматически подставляют нужные ID.Управление клавиатурами: методы для быстрой отправки или редактирования клавиатур.
Доступ к боту: через свойство
facade.botвсегда доступен экземпляр бота.
Отправка медиа¶
Фасады поддерживают отправку медиа двумя способами:
Загрузка файла - через
InputFile(BufferedInputFile,FSInputFile). Файл загружается на сервер автоматически.По токену - через
MediaAttachmentsRequests(PhotoAttachmentRequest,VideoAttachmentRequestи т.д.). Используется, когда медиа уже загружено ранее и известен его токен.
Оба варианта можно передавать в параметр media методов send_message, send_media и edit_message. Тип MediaInput объединяет оба варианта:
from maxo.routing.updates.mixins.attachments import MediaInput
Загрузка файла¶
from maxo.utils.upload_media import BufferedInputFile
photo = BufferedInputFile.image(content, "photo.jpg")
await facade.send_media(media=photo, text="Новое фото")
Отправка по токену¶
Если медиа уже было загружено или получено из входящего сообщения, можно использовать токен напрямую:
from maxo.types import PhotoAttachmentRequest
photo = PhotoAttachmentRequest.factory(token=token)
await facade.send_media(media=photo, text="Фото по токену")
Комбинирование¶
Можно смешивать оба типа в одном вызове - порядок вложений сохраняется:
from maxo.types import PhotoAttachmentRequest, VideoAttachmentRequest
from maxo.utils.upload_media import BufferedInputFile
media = [
BufferedInputFile.image(new_photo_bytes, "photo.jpg"),
VideoAttachmentRequest.factory(token=existing_video_token),
]
await facade.send_message(text="Микс медиа", media=media)
Список доступных фасадов¶
Ниже приведен список всех фасадов для различных типов событий.
- class maxo.routing.facades.BaseUpdateFacade[исходный код]¶
Базовые классы:
SubscriptionMethodsFacade,Generic[_UpdateT]- property update: _UpdateT¶
- class maxo.routing.facades.BotAddedToChatFacade[исходный код]¶
Базовые классы:
BaseUpdateFacade[BotAddedToChat],ChatMethodsFacade
- class maxo.routing.facades.BotRemovedFromChatFacade[исходный код]¶
Базовые классы:
BaseUpdateFacade[BotRemovedFromChat],ChatMethodsFacade
- class maxo.routing.facades.BotStartedFacade[исходный код]¶
Базовые классы:
BaseUpdateFacade[BotStarted],ChatMethodsFacade
- class maxo.routing.facades.BotStoppedFacade[исходный код]¶
Базовые классы:
BaseUpdateFacade[BotStopped],ChatMethodsFacade
- class maxo.routing.facades.ChatTitleChangedFacade[исходный код]¶
Базовые классы:
BaseUpdateFacade[ChatTitleChanged],ChatMethodsFacade
- class maxo.routing.facades.DialogClearedFacade[исходный код]¶
Базовые классы:
BaseUpdateFacade[DialogCleared],ChatMethodsFacade
- class maxo.routing.facades.DialogMutedFacade[исходный код]¶
Базовые классы:
BaseUpdateFacade[DialogMuted],ChatMethodsFacade
- class maxo.routing.facades.DialogRemovedFacade[исходный код]¶
Базовые классы:
BaseUpdateFacade[DialogRemoved],ChatMethodsFacade
- class maxo.routing.facades.DialogUnmutedFacade[исходный код]¶
Базовые классы:
BaseUpdateFacade[DialogUnmuted],ChatMethodsFacade
- class maxo.routing.facades.ErrorEventFacade[исходный код]¶
Базовые классы:
BaseUpdateFacade[ErrorEvent[_ExceptionT,_UpdateT]],Generic[_ExceptionT,_UpdateT]- property exception: _ExceptionT¶
- property update: MaxoUpdate[_UpdateT]¶
- property error: _ExceptionT¶
- property event: _UpdateT¶
- class maxo.routing.facades.MessageCallbackFacade[исходный код]¶
Базовые классы:
BaseUpdateFacade[MessageCallback],CallbackMethodsFacade,MessageMethodsFacade
- class maxo.routing.facades.MessageCreatedFacade[исходный код]¶
Базовые классы:
BaseUpdateFacade[MessageCreated],MessageMethodsFacade
- class maxo.routing.facades.MessageEditedFacade[исходный код]¶
Базовые классы:
BaseUpdateFacade[MessageEdited],MessageMethodsFacade
- class maxo.routing.facades.MessageRemovedFacade[исходный код]¶
Базовые классы:
BaseUpdateFacade[MessageRemoved],ChatMethodsFacade
- class maxo.routing.facades.UserAddedToChatFacade[исходный код]¶
Базовые классы:
BaseUpdateFacade[UserAddedToChat],ChatMethodsFacade
- class maxo.routing.facades.UserRemovedFromChatFacade[исходный код]¶
Базовые классы:
BaseUpdateFacade[UserRemovedFromChat],ChatMethodsFacade