72 lines
2.8 KiB
Python
72 lines
2.8 KiB
Python
# app/main.py
|
|
import logging
|
|
from telegram.ext import ApplicationBuilder
|
|
from app.config import load_config
|
|
from app.infra.metrics import start_metrics_server
|
|
|
|
# глобальные колбэки (узкие паттерны) и ошибки — держим в main
|
|
from app.bot.handlers.callbacks import on_callback
|
|
from app.bot.handlers.bind_chat import bind_chat_cb
|
|
from app.bot.handlers.security import security_cb
|
|
from app.bot.handlers.dict_commands import (
|
|
dicts_link_cmd, dicts_unlink_cmd,
|
|
dicts_link_all_cmd, dicts_unlink_all_cmd,
|
|
dicts_linked_cmd,
|
|
)
|
|
from app.bot.handlers.errors import on_error
|
|
|
|
# роутеры
|
|
from app.bot.routers.private import register_private_handlers
|
|
from app.bot.routers.group import register_group_handlers
|
|
from app.bot.routers.channel import register_channel_handlers
|
|
|
|
def main():
|
|
cfg = load_config()
|
|
logging.basicConfig(level=getattr(logging, cfg.log_level.upper(), logging.INFO))
|
|
|
|
# приглушим шум httpx/httpcore
|
|
logging.getLogger("httpx").setLevel(logging.WARNING)
|
|
logging.getLogger("httpx").propagate = False
|
|
logging.getLogger("httpcore").setLevel(logging.WARNING)
|
|
logging.getLogger("httpcore").propagate = False
|
|
|
|
# метрики Prometheus
|
|
start_metrics_server(cfg.metrics_port)
|
|
|
|
app = ApplicationBuilder().token(cfg.bot_token).build()
|
|
|
|
# === РОУТЕРЫ по типам чатов ===
|
|
register_private_handlers(app) # ЛС
|
|
register_group_handlers(app) # группы/супергруппы
|
|
register_channel_handlers(app) # каналы
|
|
|
|
# === УЗКИЕ callback-и, общий для редактора ===
|
|
from telegram.ext import CallbackQueryHandler
|
|
|
|
# настройки защитника
|
|
app.add_handler(CallbackQueryHandler(security_cb, pattern=r"^pol:"))
|
|
# привязка канала кнопкой «Привязать этот канал»
|
|
app.add_handler(CallbackQueryHandler(bind_chat_cb, pattern=r"^bind:"))
|
|
# редактор/мультивыбор (включаем все draft_* и тумблеры)
|
|
app.add_handler(CallbackQueryHandler(
|
|
on_callback,
|
|
pattern=r"^(draft_.*|tgl:|selall:|clear:|sendmulti:)"
|
|
))
|
|
|
|
# (опционально) текстовые команды управления словарями (и в ЛС, и в группе)
|
|
from telegram.ext import CommandHandler
|
|
app.add_handler(CommandHandler("dicts_link", dicts_link_cmd))
|
|
app.add_handler(CommandHandler("dicts_unlink", dicts_unlink_cmd))
|
|
app.add_handler(CommandHandler("dicts_link_all", dicts_link_all_cmd))
|
|
app.add_handler(CommandHandler("dicts_unlink_all", dicts_unlink_all_cmd))
|
|
app.add_handler(CommandHandler("dicts_linked", dicts_linked_cmd))
|
|
|
|
# ошибки
|
|
app.add_error_handler(on_error)
|
|
|
|
app.run_polling(allowed_updates=None)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|