Из
документации известно, что бот может отправить (
отобразить) ChatAction-действие (
"пишет", "загружает фото" и т.д.) с помощью таких вариантов:
1.
result: bool = await bot.send_chat_action(...)
2.
result: bool = await bot(SendChatAction(...))
*
вебхуки не рассматриваю
Но проблема в том, что мои хендлеры находятся в нескольких файлах и подключены к диспетчеру через роутеры. Естественно, сам объект бота находится в корневом файле. Ниже упрощённый пример для демонстрации проблемы.
Содержимое base_router.py:import asyncio
from aiogram import Router, types
from aiogram.filters import Command
router = Router()
@router.message(Command("start"))
async def cmd_start(message: types.Message):
reaction = types.ReactionTypeEmoji(emoji='')
await message.react([reaction], is_big=True)
await bot.send_chat_action(message.chat.id, 'typing') # Не сработает потому что не импортирован бот
await asyncio.sleep(5)
await message.reply('Hello, glad to see you!)')
Содержимое main.py:from aiogram import Dispatcher, Bot
from datetime import datetime
import asyncio
import config as cfg
from handlers import base_router
dp = Dispatcher()
bot = Bot(cfg.TOKEN)
dp.include_routers(base_router.router)
async def main():
await dp.start_polling(bot)
if __name__ == "__main__":
try:
print(f"Program running at {datetime.now().strftime(cfg.dt_format)}")
asyncio.run(main())
except KeyboardInterrupt:
print(f"Program finished at {datetime.now().strftime(cfg.dt_format)}")
Если импортировать бота в файл с роутером, то будет ошибка: в корневом файле роутер пропадёт из видимости. Каким образом мне в обработчике команды, внутри кастомного роутера, использовать
send_chat_action(...)
? Как в роутерах использовать конструкцию
await bot.method(...)
?