"""入口:启动 Web 管理面板(含 Bot 子进程管理)。 运行: python main.py python main.py --config /path/to/config.yaml 环境变量: LARK_PANEL_PASSWORD 面板登录密码(推荐,优先于配置文件) """ from __future__ import annotations import argparse import logging import sys from pathlib import Path # 确保项目根在 sys.path sys.path.insert(0, str(Path(__file__).resolve().parent)) from config import load_config # noqa: E402 def parse_args() -> argparse.Namespace: p = argparse.ArgumentParser(description="飞书群聊自动转发机器人 - 管理面板") p.add_argument("--config", "-c", default=None, help="配置文件路径") return p.parse_args() def main() -> None: args = parse_args() cfg = load_config(args.config) logging.basicConfig( level=logging.INFO, format="%(asctime)s [%(levelname)s] %(name)s: %(message)s", datefmt="%Y-%m-%d %H:%M:%S", ) if not cfg.panel_password: print("=" * 60, file=sys.stderr) print("警告:面板未设置密码!", file=sys.stderr) print("请设置环境变量 LARK_PANEL_PASSWORD 或在 config.yaml 的", file=sys.stderr) print("panel.password 字段配置密码后再启动。", file=sys.stderr) print("=" * 60, file=sys.stderr) import uvicorn from web.supervisor import app print(f"面板启动:http://{cfg.panel.host}:{cfg.panel.port}", flush=True) uvicorn.run( app, host=cfg.panel.host, port=cfg.panel.port, log_level="warning", # 减少 uvicorn 自己的日志噪音 ) if __name__ == "__main__": main()