import os import asyncio from aiogram import Bot, Dispatcher from aiogram.types import BotCommand from Middleware.anti_spam_middleware import AntiSpamMiddleware import logging # Получение токена бота из переменных окружения BOT_TOKEN = os.getenv("TOKEN") if not BOT_TOKEN: raise ValueError("Не задан токен бота. Убедитесь, что переменная окружения 'TOKEN' установлена.") bot = Bot(token=BOT_TOKEN) dp = Dispatcher() # Установка middleware для защиты от спама dp.message.middleware(AntiSpamMiddleware(rate_limit=1)) async def set_commands(): """Устанавливает команды для бота.""" commands = [ BotCommand(command="/start", description="Запустить бота"), ] await bot.set_my_commands(commands) async def on_startup(): """Действия при запуске бота.""" await set_commands() logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) logger.info("Бот запущен!") async def on_shutdown(): """Действия при остановке бота.""" await bot.session.close() print("Бот остановлен.") async def main(): """Основной цикл работы бота.""" from handlers.handlers import register_handlers register_handlers(dp) # Регистрация хендлеров await on_startup() try: # Запуск polling await dp.start_polling(bot) finally: # Действия при завершении работы await on_shutdown() if __name__ == "__main__": asyncio.run(main())