Files
PWF/CoreRouters/callback.py
2025-11-05 17:27:15 +08:00

79 lines
2.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""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)}"