import asyncio import logging import os from aiogram import Bot, Dispatcher, F, Router from aiogram.client.session.aiohttp import AiohttpSession from aiogram.client.telegram import TEST from aiogram.filters import CommandStart from aiogram.types import Message logging.basicConfig(level=logging.INFO) router = Router() @router.message(CommandStart()) async def start(message: Message) -> None: await message.answer("Тестовый эхо-бот запущен. Отправь мне текст — я повторю его.") @router.message(F.text & ~F.text.startswith("/")) async def echo(message: Message) -> None: if message.text: await message.answer(message.text) async def main() -> None: token = os.environ.get("BOT_TOKEN", "").strip() if not token: raise RuntimeError("BOT_TOKEN is required") test_env = os.environ.get("BOT_ENV", "test").strip().lower() == "test" session = AiohttpSession(api=TEST) if test_env else None bot = Bot(token=token, session=session) dp = Dispatcher() dp.include_router(router) try: await dp.start_polling(bot) finally: await bot.session.close() if __name__ == "__main__": asyncio.run(main())