Files
AstrBot/astrbot/core/umo_alias.py
Weilong Liao 7e22a07e0d feat: introduce a command /name to name a umo, and display in ui (#8575)
* feat: introduce a command /name to name a umo, and display in ui

* docs: add docs

* fix

* fix test

* fix: test
2026-06-05 19:09:48 +08:00

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}