main.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. """入口:启动 Web 管理面板(含 Bot 子进程管理)。
  2. 运行:
  3. python main.py
  4. python main.py --config /path/to/config.yaml
  5. 环境变量:
  6. LARK_PANEL_PASSWORD 面板登录密码(推荐,优先于配置文件)
  7. """
  8. from __future__ import annotations
  9. import argparse
  10. import logging
  11. import sys
  12. from pathlib import Path
  13. # 确保项目根在 sys.path
  14. sys.path.insert(0, str(Path(__file__).resolve().parent))
  15. from config import load_config # noqa: E402
  16. def parse_args() -> argparse.Namespace:
  17. p = argparse.ArgumentParser(description="飞书群聊自动转发机器人 - 管理面板")
  18. p.add_argument("--config", "-c", default=None, help="配置文件路径")
  19. return p.parse_args()
  20. def main() -> None:
  21. args = parse_args()
  22. cfg = load_config(args.config)
  23. logging.basicConfig(
  24. level=logging.INFO,
  25. format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
  26. datefmt="%Y-%m-%d %H:%M:%S",
  27. )
  28. if not cfg.panel_password:
  29. print("=" * 60, file=sys.stderr)
  30. print("警告:面板未设置密码!", file=sys.stderr)
  31. print("请设置环境变量 LARK_PANEL_PASSWORD 或在 config.yaml 的", file=sys.stderr)
  32. print("panel.password 字段配置密码后再启动。", file=sys.stderr)
  33. print("=" * 60, file=sys.stderr)
  34. import uvicorn
  35. from web.supervisor import app
  36. print(f"面板启动:http://{cfg.panel.host}:{cfg.panel.port}", flush=True)
  37. uvicorn.run(
  38. app,
  39. host=cfg.panel.host,
  40. port=cfg.panel.port,
  41. log_level="warning", # 减少 uvicorn 自己的日志噪音
  42. )
  43. if __name__ == "__main__":
  44. main()