From 668c9bbad6fc5da798179513a7a17e2cb00db2bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A2=A8=E6=A2=93=E6=9F=92?= <1787882683@qq.com> Date: Sun, 4 May 2025 01:41:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=87=8D=E6=9E=84API=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8=EF=BC=8C=E6=B7=BB=E5=8A=A0=E9=85=8D=E7=BD=AE=E9=87=8D?= =?UTF-8?q?=E8=BD=BD=E5=8A=9F=E8=83=BD=E5=B9=B6=E7=A7=BB=E9=99=A4=E5=86=97?= =?UTF-8?q?=E4=BD=99=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/__init__.py | 8 -------- src/api/main.py | 28 +++++++++++++++++++++++++++ src/api/reload_config.py | 18 +++++++++++++++++ src/main.py | 5 +++++ src/plugins/config_reload/__init__.py | 1 - src/plugins/config_reload/api.py | 19 ------------------ src/plugins/config_reload/test.py | 4 ---- 7 files changed, 51 insertions(+), 32 deletions(-) create mode 100644 src/api/main.py create mode 100644 src/api/reload_config.py delete mode 100644 src/plugins/config_reload/__init__.py delete mode 100644 src/plugins/config_reload/api.py delete mode 100644 src/plugins/config_reload/test.py diff --git a/src/api/__init__.py b/src/api/__init__.py index f5bc08a6e..e69de29bb 100644 --- a/src/api/__init__.py +++ b/src/api/__init__.py @@ -1,8 +0,0 @@ -from fastapi import FastAPI -from strawberry.fastapi import GraphQLRouter - -app = FastAPI() - -graphql_router = GraphQLRouter(schema=None, path="/") # Replace `None` with your actual schema - -app.include_router(graphql_router, prefix="/graphql", tags=["GraphQL"]) diff --git a/src/api/main.py b/src/api/main.py new file mode 100644 index 000000000..e8d2054f1 --- /dev/null +++ b/src/api/main.py @@ -0,0 +1,28 @@ +from fastapi import APIRouter +from strawberry.fastapi import GraphQLRouter +# from src.config.config import BotConfig +from src.common.logger_manager import get_logger +from src.api.reload_config import reload_config as reload_config_func +from src.common.server import global_server +# import uvicorn +# import os + +router = APIRouter() + + +logger = get_logger("api") + +# maiapi = FastAPI() +logger.info("API server started.") +graphql_router = GraphQLRouter(schema=None, path="/") # Replace `None` with your actual schema + +router.include_router(graphql_router, prefix="/graphql", tags=["GraphQL"]) + +@router.post("/config/reload") +async def reload_config(): + return await reload_config_func() + +def start_api_server(): + """启动API服务器""" + global_server.register_router(router, prefix="/api/v1") + diff --git a/src/api/reload_config.py b/src/api/reload_config.py new file mode 100644 index 000000000..33a02e731 --- /dev/null +++ b/src/api/reload_config.py @@ -0,0 +1,18 @@ +from fastapi import HTTPException +from rich.traceback import install +from src.config.config import BotConfig +import os +install(extra_lines=3) + + + +async def reload_config(): + try: + from src.config import config as config_module + bot_config_path = os.path.join(BotConfig.get_config_dir(), "bot_config.toml") + config_module.global_config = BotConfig.load_config(config_path=bot_config_path) + return {"status": "reloaded"} + except FileNotFoundError as e: + raise HTTPException(status_code=404, detail=str(e)) from e + except Exception as e: + raise HTTPException(status_code=500, detail=f"重载配置时发生错误: {str(e)}") from e \ No newline at end of file diff --git a/src/main.py b/src/main.py index 26a56ca2c..343028429 100644 --- a/src/main.py +++ b/src/main.py @@ -1,5 +1,6 @@ import asyncio import time +import os from .plugins.utils.statistic import LLMStatistics from .plugins.moods.moods import MoodManager from .plugins.schedule.schedule_generator import bot_schedule @@ -18,6 +19,7 @@ from .plugins.remote import heartbeat_thread # noqa: F401 from .individuality.individuality import Individuality from .common.server import global_server from rich.traceback import install +from .api.main import start_api_server install(extra_lines=3) @@ -54,6 +56,9 @@ class MainSystem: self.llm_stats.start() logger.success("LLM统计功能启动成功") + # 启动API服务器 + start_api_server() + logger.success("API服务器启动成功") # 初始化表情管理器 emoji_manager.initialize() logger.success("表情包管理器初始化成功") diff --git a/src/plugins/config_reload/__init__.py b/src/plugins/config_reload/__init__.py deleted file mode 100644 index 8b1378917..000000000 --- a/src/plugins/config_reload/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/plugins/config_reload/api.py b/src/plugins/config_reload/api.py deleted file mode 100644 index 56240b88e..000000000 --- a/src/plugins/config_reload/api.py +++ /dev/null @@ -1,19 +0,0 @@ -from fastapi import APIRouter, HTTPException -from rich.traceback import install - -install(extra_lines=3) - -# 创建APIRouter而不是FastAPI实例 -router = APIRouter() - - -@router.post("/reload-config") -async def reload_config(): - try: # TODO: 实现配置重载 - # bot_config_path = os.path.join(BotConfig.get_config_dir(), "bot_config.toml") - # BotConfig.reload_config(config_path=bot_config_path) - return {"message": "TODO: 实现配置重载", "status": "unimplemented"} - except FileNotFoundError as e: - raise HTTPException(status_code=404, detail=str(e)) from e - except Exception as e: - raise HTTPException(status_code=500, detail=f"重载配置时发生错误: {str(e)}") from e diff --git a/src/plugins/config_reload/test.py b/src/plugins/config_reload/test.py deleted file mode 100644 index fc4fc1e8c..000000000 --- a/src/plugins/config_reload/test.py +++ /dev/null @@ -1,4 +0,0 @@ -import requests - -response = requests.post("http://localhost:8080/api/reload-config") -print(response.json())