Send verification challenges when Telegram hides join service messages, and subscribe to chat_member polling updates. Co-authored-by: Cursor <cursoragent@cursor.com>
44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
import asyncio
|
|
import logging
|
|
|
|
from aiogram import Bot, Dispatcher
|
|
|
|
from .config import load_config
|
|
from .db import Database
|
|
from .handlers import register_handlers, sweeper_loop
|
|
|
|
|
|
async def main() -> None:
|
|
logging.basicConfig(level=logging.INFO)
|
|
|
|
cfg = load_config()
|
|
logging.getLogger("bot").info(
|
|
"Starting with chat_id=%s db_path=%s verify_window=%ss thanks_ttl=%ss",
|
|
cfg.chat_id,
|
|
cfg.db_path,
|
|
cfg.verify_window_seconds,
|
|
cfg.thanks_ttl_seconds,
|
|
)
|
|
bot = Bot(token=cfg.bot_token)
|
|
dp = Dispatcher()
|
|
|
|
db = Database(cfg.db_path)
|
|
await db.connect()
|
|
|
|
await register_handlers(dp, cfg=cfg, db=db)
|
|
|
|
asyncio.create_task(sweeper_loop(bot=bot, cfg=cfg, db=db))
|
|
try:
|
|
allowed_updates = list(dp.resolve_used_update_types())
|
|
if "chat_member" not in allowed_updates:
|
|
allowed_updates.append("chat_member")
|
|
await dp.start_polling(bot, allowed_updates=allowed_updates)
|
|
finally:
|
|
await db.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|
|
|