-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbot.py
More file actions
114 lines (95 loc) · 4.75 KB
/
Copy pathbot.py
File metadata and controls
114 lines (95 loc) · 4.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import asyncio
import logging
import os
import sys
import uvicorn
from loguru import logger
from database.database import clean_telegram_id_duplicates, init_database
from database.database import migrate_categories_to_lowercase
from handlers.admin.admin import router as admin
from handlers.admin.checking_accounts import router as checking_accounts
from handlers.admin.checking_group_for_ai import router as checking_group_for_ai
from handlers.admin.connecting_account import router as connecting_account
from handlers.admin.language_detection import router as language_detection
from handlers.admin.post_log import router as post_log
from handlers.user.checking_group_for_keywords import router as checking_group_for_keywords
from handlers.user.connect_account import router as connect_account
from handlers.user.connect_group import router as connect_group
from handlers.user.delete_group_from_database import router as delete_group_from_database
from handlers.user.entering_keyword import router as entering_keyword
from handlers.user.get_dada import router as get_dada
from handlers.user.handlers import router as handlers
from handlers.user.pars_ai import router as pars_ai
from handlers.user.post_doc import router as post_doc
from handlers.user.stop_tracking import router as stop_tracking
from handlers.user.transfer_rights import router as transfer_settings
from system.dispatcher import dp, bot
from web.server import app
logger.add("logs/log.log", rotation="1 MB", compression="zip", enqueue=True) # Логирование бота
async def main() -> None:
"""
Основная асинхронная функция для запуска Telegram-бота.
Выполняет следующие действия:
1. Инициализирует базу данных с помощью `init_db()`.
2. Регистрирует все обработчики команд и сообщений через соответствующие функции регистрации.
3. Запускает поллинг обновлений от Telegram через `dp.start_polling(bot)`.
Обработчики включают:
- Приветственное меню и основные команды.
- Ввод и хранение ключевых слов для отслеживания.
- Подключение пользовательских аккаунтов Telegram (.session файлы).
- Управление отслеживанием и остановкой парсинга.
- Экспорт данных, логирование, поиск групп через ИИ, выдачу документации и т.д.
:return: None
"""
try:
"""
Рабата с базой данных
"""
init_database()
clean_telegram_id_duplicates()
"""
Панель пользователя Telegram бота
"""
dp.include_router(handlers)
dp.include_router(entering_keyword)
dp.include_router(connect_group)
dp.include_router(get_dada)
dp.include_router(stop_tracking)
dp.include_router(pars_ai)
dp.include_router(post_doc)
dp.include_router(connect_account)
dp.include_router(checking_group_for_keywords)
dp.include_router(delete_group_from_database)
dp.include_router(transfer_settings)
"""
Панель администратора Telegram бота
"""
dp.include_router(admin)
dp.include_router(post_log)
dp.include_router(checking_group_for_ai)
dp.include_router(checking_accounts)
dp.include_router(language_detection)
dp.include_router(connecting_account)
# Миграция: приводим все категории к нижнему регистру
logger.info("🔄 Запуск миграции категорий в нижнем регистре...")
updated = migrate_categories_to_lowercase()
if updated:
logger.info(f"✅ Обновлено {updated} категорий на нижний регистр")
# Determine port
port_env = os.getenv("PORT")
if not port_env or port_env == "_____" or not port_env.isdigit():
port = 8000
else:
port = int(port_env)
logger.info(f"🌐 Starting FastAPI Web Server on http://0.0.0.0:{port}")
config = uvicorn.Config(app, host="0.0.0.0", port=port, loop="asyncio")
server = uvicorn.Server(config)
await asyncio.gather(
dp.start_polling(bot),
server.serve()
)
except Exception as e:
logger.exception(e)
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
asyncio.run(main())