Add modular Roblox buyer bot and documentation

This commit is contained in:
2026-07-20 06:24:45 +05:00
commit c9413efd6a
29 changed files with 2607 additions and 0 deletions
+54
View File
@@ -0,0 +1,54 @@
import asyncio
import logging
from datetime import datetime
from aiogram import Bot, Dispatcher
from aiogram.enums import ParseMode
from aiogram.fsm.storage.memory import MemoryStorage
from aiogram.client.default import DefaultBotProperties
from config import ADMIN_ID, BOT_TOKEN, LOG_BOT_TOKEN, SHOP_NAME
from db.storage import load_config, load_stats
from handlers import admin, start, upload, user
from runtime import set_bots
from utils.logging import log_admin
async def main() -> None:
defaults = DefaultBotProperties(parse_mode=ParseMode.HTML)
bot = Bot(token=BOT_TOKEN, default=defaults)
log_bot = Bot(token=LOG_BOT_TOKEN, default=defaults) if LOG_BOT_TOKEN else None
set_bots(bot, log_bot)
dispatcher = Dispatcher(storage=MemoryStorage())
dispatcher.include_router(start.router)
dispatcher.include_router(user.router)
dispatcher.include_router(admin.router)
dispatcher.include_router(upload.router)
load_config()
load_stats()
await log_admin(
bot,
ADMIN_ID,
f"<b>{SHOP_NAME}</b> started\n{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}",
log_bot,
)
try:
await dispatcher.start_polling(bot)
finally:
if log_bot:
await log_bot.session.close()
await bot.session.close()
if __name__ == "__main__":
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s",
handlers=[
logging.FileHandler("bot.log", encoding="utf-8"),
logging.StreamHandler(),
],
)
asyncio.run(main())