Initial commit

This commit is contained in:
2026-05-13 23:38:18 +02:00
commit 8b053a7adb
21 changed files with 6642 additions and 0 deletions

51
main.py Normal file
View File

@@ -0,0 +1,51 @@
"""Entry point — wires everything together."""
import asyncio
import logging
from aiogram import Bot, Dispatcher
from aiogram.fsm.storage.memory import MemoryStorage
from config import TOKEN
from hashing import preload_backup_hashes
from middlewares import TosMiddleware, UsernameTrackerMiddleware
from persistence import load_backup_ids, load_blacklist, load_confirmed_users
from routers import admin, group, private
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
)
logger = logging.getLogger(__name__)
async def main() -> None:
# 1. Load persisted data
load_backup_ids()
load_confirmed_users()
load_blacklist()
bot = Bot(token=TOKEN)
dp = Dispatcher(storage=MemoryStorage())
# 2. Log cached hashes
import bot_state as state
logger.info("Loaded %d file hashes from cache.", len(state.backup_hashes))
# 3. Middlewares
dp.update.outer_middleware(UsernameTrackerMiddleware())
dp.update.outer_middleware(TosMiddleware())
# 4. Routers
dp.include_router(private.router)
dp.include_router(admin.router)
dp.include_router(group.router)
# 5. Background tasks
asyncio.create_task(group.purge_chatroom_semipublic_group(bot))
logger.info("Bot starting…")
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())