member_shortcuts.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. from __future__ import annotations
  2. import re
  3. MEMBER_ACTION_SHORTCUT_RE = (
  4. r"^(?:封禁|解封|解禁|解除封禁|禁言|解除禁言|警告|"
  5. r"禁言\s*[1-9]\d?\s*(?:分钟|分|小时|时|天)|踢出|踢|飞)$"
  6. )
  7. def member_action_shortcut_command(text: str) -> tuple[str, list[str]] | None:
  8. normalized = text.strip()
  9. if normalized == "封禁":
  10. return "/ban", ["ban"]
  11. if normalized == "禁言":
  12. return "/mute", ["mute"]
  13. if normalized == "警告":
  14. return "/warn", ["warn"]
  15. if normalized in {"解封", "解禁", "解除封禁"}:
  16. return "/unban", ["unban"]
  17. if normalized == "解除禁言":
  18. return "/unmute", ["unmute"]
  19. duration = re.fullmatch(
  20. r"禁言\s*([1-9]\d?)\s*(分钟|分|小时|时|天)", normalized
  21. )
  22. if duration:
  23. value, raw_unit = duration.groups()
  24. unit = {
  25. "分钟": "m",
  26. "分": "m",
  27. "小时": "h",
  28. "时": "h",
  29. "天": "d",
  30. }[raw_unit]
  31. time_value = f"{value}{unit}"
  32. return f"/tmute {time_value}", ["tmute", time_value]
  33. if normalized in {"踢出", "踢", "飞"}:
  34. return "/kick", ["kick"]
  35. return None