Files

432 lines
19 KiB
Python

"""NapCat 消息与互动 API 端点。"""
from __future__ import annotations
from typing import Any, Dict, Optional
from maibot_sdk import API
from .support import NapCatApiIdInput, NapCatApiParamsInput, NapCatApiSupportMixin
class NapCatMessageApiMixin(NapCatApiSupportMixin):
"""NapCat 消息、互动与 AI 相关 API。"""
@API("adapter.napcat.message.send_poke", description="发送戳一戳", version="1", public=True)
async def api_send_poke(
self,
user_id: Optional[NapCatApiIdInput] = None,
group_id: Optional[NapCatApiIdInput] = None,
target_id: Optional[NapCatApiIdInput] = None,
qq_id: Optional[NapCatApiIdInput] = None,
) -> Dict[str, Any]:
"""发送戳一戳。
Args:
user_id: 目标用户号。
group_id: 可选群号。
target_id: 官方 ``send_poke`` 动作支持的目标 ID。
qq_id: 兼容旧版调用方式的 ``user_id`` 别名。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
normalized_user_id_input = str(user_id).strip() if user_id is not None else ""
normalized_qq_id_input = str(qq_id).strip() if qq_id is not None else ""
if normalized_user_id_input and normalized_qq_id_input:
resolved_user_id = self._normalize_positive_int(user_id, "user_id")
resolved_qq_id = self._normalize_positive_int(qq_id, "qq_id")
if resolved_user_id != resolved_qq_id:
raise ValueError("user_id 与 qq_id 不能同时传递不同的值")
elif normalized_user_id_input:
resolved_user_id = self._normalize_positive_int(user_id, "user_id")
elif normalized_qq_id_input:
resolved_user_id = self._normalize_positive_int(qq_id, "qq_id")
else:
raise ValueError("user_id 不能为空")
normalized_group_id: Optional[int] = None
if group_id is not None and str(group_id).strip():
normalized_group_id = self._normalize_positive_int(group_id, "group_id")
normalized_target_id: Optional[int] = None
if target_id is not None and str(target_id).strip():
normalized_target_id = self._normalize_positive_int(target_id, "target_id")
return await self._require_query_service().send_poke(
user_id=resolved_user_id,
group_id=normalized_group_id,
target_id=normalized_target_id,
)
@API("adapter.napcat.message.delete_msg", description="撤回消息", version="1", public=True)
async def api_delete_msg(self, message_id: NapCatApiIdInput) -> Dict[str, Any]:
"""撤回消息。
Args:
message_id: 消息 ID。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._require_query_service().delete_message(
message_id=self._normalize_positive_int(message_id, "message_id")
)
@API("adapter.napcat.message.send_group_ai_record", description="发送群 AI 语音", version="1", public=True)
async def api_send_group_ai_record(
self,
group_id: NapCatApiIdInput,
character: object,
text: object,
) -> Dict[str, Any]:
"""发送群 AI 语音。
Args:
group_id: 群号。
character: 角色标识。
text: 语音文本。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._require_query_service().send_group_ai_record(
group_id=self._normalize_positive_int(group_id, "group_id"),
character=self._normalize_non_empty_string(character, "character"),
text=self._normalize_non_empty_string(text, "text"),
)
@API("adapter.napcat.message.set_msg_emoji_like", description="给消息贴表情", version="1", public=True)
async def api_set_msg_emoji_like(
self,
message_id: NapCatApiIdInput,
emoji_id: NapCatApiIdInput,
set: bool = True,
) -> Dict[str, Any]:
"""给消息贴表情或取消表情。
Args:
message_id: 消息 ID。
emoji_id: 表情 ID。
set: 是否设置为已贴表情。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._require_query_service().set_message_emoji_like(
message_id=self._normalize_positive_int(message_id, "message_id"),
emoji_id=self._normalize_positive_int(emoji_id, "emoji_id"),
set_like=bool(set),
)
@API("adapter.napcat.message.get_msg", description="获取消息详情", version="1", public=True)
async def api_get_msg(self, message_id: NapCatApiIdInput) -> Optional[Dict[str, Any]]:
"""获取消息详情。
Args:
message_id: 消息 ID。
Returns:
Optional[Dict[str, Any]]: 消息详情字典;失败时返回 ``None``。
"""
return await self._require_query_service().get_message_detail(
str(self._normalize_positive_int(message_id, "message_id"))
)
@API("adapter.napcat.message.get_forward_msg", description="获取合并转发消息", version="1", public=True)
async def api_get_forward_msg(
self,
message_id: object = "",
id: object = "",
) -> Optional[Dict[str, Any]]:
"""获取合并转发消息详情。
Args:
message_id: 合并转发消息 ID。
id: NapCat 官方文档中的兼容字段。
Returns:
Optional[Dict[str, Any]]: 合并转发消息详情;失败时返回 ``None``。
"""
normalized_message_id = str(message_id or "").strip()
normalized_forward_id = str(id or "").strip()
if normalized_message_id and normalized_forward_id and normalized_message_id != normalized_forward_id:
raise ValueError("message_id 与 id 不能同时传递不同的值")
if not normalized_message_id and not normalized_forward_id:
raise ValueError("message_id 或 id 至少提供一个")
return await self._require_query_service().get_forward_message(
message_id=normalized_message_id or None,
forward_id=normalized_forward_id or None,
)
@API("adapter.napcat.message.ark_share_group", description="分享群 (Ark)", version="1", public=True)
async def api_action_ark_share_group(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``ArkShareGroup`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("ArkShareGroup", params)
@API("adapter.napcat.message.ark_share_peer", description="分享用户 (Ark)", version="1", public=True)
async def api_action_ark_share_peer(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``ArkSharePeer`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("ArkSharePeer", params)
@API(
"adapter.napcat.message.click_inline_keyboard_button", description="点击内联键盘按钮", version="1", public=True
)
async def api_action_click_inline_keyboard_button(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``click_inline_keyboard_button`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("click_inline_keyboard_button", params)
@API("adapter.napcat.message.fetch_emoji_like", description="获取表情点赞详情", version="1", public=True)
async def api_action_fetch_emoji_like(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``fetch_emoji_like`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("fetch_emoji_like", params)
@API("adapter.napcat.message.forward_friend_single_msg", description="转发单条消息", version="1", public=True)
async def api_action_forward_friend_single_msg(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``forward_friend_single_msg`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("forward_friend_single_msg", params)
@API("adapter.napcat.message.forward_group_single_msg", description="转发单条消息", version="1", public=True)
async def api_action_forward_group_single_msg(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``forward_group_single_msg`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("forward_group_single_msg", params)
@API("adapter.napcat.message.friend_poke", description="发送戳一戳", version="1", public=True)
async def api_action_friend_poke(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``friend_poke`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("friend_poke", params)
@API("adapter.napcat.message.get_ai_record", description="获取 AI 语音", version="1", public=True)
async def api_action_get_ai_record(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``get_ai_record`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("get_ai_record", params)
@API("adapter.napcat.message.get_emoji_likes", description="获取消息表情点赞列表", version="1", public=True)
async def api_action_get_emoji_likes(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``get_emoji_likes`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("get_emoji_likes", params)
@API("adapter.napcat.message.get_friend_msg_history", description="获取好友历史消息", version="1", public=True)
async def api_action_get_friend_msg_history(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``get_friend_msg_history`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("get_friend_msg_history", params)
@API("adapter.napcat.message.get_group_msg_history", description="获取群历史消息", version="1", public=True)
async def api_action_get_group_msg_history(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``get_group_msg_history`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("get_group_msg_history", params)
@API("adapter.napcat.message.mark_all_as_read", description="标记所有消息已读", version="1", public=True)
async def api_action_mark_all_as_read(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``_mark_all_as_read`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("_mark_all_as_read", params)
@API("adapter.napcat.message.mark_group_msg_as_read", description="标记群聊已读", version="1", public=True)
async def api_action_mark_group_msg_as_read(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``mark_group_msg_as_read`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("mark_group_msg_as_read", params)
@API("adapter.napcat.message.mark_msg_as_read", description="标记消息已读 (Go-CQHTTP)", version="1", public=True)
async def api_action_mark_msg_as_read(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``mark_msg_as_read`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("mark_msg_as_read", params)
@API("adapter.napcat.message.mark_private_msg_as_read", description="标记私聊已读", version="1", public=True)
async def api_action_mark_private_msg_as_read(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``mark_private_msg_as_read`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("mark_private_msg_as_read", params)
@API("adapter.napcat.message.send_ark_share", description="分享用户 (Ark)", version="1", public=True)
async def api_action_send_ark_share(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``send_ark_share`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("send_ark_share", params)
@API("adapter.napcat.message.send_forward_msg", description="发送合并转发消息", version="1", public=True)
async def api_action_send_forward_msg(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``send_forward_msg`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("send_forward_msg", params)
@API("adapter.napcat.message.send_group_ark_share", description="分享群 (Ark)", version="1", public=True)
async def api_action_send_group_ark_share(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``send_group_ark_share`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("send_group_ark_share", params)
@API("adapter.napcat.message.send_group_forward_msg", description="发送群合并转发消息", version="1", public=True)
async def api_action_send_group_forward_msg(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``send_group_forward_msg`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("send_group_forward_msg", params)
@API("adapter.napcat.message.send_msg", description="发送消息", version="1", public=True)
async def api_action_send_msg(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``send_msg`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("send_msg", params)
@API(
"adapter.napcat.message.send_private_forward_msg", description="发送私聊合并转发消息", version="1", public=True
)
async def api_action_send_private_forward_msg(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``send_private_forward_msg`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("send_private_forward_msg", params)
@API("adapter.napcat.message.send_private_msg", description="发送私聊消息", version="1", public=True)
async def api_action_send_private_msg(self, params: NapCatApiParamsInput = None) -> Dict[str, Any]:
"""调用 NapCat 的 ``send_private_msg`` 动作。
Args:
params: 传递给 NapCat 的动作参数字典;具体字段请参考 NapCat 官方文档。
Returns:
Dict[str, Any]: NapCat 返回的原始响应字典。
"""
return await self._call_napcat_action("send_private_msg", params)