Skip to content

Return-Manager

Для каждого view можно установить handler_return_manager. Этот менеджер будет обрабатывать то, что возвращается из хендлеров.

По умолчанию менеджеры предустановлены в некоторых view.

Например, для сообщений:

  • строка отправится в качестве текста сообщения
  • каждый элемент кортежа или листа будет отправлен как сообщение
  • словарь распакуется в метод отправки сообщения

Вот так выглядит его реализация:

from vkbottle import BaseReturnManager
from vkbottle.bot import Message
from typing import Union


class BotMessageReturnHandler(BaseReturnManager):
    @BaseReturnManager.instance_of(str)
    async def str_handler(self, value: str, message: Message, _: dict):
        await message.answer(value)

    @BaseReturnManager.instance_of((tuple, list))
    async def iter_handler(self, value: Union[tuple, list], message: Message, _: dict):
        [await message.answer(str(e)) for e in value]

    @BaseReturnManager.instance_of(dict)
    async def dict_handler(self, value: dict, message: Message, _: dict):
        await message.answer(**value)

Первым аргументов в хендлер приходит само значение, что было получено из хендлера, вторым - объект ивента, третьим - данные из рулзов и мидлварей.


Хендлеры оборачиваются в декоратор instance_of, который принимает в качестве единственного аргумента тип или кортеж типов