mirror of
https://github.com/AstrBotDevs/AstrBot
synced 2026-07-16 01:40:15 +08:00
* feat: introduce a command /name to name a umo, and display in ui * docs: add docs * fix * fix test * fix: test
66 lines
2.1 KiB
Python
66 lines
2.1 KiB
Python
from typing import Any
|
|
|
|
from astrbot.core.db.po import UmoAlias
|
|
|
|
MAX_UMO_NAME_LENGTH = 255
|
|
|
|
|
|
def normalize_umo_name(name: Any) -> str:
|
|
if name is None:
|
|
return ""
|
|
return str(name).strip()[:MAX_UMO_NAME_LENGTH]
|
|
|
|
|
|
def parse_umo(umo: Any) -> dict[str, str]:
|
|
umo_str = "" if umo is None else str(umo)
|
|
parts = umo_str.split(":")
|
|
return {
|
|
"platform": parts[0] if len(parts) >= 1 and parts[0] else "unknown",
|
|
"message_type": parts[1] if len(parts) >= 2 and parts[1] else "unknown",
|
|
"session_id": ":".join(parts[2:]) if len(parts) >= 3 else umo_str,
|
|
}
|
|
|
|
|
|
def get_event_auto_name(event: Any) -> str:
|
|
group_id = event.get_group_id() if hasattr(event, "get_group_id") else ""
|
|
message_obj = getattr(event, "message_obj", None)
|
|
group = getattr(message_obj, "group", None)
|
|
|
|
if group_id:
|
|
group_name = normalize_umo_name(getattr(group, "group_name", None))
|
|
return group_name or normalize_umo_name(group_id)
|
|
|
|
sender_name = ""
|
|
if hasattr(event, "get_sender_name"):
|
|
sender_name = event.get_sender_name()
|
|
sender_id = event.get_sender_id() if hasattr(event, "get_sender_id") else ""
|
|
return normalize_umo_name(sender_name) or normalize_umo_name(sender_id)
|
|
|
|
|
|
def get_umo_display_name(
|
|
*,
|
|
umo: str,
|
|
auto_name: str | None = None,
|
|
user_alias: str | None = None,
|
|
) -> str:
|
|
return normalize_umo_name(user_alias) or normalize_umo_name(auto_name) or umo
|
|
|
|
|
|
def serialize_umo_alias(alias: UmoAlias | None, umo: str) -> dict[str, str]:
|
|
auto_name = normalize_umo_name(alias.auto_name if alias else "")
|
|
user_alias = normalize_umo_name(alias.user_alias if alias else "")
|
|
return {
|
|
"auto_name": auto_name,
|
|
"user_alias": user_alias,
|
|
"display_name": get_umo_display_name(
|
|
umo=umo,
|
|
auto_name=auto_name,
|
|
user_alias=user_alias,
|
|
),
|
|
"creator_sender_id": alias.creator_sender_id if alias else "",
|
|
}
|
|
|
|
|
|
def build_umo_alias_map(aliases: list[UmoAlias]) -> dict[str, UmoAlias]:
|
|
return {alias.umo: alias for alias in aliases}
|