Files
mai-bot/plugin-templates/MaiBot-Napcat-Adapter/codecs/notice/renderer.py

64 lines
2.9 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.
"""NapCat 通知文本渲染器。"""
from __future__ import annotations
from typing import Any, Mapping
class NapCatNoticeTextRenderer:
"""根据通知载荷生成可读文本。"""
def build_notice_text(self, payload: Mapping[str, Any], actor_name: str) -> str:
"""根据 NapCat 通知事件生成可读文本。
Args:
payload: 原始通知事件。
actor_name: 事件操作者显示名。
Returns:
str: 生成的可读通知文本。
"""
notice_type = str(payload.get("notice_type") or "").strip()
sub_type = str(payload.get("sub_type") or "").strip()
target_id = str(payload.get("target_id") or "").strip()
target_user_id = str(payload.get("user_id") or "").strip()
is_natural_lift = bool(payload.get("is_natural_lift", False))
if notice_type in {"group_recall", "friend_recall"}:
return f"{actor_name} 撤回了一条消息"
if notice_type == "notify" and sub_type == "poke":
target_text = f" -> {target_id}" if target_id else ""
return f"{actor_name} 发起了戳一戳{target_text}"
if notice_type == "notify" and sub_type == "group_name":
return f"{actor_name} 修改了群名称"
if notice_type == "group_ban" and sub_type == "ban":
duration = payload.get("duration")
if target_user_id in {"", "0"}:
return f"{actor_name} 开启了全体禁言"
return f"{actor_name} 禁言了用户 {target_user_id},时长 {duration}"
if notice_type == "group_ban" and sub_type == "whole_lift_ban":
if is_natural_lift:
return "群全体禁言已自然解除"
return f"{actor_name} 解除了全体禁言"
if notice_type == "group_ban" and sub_type == "lift_ban":
if is_natural_lift:
return f"用户 {target_user_id} 的禁言已自然解除"
return f"{actor_name} 解除了用户 {target_user_id} 的禁言"
if notice_type == "group_upload":
file_info = payload.get("file", {})
file_name = ""
if isinstance(file_info, Mapping):
file_name = str(file_info.get("name") or "").strip()
return f"{actor_name} 上传了文件{f'{file_name}' if file_name else ''}"
if notice_type == "group_increase":
return f"{actor_name} 加入了群聊"
if notice_type == "group_decrease":
return f"{actor_name} 离开了群聊"
if notice_type == "group_admin":
return f"{actor_name} 的群管理员状态发生变化"
if notice_type == "essence":
return f"{actor_name} 触发了精华消息事件"
if notice_type == "group_msg_emoji_like":
return f"{actor_name} 给一条消息添加了表情回应"
return f"[notice] {notice_type}.{sub_type}".strip(".")