Add Telegram bot entry point and handler registration

This commit is contained in:
arsam
2026-09-18 22:41:21 +03:30
parent 98c2831386
commit b3cc0fb739
+111
View File
@@ -0,0 +1,111 @@
"""Puppy Bot entry point. Run with: python bot.py"""
import logging
import sys
from telegram.ext import (
ApplicationBuilder,
CommandHandler,
InlineQueryHandler,
MessageHandler,
filters,
)
from config import TELEGRAM_TOKEN
import services.auth as auth
from services import settings as settings_store
from handlers import chat, inline
from handlers import admin
from handlers.help import cmd_help
from utils import context as runtime_context
logging.basicConfig(
format="%(asctime)s | %(name)s | %(levelname)s | %(message)s",
level=logging.INFO,
stream=sys.stdout,
)
logging.getLogger("httpx").setLevel(logging.WARNING)
logging.getLogger("telegram").setLevel(logging.WARNING)
logger = logging.getLogger("puppy")
async def _error_handler(update, ctx):
err = getattr(ctx, "error", None)
logger.exception("Unhandled bot error: %s", err)
runtime_context.record_error(f"Unhandled bot error: {err}")
def _register_handlers(app):
# ── General / all-auth ─────────────────────────────────
app.add_handler(CommandHandler("start", admin.cmd_start))
app.add_handler(CommandHandler("help", cmd_help))
app.add_handler(CommandHandler("ping", admin.cmd_ping))
app.add_handler(CommandHandler("clear", admin.cmd_clear))
app.add_handler(CommandHandler("myhistory", admin.cmd_myhistory))
app.add_handler(CommandHandler("setmaxtoken", admin.cmd_setmaxtoken))
app.add_handler(CommandHandler("getmaxtoken", admin.cmd_getmaxtoken))
app.add_handler(CommandHandler("resettoken", admin.cmd_resettoken))
app.add_handler(CommandHandler("setlang", admin.cmd_setlang))
app.add_handler(CommandHandler("status", admin.cmd_status))
app.add_handler(CommandHandler("model", admin.cmd_model))
app.add_handler(CommandHandler("togglesearch", admin.cmd_togglesearch))
app.add_handler(CommandHandler("search", admin.cmd_search))
app.add_handler(CommandHandler("ocr", admin.cmd_ocr))
app.add_handler(CommandHandler("imagine", admin.cmd_imagine))
app.add_handler(CommandHandler("myid", admin.cmd_myid))
# ── Owner-only ─────────────────────────────────────────
app.add_handler(CommandHandler("stats", admin.cmd_stats))
app.add_handler(CommandHandler("dashboard", admin.cmd_stats))
app.add_handler(CommandHandler("uptime", admin.cmd_uptime))
app.add_handler(CommandHandler("version", admin.cmd_version))
app.add_handler(CommandHandler("addauth", admin.cmd_addauth))
app.add_handler(CommandHandler("removeauth", admin.cmd_removeauth))
app.add_handler(CommandHandler("listauth", admin.cmd_listauth))
app.add_handler(CommandHandler("ban", admin.cmd_ban))
app.add_handler(CommandHandler("unban", admin.cmd_unban))
app.add_handler(CommandHandler("listban", admin.cmd_listban))
app.add_handler(CommandHandler("userinfo", admin.cmd_userinfo))
app.add_handler(CommandHandler("broadcast", admin.cmd_broadcast))
app.add_handler(CommandHandler("clearall", admin.cmd_clearall))
app.add_handler(CommandHandler("setpersonality", admin.cmd_setpersonality))
app.add_handler(CommandHandler("resetpersonality",admin.cmd_resetpersonality))
app.add_handler(CommandHandler("setmodel", admin.cmd_setmodel))
app.add_handler(CommandHandler("setprovider", admin.cmd_setprovider))
app.add_handler(CommandHandler("models", admin.cmd_models))
app.add_handler(CommandHandler("unlock", admin.cmd_unlock))
app.add_handler(CommandHandler("lock", admin.cmd_lock))
app.add_handler(CommandHandler("reload", admin.cmd_reload))
# ── Message handlers ───────────────────────────────────
app.add_handler(MessageHandler(filters.PHOTO & ~filters.COMMAND, chat.message_handler))
app.add_handler(MessageHandler(filters.Document.IMAGE & ~filters.COMMAND, chat.message_handler))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, chat.message_handler))
# ── Inline mode ────────────────────────────────────────
app.add_handler(InlineQueryHandler(inline.inline_handler))
def main():
if not TELEGRAM_TOKEN:
logger.error("TELEGRAM_TOKEN is not set.")
sys.exit(1)
auth.load()
settings_store.load()
logger.info("Auth loaded — %d authorized, %d banned",
len(auth.get_authorized()), len(auth.get_banned()))
app = (
ApplicationBuilder()
.token(TELEGRAM_TOKEN)
.build()
)
_register_handlers(app)
app.add_error_handler(_error_handler)
logger.info("Puppy is starting…")
app.run_polling(drop_pending_updates=True)
if __name__ == "__main__":
main()