优化自动每日指令与扫码退出秘境

This commit is contained in:
2026-08-30 00:40:18 +08:00
parent da8a82bfd5
commit 2d81615f78
10 changed files with 447 additions and 38 deletions
+89 -11
View File
@@ -251,6 +251,72 @@ COMMAND_ALLOWED_ROLE_DEFAULTS = {
"queue_list": ALL_DANMU_ROLES,
"help": ALL_DANMU_ROLES,
}
NEW_COMMAND_ALIAS_DEFAULTS = {
"daily": ["自动每日", "每日", "日常", "做每日", "做日常"],
"switch_party": ["切换队伍", "更换队伍", "换队伍", "换队"],
"edit_party": ["修改队员", "更换队员", "换队员", "换角色"],
}
NEW_COMMAND_PREFERRED_ALIASES = {
"daily": "每日",
"switch_party": "换队",
"edit_party": "换角色",
}
FRONTEND_COMMAND_HINT_KEYS = tuple(NEW_COMMAND_ALIAS_DEFAULTS)
def configured_command_aliases(
config_data: dict[str, Any],
command_key: str,
fallback: list[str] | tuple[str, ...] = (),
) -> list[str]:
commands = config_data.get("commands", {})
cfg = commands.get(command_key, {}) if isinstance(commands, dict) else {}
if not isinstance(cfg, dict) or not cfg.get("enabled", True):
return []
source = cfg.get("aliases")
if not isinstance(source, list):
source = list(fallback)
aliases: list[str] = []
for item in source:
alias = str(item).strip()
if alias and alias not in aliases:
aliases.append(alias)
return aliases
def preferred_command_alias(
config_data: dict[str, Any],
command_key: str,
fallback: str,
) -> str:
aliases = configured_command_aliases(config_data, command_key, (fallback,))
preferred = NEW_COMMAND_PREFERRED_ALIASES.get(command_key, "")
if preferred in aliases:
return preferred
return min(aliases, key=len) if aliases else fallback
def build_public_command_hints(config_data: dict[str, Any]) -> dict[str, dict[str, Any]]:
commands = config_data.get("commands", {})
hints: dict[str, dict[str, Any]] = {}
for command_key in FRONTEND_COMMAND_HINT_KEYS:
cfg = commands.get(command_key, {}) if isinstance(commands, dict) else {}
enabled = isinstance(cfg, dict) and bool(cfg.get("enabled", True))
aliases = configured_command_aliases(
config_data,
command_key,
NEW_COMMAND_ALIAS_DEFAULTS[command_key],
)
hints[command_key] = {
"enabled": enabled,
"aliases": aliases,
"preferred_alias": preferred_command_alias(
config_data,
command_key,
NEW_COMMAND_PREFERRED_ALIASES[command_key],
) if aliases else "",
}
return hints
def normalize_allowed_roles(value: Any, default: list[str]) -> list[str]:
@@ -628,9 +694,9 @@ class Config:
"confirm_yes": {"enabled": True, "aliases": [""]},
"confirm_no": {"enabled": True, "aliases": ["不是"]},
"run": {"enabled": True, "aliases": ["执行", "", "开始"]},
"daily": {"enabled": True, "aliases": ["自动每日"]},
"switch_party": {"enabled": True, "aliases": ["切换队伍", "更换队伍"]},
"edit_party": {"enabled": True, "aliases": ["修改队员", "更换队员"]},
"daily": {"enabled": True, "aliases": list(NEW_COMMAND_ALIAS_DEFAULTS["daily"])},
"switch_party": {"enabled": True, "aliases": list(NEW_COMMAND_ALIAS_DEFAULTS["switch_party"])},
"edit_party": {"enabled": True, "aliases": list(NEW_COMMAND_ALIAS_DEFAULTS["edit_party"])},
"leave": {"enabled": True, "aliases": ["退出", "退出排队", "取消排队"]},
"reset": {"enabled": True, "aliases": ["重置"]},
"points": {"enabled": True, "aliases": ["积分"]},
@@ -5817,7 +5883,22 @@ class CommandHandler:
if answer == "":
self.queue_mgr.set_login_status("logged_in")
self.logger.info(f"[登录确认] {uname}({uid}) 确认账号正确,升为二级")
await self.broadcast(f"{uname}」账号已确认,发送\"执行 组名\"开始(如: 执行 泡泡桔)")
daily_alias = preferred_command_alias(self.config.data, "daily", "自动每日")
switch_alias = preferred_command_alias(self.config.data, "switch_party", "切换队伍")
edit_alias = preferred_command_alias(self.config.data, "edit_party", "修改队员")
run_aliases = configured_command_aliases(self.config.data, "run", ("执行",))
run_alias = run_aliases[0] if run_aliases else "执行"
await self.broadcast(
f"{uname}」账号已确认,可发送“{daily_alias}”完成基础每日",
tts=True,
)
await self.broadcast(
f"其他模式:{daily_alias} 秘境 风本 / {daily_alias} 地脉 经验 蒙德 / "
f"{daily_alias} 委托;{switch_alias} 永冻队 / {edit_alias} 四名角色;"
f"普通任务仍发送“{run_alias} 组名”",
tts=False,
danmu=True,
)
return
self.logger.info(f"[登录确认] {uname}({uid}) 确认不是本人账号,重新扫码上号")
await self.broadcast(f"{uname}」账号不正确,正在关闭当前账号并重新扫码上号", tts=True)
@@ -6536,12 +6617,8 @@ class CommandHandler:
def _get_cmd_aliases_str(self, key: str, fallback: str = "") -> str:
"""获取指令的别名展示字符串,用于帮助信息。"""
cmds = self.config.data.get("commands", {})
cfg = cmds.get(key, {})
if cfg.get("enabled", True):
aliases = cfg.get("aliases", [])
return "/".join(str(a).strip() for a in aliases if str(a).strip())
return fallback
aliases = configured_command_aliases(self.config.data, key, (fallback,))
return "/".join(aliases) if aliases else fallback
async def _cmd_help(self, uid: int, uname: str):
q = self._get_cmd_aliases_str("queue", "排队")
@@ -10082,7 +10159,7 @@ class WebServer:
return web.Response(status=404, text="no upload")
async def _api_frontend_config(self, request):
"""返回前台视觉配置。"""
"""返回前台视觉配置和可公开展示的指令提示"""
cfg = self.config.data.setdefault("frontend", {})
return web.json_response({
"background_image": cfg.get("background_image", ""),
@@ -10090,6 +10167,7 @@ class WebServer:
"background_blur": float(cfg.get("background_blur", 0)),
"background_fit": cfg.get("background_fit", "cover"),
"theme": cfg.get("theme", "classic"),
"command_hints": build_public_command_hints(self.config.data),
})
async def _api_music_monitor_config(self, request):