Files
tg_post_min/app/main.py
2025-08-28 04:28:37 +09:00

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()