fix: remove blank-enter dependency from simadmin menu

This commit is contained in:
2026-05-16 14:13:35 +08:00
parent 661d5d685a
commit 1e5eb1647d
3 changed files with 63 additions and 29 deletions
+22 -10
View File
@@ -11,7 +11,7 @@
#[priority: 999]
#[platform: qq,qb,wx,wb,tg,tb,fs,we,web,wxmp]
#[open_source: true]
#[version: 1.2.3]
#[version: 1.2.4]
#[public: false]
#[price: 0]
#[description: 管理员专用:兼容多个 SimAdmin 实例,支持多级菜单配置管理、状态查询和短信发送。配置桶 otto/simadmin_instances。]
@@ -65,9 +65,6 @@ def listen_text(sender, prompt, allow_empty=False, default=None):
# Autman listen 超时/无效输入在不少实机环境返回字符串 error,而不是 None。
if value.lower() == "error":
raise SimAdminError("等待输入超时或监听失败,已退出")
# allow_empty=True 的场景允许直接回车/空消息走默认值。
if value == "" and default is not None:
return default
if value == "" and not allow_empty:
raise SimAdminError("输入不能为空,已退出")
if value.lower() in ("q", "quit", "exit", "退出", "取消"):
@@ -75,8 +72,23 @@ def listen_text(sender, prompt, allow_empty=False, default=None):
return value
def confirm(sender, prompt="确认执行?输入 yes 确认,其他取消"):
value = listen_text(sender, prompt, allow_empty=True)
def listen_with_default(sender, prompt, default_value, default_label=None, allow_clear=False):
"""Autman/聊天端不能发送空回车,用显式指令代替默认/跳过/清空。"""
label = default_label if default_label is not None else str(default_value)
tips = [prompt, "输入 d/default/默认 使用默认值:%s" % label]
if allow_clear:
tips.append("输入 clear/清空 表示留空")
value = listen_text(sender, "\n".join(tips), allow_empty=False)
lower = value.lower()
if lower in ("d", "default", "默认", "跳过", "skip", "s"):
return default_value
if allow_clear and lower in ("clear", "清空", "", "none", "null", ""):
return ""
return value
def confirm(sender, prompt="确认执行?输入 yes/y/确认,输入 n/no/取消 放弃"):
value = listen_text(sender, prompt, allow_empty=False)
return value.lower() in ("yes", "y", "确认", "")
@@ -438,9 +450,9 @@ def menu_add(sender):
if any(x["name"] == name for x in instances):
raise SimAdminError("实例名称已存在: " + name)
base_url = listen_text(sender, "请输入 SimAdmin 地址,例如:http://192.168.68.1:3000")
timeout = listen_text(sender, "请输入超时时间秒数,直接回车默认 10", allow_empty=True, default=str(DEFAULT_TIMEOUT))
token = listen_text(sender, "请输入 token,可直接回车留空", allow_empty=True, default="")
enabled_text = listen_text(sender, "是否启用?输入 1/是 启用,0/否 禁用;直接回车默认启用", allow_empty=True, default="1")
timeout = listen_with_default(sender, "请输入超时时间秒数", str(DEFAULT_TIMEOUT), str(DEFAULT_TIMEOUT))
token = listen_with_default(sender, "请输入 token", "", "留空", allow_clear=True)
enabled_text = listen_with_default(sender, "是否启用?输入 1/是 启用,0/否 禁用", "1", "启用")
item = normalize_instance({
"name": name,
"base_url": base_url,
@@ -498,7 +510,7 @@ def menu_edit(sender, idx=None):
elif choice == "3":
item["timeout"] = normalize_instance({**item, "timeout": listen_text(sender, "请输入 timeout 秒数 3-60")})["timeout"]
elif choice == "4":
item["token"] = listen_text(sender, "请输入新 token;直接回车清空", allow_empty=True, default="")
item["token"] = listen_with_default(sender, "请输入新 token", item.get("token", ""), "保持当前(%s" % (mask_secret(item.get("token")) or "未设置"), allow_clear=True)
elif choice == "5":
item["enabled"] = not item.get("enabled")
reply(sender, "已切换为:" + ("启用" if item["enabled"] else "禁用"))