условно, у бота есть администратор и его chat_id, можно ли сделать так, чтобы бот всегда мог отправить ему сообщение из любого обработчика?
насколько хорошая практика прокинуть через Middleware созданный в начале Bot? Что-то типа
Создаем бота где-то в инициализации, и далее:
#CODE: Точка инициализации бота
async def main():
bot = Bot(config.bot_token, parse_mode=ParseMode.HTML)
dp = Dispatcher(storage=MemoryStorage())
dp.update.middleware(BotObjectMiddleware(bot_object=bot))
await bot.delete_webhook(drop_pending_updates=True)
await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types())
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
asyncio.run(main())
class BotObjectMiddleware(BaseMiddleware):
def __init__(self, bot_object: Bot):
super().__init__()
self.bot_object = bot_object
async def __call__(
self,
handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]],
event: Message,
data: Dict[str, Any],
) -> Any:
data['bot_object'] = self.bot_object
return await handler(event, data)
И далее это использовать:
@router.message(F.text.contains("____"))
async def handle_invoice(message: Message, bot_object: Bot) -> None:
bot_object.send_message(chat_id=ADMIN_CHAT, ...)
Или в обработчике можно получить экземпляр Bot?
P.S. Я понимаю, что в обработчике можно вызвать:
@router.message(F.text.contains("___"))
async def handle_invoice(message: Message) -> None:
message.answer(....)
# Но как мне отправить сообщение администратору?