Files

70 lines
2.4 KiB
Python
Raw Permalink 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.
"""NapCat 消息工具扩展。"""
from __future__ import annotations
from typing import Any, Dict
from maibot_sdk import Tool
from maibot_sdk.types import ToolParameterInfo, ToolParamType
from .message import NapCatMessageApiMixin
def _tool_param(name: str, param_type: ToolParamType, description: str, required: bool) -> ToolParameterInfo:
"""构造工具参数声明。"""
return ToolParameterInfo(name=name, param_type=param_type, description=description, required=required)
@Tool(
"find_user_qq_id",
description="根据指定消息的 msg_id 查询该条消息发送者的 QQ 号信息",
parameters=[
_tool_param("msg_id", ToolParamType.STRING, "要查询的消息 ID", True),
],
)
async def handle_find_user_qq_id(self: NapCatMessageApiMixin, msg_id: str = "", **kwargs: Any) -> Dict[str, Any]:
"""根据消息 ID 查询发送者的 QQ 号信息。"""
del kwargs
normalized_msg_id = str(self._normalize_positive_int(msg_id, "msg_id"))
message_detail = await self._require_query_service().get_message_detail(normalized_msg_id)
if not isinstance(message_detail, dict):
return {
"success": False,
"content": f"未找到 msg_id={normalized_msg_id} 对应的消息记录",
"msg_id": normalized_msg_id,
}
sender = message_detail.get("sender", {})
if not isinstance(sender, dict):
sender = {}
user_id = str(message_detail.get("user_id") or sender.get("user_id") or sender.get("uin") or "").strip()
if not user_id:
return {
"success": False,
"content": f"已获取消息详情,但未解析出 msg_id={normalized_msg_id} 的发送者 QQ 号",
"msg_id": normalized_msg_id,
"message_detail": message_detail,
}
nickname = str(sender.get("nickname") or sender.get("name") or "").strip()
cardname = str(sender.get("card") or "").strip()
sender_info = {
"user_id": user_id,
"nickname": nickname or None,
"cardname": cardname or None,
}
display_name = cardname or nickname or user_id
return {
"success": True,
"content": f"msg_id={normalized_msg_id} 的发送者 QQ 号是 {user_id}(显示名:{display_name}",
"msg_id": normalized_msg_id,
"sender": sender_info,
}
NapCatMessageApiMixin.handle_find_user_qq_id = handle_find_user_qq_id