/
lucifer39
/
python_Bot
Обзор
Документация
Войти
/
lucifer39
/
python_Bot
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
main.py
101 строка
3 KB
Ilya Kuprin
поменял структуру приложения
08 май 2025, 14:23
08 май 2025, 14:23
0ca2f2f
Код
Авторство
О чём код?
import sys import os import asyncio import logging from pathlib import Path from telebot.async_telebot import AsyncTeleBot from environs import Env # Настройка путей для PyInstaller def get_base_path(): if getattr(sys, 'frozen', False): # Для --onefile return Path(sys.executable).parent return Path(__file__).parent base_path = get_base_path() env = Env() env_path = base_path / ".env" if env_path.exists(): env.read_env(env_path) # Добавляем путь к модулям if getattr(sys, 'frozen', False): sys.path.insert(0, str(base_path)) # Инициализация логгера def setup_logging(): log_path = base_path / "bot.log" logging.basicConfig( level=os.getenv("LOG_LEVEL", "INFO"), format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", handlers=[ logging.StreamHandler(), logging.FileHandler(log_path) ] ) return logging.getLogger(__name__) logger = setup_logging() # Загрузка .env с исправленными путями def load_environment(): env = Env() env_path = base_path / ".env" if env_path.exists(): try: env.read_env(env_path) logger.info(f"Успешно загружен .env из {env_path}") except Exception as e: logger.error(f"Ошибка загрузки .env: {e}") else: logger.warning(f"Файл .env не найден по пути: {env_path}") return env env = load_environment() # Импорты обработчиков ПОСЛЕ настройки путей try: from handlers.start import message_handler_star from database.database import init_db from handlers.link import link_handler_add from handlers.keybord_comand import one_tick_add, quantity_link from handlers.echo import echo_message logger.info("Все модули успешно импортированы") except ImportError as e: logger.critical(f"Ошибка импорта: {e}") raise async def main(): try: logger.info("Инициализация базы данных...") await init_db() logger.info("Создание экземпляра бота...") bot = AsyncTeleBot(env.str('TOKEN_BOT')) logger.info("Регистрация обработчиков...") await message_handler_star(bot) await link_handler_add(bot) await one_tick_add(bot) await quantity_link(bot) await echo_message(bot) logger.info("Запуск бота...") await bot.infinity_polling(logger_level=env.str('LOG_LEVEL', 'INFO')) except Exception as err: logger.critical(f"Критическая ошибка: {err}", exc_info=True) raise if __name__ == "__main__": try: asyncio.run(main()) except KeyboardInterrupt: logger.info("Бот остановлен пользователем") except Exception as e: logger.critical(f"Фатальная ошибка: {e}", exc_info=True)