60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
|
|
"""Точка входа в бота"""
|
||
|
|
|
||
|
|
import asyncio
|
||
|
|
import logging
|
||
|
|
import sys
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
# Добавляем корневую директорию в PATH
|
||
|
|
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||
|
|
|
||
|
|
from bot.config import Config
|
||
|
|
from bot.rss_bot import RSSNewsBot
|
||
|
|
|
||
|
|
|
||
|
|
def setup_logging(config: Config) -> None:
|
||
|
|
"""Настраивает логирование"""
|
||
|
|
log_format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
||
|
|
log_level = getattr(logging, config.log_level.upper(), logging.INFO)
|
||
|
|
|
||
|
|
handlers = [logging.StreamHandler()]
|
||
|
|
|
||
|
|
if config.log_file:
|
||
|
|
handlers.append(logging.FileHandler(config.log_file, encoding='utf-8'))
|
||
|
|
|
||
|
|
logging.basicConfig(
|
||
|
|
level=log_level,
|
||
|
|
format=log_format,
|
||
|
|
handlers=handlers
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
async def main() -> None:
|
||
|
|
"""Главная функция"""
|
||
|
|
try:
|
||
|
|
# Загружаем конфигурацию
|
||
|
|
config = Config()
|
||
|
|
|
||
|
|
# Настраиваем логирование
|
||
|
|
setup_logging(config)
|
||
|
|
|
||
|
|
# Создаем и запускаем бота
|
||
|
|
bot = RSSNewsBot(config)
|
||
|
|
await bot.run()
|
||
|
|
|
||
|
|
except FileNotFoundError as e:
|
||
|
|
logging.error(str(e))
|
||
|
|
sys.exit(1)
|
||
|
|
except ValueError as e:
|
||
|
|
logging.error(str(e))
|
||
|
|
sys.exit(1)
|
||
|
|
except KeyboardInterrupt:
|
||
|
|
logging.info("Бот остановлен")
|
||
|
|
sys.exit(0)
|
||
|
|
except Exception as e:
|
||
|
|
logging.exception(f"Критическая ошибка: {e}")
|
||
|
|
sys.exit(1)
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
asyncio.run(main())
|