from __future__ import annotations import re MEMBER_ACTION_SHORTCUT_RE = ( r"^(?:封禁|解封|解禁|解除封禁|禁言|解除禁言|警告|" r"禁言\s*[1-9]\d?\s*(?:分钟|分|小时|时|天)|踢出|踢|飞)$" ) def member_action_shortcut_command(text: str) -> tuple[str, list[str]] | None: normalized = text.strip() if normalized == "封禁": return "/ban", ["ban"] if normalized == "禁言": return "/mute", ["mute"] if normalized == "警告": return "/warn", ["warn"] if normalized in {"解封", "解禁", "解除封禁"}: return "/unban", ["unban"] if normalized == "解除禁言": return "/unmute", ["unmute"] duration = re.fullmatch( r"禁言\s*([1-9]\d?)\s*(分钟|分|小时|时|天)", normalized ) if duration: value, raw_unit = duration.groups() unit = { "分钟": "m", "分": "m", "小时": "h", "时": "h", "天": "d", }[raw_unit] time_value = f"{value}{unit}" return f"/tmute {time_value}", ["tmute", time_value] if normalized in {"踢出", "踢", "飞"}: return "/kick", ["kick"] return None