85 lines
2.7 KiB
Python
85 lines
2.7 KiB
Python
"""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]
|
||
message = content[len(command):].strip()
|
||
config.Log("Info", f"识别指令: command={command}")
|
||
|
||
# 处理指令
|
||
result = await handle_command(command, message, callback_data.chatid, callback_data.creator)
|
||
if result:
|
||
return JSONResponse({"result": "ok", "message": result})
|
||
else:
|
||
return JSONResponse({"result": "ok"})
|
||
|
||
except Exception as e:
|
||
config.Log("Error", f"处理Callback异常: {e}")
|
||
if ALWAYS_RETURN_OK:
|
||
return JSONResponse({"result": "ok"})
|
||
else:
|
||
return JSONResponse({"result": "error", "message": str(e)})
|
||
|
||
|
||
async def handle_command(command: str, message: str,
|
||
chat_id: int, user_id: int) -> str|None:
|
||
"""处理指令
|
||
|
||
Args:
|
||
command: 指令
|
||
message: 消息内容
|
||
chat_id: 会话ID
|
||
user_id: 用户ID
|
||
|
||
Returns:
|
||
回复文本或None
|
||
"""
|
||
try:
|
||
plugin = PluginInterface.plugin_instances.get(command, None)
|
||
if plugin:
|
||
config.Log("Info", f"已找到插件注册指令: {command}, class: {plugin.__class__.__name__}")
|
||
return await plugin.callback(message, chat_id, user_id)
|
||
else:
|
||
return f"❌ 未识别指令: {command}"
|
||
except Exception as e:
|
||
config.Log("Error", f"处理指令异常: {e}", exc_info=True)
|
||
return f"❌ 处理指令时出错: {str(e)}"
|
||
|