"""Callback路由处理""" from ..Convention.Runtime.GlobalConfig import ProjectConfig from fastapi import APIRouter, Request from fastapi.responses import JSONResponse from ..CoreModules.models import CallbackRequest from ..CoreModules.plugin_interface import PluginInterface config = ProjectConfig() ALWAYS_RETURN_OK = config.FindItem("always_return_ok", True) # 返回ok,可以避免重试 router = APIRouter() @router.get("/callback") async def callback_verify(): """Callback可用性校验""" config.Log("Info", "收到Callback验证请求") return JSONResponse({"result": "ok"}) @router.post("/callback") async def callback_receive(request: Request): """Callback消息""" try: # 解析请求数据 data = await request.json() config.Log("Info", f"完整callback数据: {data}") # 验证请求 try: callback_data = CallbackRequest(**data) except Exception as e: config.Log("Error", f"请求数据验证失败: {e}") if ALWAYS_RETURN_OK: return JSONResponse({"result": "ok"}) else: return JSONResponse({"result": "error", "message": str(e)}) # 解析指令 content = callback_data.content command = content.split(" ")[0] config.Log("Info", f"识别指令: command={command}") # TODO: 处理指令 return await handle_command(command, content, callback_data.chatid, callback_data.creator) except Exception as e: config.Log("Error", f"处理Callback异常: {e}", exc_info=True) if ALWAYS_RETURN_OK: return JSONResponse({"result": "ok"}) else: return JSONResponse({"result": "error", "message": str(e)}) async def handle_command(command: str, content: str, chat_id: int, user_id: int) -> str: """处理游戏指令 Args: command: 指令 content: 消息内容 chat_id: 会话ID user_id: 用户ID Returns: 回复文本 """ try: plugin = PluginInterface.plugin_instances.get(command, None) if plugin: return plugin.callback(content, chat_id, user_id) else: return f"❌ 未识别指令: {command}" except Exception as e: config.Log("Error", f"处理指令异常: {e}", exc_info=True) return f"❌ 处理指令时出错: {str(e)}"