init commit
This commit is contained in:
122
app/__init__.py
Normal file
122
app/__init__.py
Normal file
@@ -0,0 +1,122 @@
|
||||
import os
|
||||
import logging
|
||||
from dotenv import load_dotenv
|
||||
from telegram.ext import (
|
||||
Application,
|
||||
CommandHandler,
|
||||
CallbackQueryHandler,
|
||||
ChatMemberHandler,
|
||||
ConversationHandler,
|
||||
MessageHandler,
|
||||
filters,
|
||||
)
|
||||
from app.database import init_db
|
||||
from app.handlers import (
|
||||
start,
|
||||
help_command,
|
||||
start_callback,
|
||||
manage_messages,
|
||||
manage_groups,
|
||||
list_messages,
|
||||
list_groups,
|
||||
send_message,
|
||||
my_chat_member,
|
||||
)
|
||||
from app.handlers.message_manager import (
|
||||
create_message_start,
|
||||
create_message_title,
|
||||
create_message_text,
|
||||
select_groups,
|
||||
CREATE_MSG_TITLE,
|
||||
CREATE_MSG_TEXT,
|
||||
SELECT_GROUPS,
|
||||
)
|
||||
from app.handlers.telethon_client import telethon_manager
|
||||
from app.utils.keyboards import CallbackType
|
||||
from app.settings import Config
|
||||
|
||||
# Загружаем переменные окружения
|
||||
load_dotenv()
|
||||
|
||||
# Настройка логирования
|
||||
logging.basicConfig(
|
||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
||||
level=logging.INFO
|
||||
)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Получаем конфигурацию
|
||||
if not Config.validate():
|
||||
raise ValueError("❌ Конфигурация некорректна. Проверьте .env файл")
|
||||
|
||||
|
||||
async def main() -> None:
|
||||
"""Запуск бота с поддержкой гибридного режима"""
|
||||
|
||||
# Инициализируем БД
|
||||
logger.info("Инициализация базы данных...")
|
||||
await init_db()
|
||||
logger.info("✅ База данных инициализирована")
|
||||
|
||||
# Инициализируем Telethon если включен
|
||||
if Config.USE_TELETHON:
|
||||
logger.info("Инициализация Telethon клиента...")
|
||||
success = await telethon_manager.initialize()
|
||||
if success:
|
||||
logger.info("✅ Telethon клиент инициализирован")
|
||||
else:
|
||||
logger.warning("⚠️ Ошибка инициализации Telethon, продолжим с режимом бота")
|
||||
|
||||
# Выводим информацию о режиме
|
||||
mode = Config.get_mode()
|
||||
logger.info(f"📡 Режим работы: {mode}")
|
||||
if mode == 'hybrid':
|
||||
logger.info("🔀 Бот будет использовать Telethon как fallback для закрытых групп")
|
||||
|
||||
# Создаем приложение
|
||||
application = Application.builder().token(Config.TELEGRAM_BOT_TOKEN).build()
|
||||
|
||||
# Добавляем обработчики команд
|
||||
application.add_handler(CommandHandler("start", start))
|
||||
application.add_handler(CommandHandler("help", help_command))
|
||||
|
||||
# ConversationHandler для создания сообщения
|
||||
create_message_handler = ConversationHandler(
|
||||
entry_points=[CallbackQueryHandler(create_message_start, pattern=f"^{CallbackType.CREATE_MESSAGE}$")],
|
||||
states={
|
||||
CREATE_MSG_TITLE: [MessageHandler(filters.TEXT & ~filters.COMMAND, create_message_title)],
|
||||
CREATE_MSG_TEXT: [MessageHandler(filters.TEXT & ~filters.COMMAND, create_message_text)],
|
||||
SELECT_GROUPS: [CallbackQueryHandler(select_groups, pattern=r"^(select_group_\d+|done_groups|main_menu)$")],
|
||||
},
|
||||
fallbacks=[CommandHandler("cancel", start)],
|
||||
)
|
||||
application.add_handler(create_message_handler)
|
||||
|
||||
# Добавляем обработчики callback'ов
|
||||
application.add_handler(CallbackQueryHandler(start_callback, pattern=f"^{CallbackType.MAIN_MENU}$"))
|
||||
application.add_handler(CallbackQueryHandler(manage_messages, pattern=f"^{CallbackType.MANAGE_MESSAGES}$"))
|
||||
application.add_handler(CallbackQueryHandler(manage_groups, pattern=f"^{CallbackType.MANAGE_GROUPS}$"))
|
||||
application.add_handler(CallbackQueryHandler(list_messages, pattern=f"^{CallbackType.LIST_MESSAGES}$"))
|
||||
application.add_handler(CallbackQueryHandler(list_groups, pattern=f"^{CallbackType.LIST_GROUPS}$"))
|
||||
|
||||
# Отправка сообщений
|
||||
application.add_handler(CallbackQueryHandler(send_message, pattern=r"^send_msg_\d+$"))
|
||||
|
||||
# Обработчик добавления/удаления бота из групп
|
||||
application.add_handler(ChatMemberHandler(my_chat_member, ChatMemberHandler.MY_CHAT_MEMBER))
|
||||
|
||||
# Запускаем бота
|
||||
logger.info("🚀 Бот запущен. Ожидание команд...")
|
||||
try:
|
||||
await application.run_polling(allowed_updates=["message", "callback_query", "my_chat_member"])
|
||||
finally:
|
||||
# Завершить Telethon клиент при выходе
|
||||
if Config.USE_TELETHON:
|
||||
logger.info("Завершение работы Telethon клиента...")
|
||||
await telethon_manager.shutdown()
|
||||
logger.info("✅ Telethon клиент остановлен")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import asyncio
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user