Files
2026-07-09 23:39:40 +03:00

47 lines
1.1 KiB
Python

from __future__ import annotations
import argparse
import asyncio
import logging
from aiogram import Bot
from vpn_bot.config import Config
from vpn_bot.db import Database
from vpn_bot.handlers import BotApp, build_dispatcher
from vpn_bot.marzban import MarzbanClient
async def run(config_path: str) -> None:
config = Config.load(config_path)
logging.basicConfig(level=logging.INFO)
db = Database(config.database_path)
db.init()
bot = Bot(config.telegram_bot_token)
marzban = MarzbanClient(
base_url=config.marzban_url,
username=config.marzban_username,
password=config.marzban_password,
)
app = BotApp(config=config, db=db, marzban=marzban)
dp = build_dispatcher(app)
try:
await dp.start_polling(bot)
finally:
await marzban.close()
await bot.session.close()
def main() -> None:
parser = argparse.ArgumentParser(description="Telegram bot for Marzban VPN panel")
parser.add_argument("-c", "--config", default="config.toml", help="Path to config TOML file")
args = parser.parse_args()
asyncio.run(run(args.config))
if __name__ == "__main__":
main()