fix: remove blank-enter dependency from simadmin menu
This commit is contained in:
@@ -136,7 +136,11 @@ q. 退出配置管理
|
|||||||
|
|
||||||
### 添加实例流程
|
### 添加实例流程
|
||||||
|
|
||||||
可从主菜单选择 `2. 添加实例`,也可在列表页输入 `a`:
|
可从主菜单选择 `2. 添加实例`,也可在列表页输入 `a`。
|
||||||
|
|
||||||
|
交互优化说明:很多聊天端/Autman `sender.listen()` 不能捕获“空回车”,所以插件不再要求直接回车。需要默认值时输入 `d` / `default` / `默认` / `跳过`;需要留空或清空 token 时输入 `clear` / `清空`。
|
||||||
|
|
||||||
|
示例:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
sim配置
|
sim配置
|
||||||
@@ -146,19 +150,25 @@ a
|
|||||||
主卡
|
主卡
|
||||||
请输入 SimAdmin 地址,例如:http://192.168.68.1:3000
|
请输入 SimAdmin 地址,例如:http://192.168.68.1:3000
|
||||||
http://192.168.68.1:3000
|
http://192.168.68.1:3000
|
||||||
请输入超时时间秒数,直接回车默认 10
|
请输入超时时间秒数
|
||||||
10
|
输入 d/default/默认 使用默认值:10
|
||||||
请输入 token,可直接回车留空
|
d
|
||||||
|
请输入 token
|
||||||
是否启用?输入 1/是 启用,0/否 禁用;直接回车默认启用
|
输入 d/default/默认 使用默认值:留空
|
||||||
1
|
输入 clear/清空 表示留空
|
||||||
确认添加?
|
clear
|
||||||
|
是否启用?输入 1/是 启用,0/否 禁用
|
||||||
|
输入 d/default/默认 使用默认值:启用
|
||||||
|
d
|
||||||
|
确认添加?输入 yes/y/确认,输入 n/no/取消 放弃
|
||||||
yes
|
yes
|
||||||
```
|
```
|
||||||
|
|
||||||
### 编辑实例流程
|
### 编辑实例流程
|
||||||
|
|
||||||
可从主菜单选择 `3. 编辑实例`,也可在列表页输入 `e 1`,或输入实例编号后选择 `2. 编辑实例`。编辑二级菜单:
|
可从主菜单选择 `3. 编辑实例`,也可在列表页输入 `e 1`,或输入实例编号后选择 `2. 编辑实例`。编辑 token 时:输入 `d` 保持当前 token,输入 `clear` 清空 token。
|
||||||
|
|
||||||
|
编辑二级菜单:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
编辑【主卡】
|
编辑【主卡】
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
#[priority: 999]
|
#[priority: 999]
|
||||||
#[platform: qq,qb,wx,wb,tg,tb,fs,we,web,wxmp]
|
#[platform: qq,qb,wx,wb,tg,tb,fs,we,web,wxmp]
|
||||||
#[open_source: true]
|
#[open_source: true]
|
||||||
#[version: 1.2.3]
|
#[version: 1.2.4]
|
||||||
#[public: false]
|
#[public: false]
|
||||||
#[price: 0]
|
#[price: 0]
|
||||||
#[description: 管理员专用:兼容多个 SimAdmin 实例,支持多级菜单配置管理、状态查询和短信发送。配置桶 otto/simadmin_instances。]
|
#[description: 管理员专用:兼容多个 SimAdmin 实例,支持多级菜单配置管理、状态查询和短信发送。配置桶 otto/simadmin_instances。]
|
||||||
@@ -65,9 +65,6 @@ def listen_text(sender, prompt, allow_empty=False, default=None):
|
|||||||
# Autman listen 超时/无效输入在不少实机环境返回字符串 error,而不是 None。
|
# Autman listen 超时/无效输入在不少实机环境返回字符串 error,而不是 None。
|
||||||
if value.lower() == "error":
|
if value.lower() == "error":
|
||||||
raise SimAdminError("等待输入超时或监听失败,已退出")
|
raise SimAdminError("等待输入超时或监听失败,已退出")
|
||||||
# allow_empty=True 的场景允许直接回车/空消息走默认值。
|
|
||||||
if value == "" and default is not None:
|
|
||||||
return default
|
|
||||||
if value == "" and not allow_empty:
|
if value == "" and not allow_empty:
|
||||||
raise SimAdminError("输入不能为空,已退出")
|
raise SimAdminError("输入不能为空,已退出")
|
||||||
if value.lower() in ("q", "quit", "exit", "退出", "取消"):
|
if value.lower() in ("q", "quit", "exit", "退出", "取消"):
|
||||||
@@ -75,8 +72,23 @@ def listen_text(sender, prompt, allow_empty=False, default=None):
|
|||||||
return value
|
return value
|
||||||
|
|
||||||
|
|
||||||
def confirm(sender, prompt="确认执行?输入 yes 确认,其他取消"):
|
def listen_with_default(sender, prompt, default_value, default_label=None, allow_clear=False):
|
||||||
value = listen_text(sender, prompt, allow_empty=True)
|
"""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", "确认", "是")
|
return value.lower() in ("yes", "y", "确认", "是")
|
||||||
|
|
||||||
|
|
||||||
@@ -438,9 +450,9 @@ def menu_add(sender):
|
|||||||
if any(x["name"] == name for x in instances):
|
if any(x["name"] == name for x in instances):
|
||||||
raise SimAdminError("实例名称已存在: " + name)
|
raise SimAdminError("实例名称已存在: " + name)
|
||||||
base_url = listen_text(sender, "请输入 SimAdmin 地址,例如:http://192.168.68.1:3000")
|
base_url = listen_text(sender, "请输入 SimAdmin 地址,例如:http://192.168.68.1:3000")
|
||||||
timeout = listen_text(sender, "请输入超时时间秒数,直接回车默认 10", allow_empty=True, default=str(DEFAULT_TIMEOUT))
|
timeout = listen_with_default(sender, "请输入超时时间秒数", str(DEFAULT_TIMEOUT), str(DEFAULT_TIMEOUT))
|
||||||
token = listen_text(sender, "请输入 token,可直接回车留空", allow_empty=True, default="")
|
token = listen_with_default(sender, "请输入 token", "", "留空", allow_clear=True)
|
||||||
enabled_text = listen_text(sender, "是否启用?输入 1/是 启用,0/否 禁用;直接回车默认启用", allow_empty=True, default="1")
|
enabled_text = listen_with_default(sender, "是否启用?输入 1/是 启用,0/否 禁用", "1", "启用")
|
||||||
item = normalize_instance({
|
item = normalize_instance({
|
||||||
"name": name,
|
"name": name,
|
||||||
"base_url": base_url,
|
"base_url": base_url,
|
||||||
@@ -498,7 +510,7 @@ def menu_edit(sender, idx=None):
|
|||||||
elif choice == "3":
|
elif choice == "3":
|
||||||
item["timeout"] = normalize_instance({**item, "timeout": listen_text(sender, "请输入 timeout 秒数 3-60")})["timeout"]
|
item["timeout"] = normalize_instance({**item, "timeout": listen_text(sender, "请输入 timeout 秒数 3-60")})["timeout"]
|
||||||
elif choice == "4":
|
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":
|
elif choice == "5":
|
||||||
item["enabled"] = not item.get("enabled")
|
item["enabled"] = not item.get("enabled")
|
||||||
reply(sender, "已切换为:" + ("启用" if item["enabled"] else "禁用"))
|
reply(sender, "已切换为:" + ("启用" if item["enabled"] else "禁用"))
|
||||||
|
|||||||
+22
-10
@@ -11,7 +11,7 @@
|
|||||||
#[priority: 999]
|
#[priority: 999]
|
||||||
#[platform: qq,qb,wx,wb,tg,tb,fs,we,web,wxmp]
|
#[platform: qq,qb,wx,wb,tg,tb,fs,we,web,wxmp]
|
||||||
#[open_source: true]
|
#[open_source: true]
|
||||||
#[version: 1.2.3]
|
#[version: 1.2.4]
|
||||||
#[public: false]
|
#[public: false]
|
||||||
#[price: 0]
|
#[price: 0]
|
||||||
#[description: 管理员专用:兼容多个 SimAdmin 实例,支持多级菜单配置管理、状态查询和短信发送。配置桶 otto/simadmin_instances。]
|
#[description: 管理员专用:兼容多个 SimAdmin 实例,支持多级菜单配置管理、状态查询和短信发送。配置桶 otto/simadmin_instances。]
|
||||||
@@ -65,9 +65,6 @@ def listen_text(sender, prompt, allow_empty=False, default=None):
|
|||||||
# Autman listen 超时/无效输入在不少实机环境返回字符串 error,而不是 None。
|
# Autman listen 超时/无效输入在不少实机环境返回字符串 error,而不是 None。
|
||||||
if value.lower() == "error":
|
if value.lower() == "error":
|
||||||
raise SimAdminError("等待输入超时或监听失败,已退出")
|
raise SimAdminError("等待输入超时或监听失败,已退出")
|
||||||
# allow_empty=True 的场景允许直接回车/空消息走默认值。
|
|
||||||
if value == "" and default is not None:
|
|
||||||
return default
|
|
||||||
if value == "" and not allow_empty:
|
if value == "" and not allow_empty:
|
||||||
raise SimAdminError("输入不能为空,已退出")
|
raise SimAdminError("输入不能为空,已退出")
|
||||||
if value.lower() in ("q", "quit", "exit", "退出", "取消"):
|
if value.lower() in ("q", "quit", "exit", "退出", "取消"):
|
||||||
@@ -75,8 +72,23 @@ def listen_text(sender, prompt, allow_empty=False, default=None):
|
|||||||
return value
|
return value
|
||||||
|
|
||||||
|
|
||||||
def confirm(sender, prompt="确认执行?输入 yes 确认,其他取消"):
|
def listen_with_default(sender, prompt, default_value, default_label=None, allow_clear=False):
|
||||||
value = listen_text(sender, prompt, allow_empty=True)
|
"""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", "确认", "是")
|
return value.lower() in ("yes", "y", "确认", "是")
|
||||||
|
|
||||||
|
|
||||||
@@ -438,9 +450,9 @@ def menu_add(sender):
|
|||||||
if any(x["name"] == name for x in instances):
|
if any(x["name"] == name for x in instances):
|
||||||
raise SimAdminError("实例名称已存在: " + name)
|
raise SimAdminError("实例名称已存在: " + name)
|
||||||
base_url = listen_text(sender, "请输入 SimAdmin 地址,例如:http://192.168.68.1:3000")
|
base_url = listen_text(sender, "请输入 SimAdmin 地址,例如:http://192.168.68.1:3000")
|
||||||
timeout = listen_text(sender, "请输入超时时间秒数,直接回车默认 10", allow_empty=True, default=str(DEFAULT_TIMEOUT))
|
timeout = listen_with_default(sender, "请输入超时时间秒数", str(DEFAULT_TIMEOUT), str(DEFAULT_TIMEOUT))
|
||||||
token = listen_text(sender, "请输入 token,可直接回车留空", allow_empty=True, default="")
|
token = listen_with_default(sender, "请输入 token", "", "留空", allow_clear=True)
|
||||||
enabled_text = listen_text(sender, "是否启用?输入 1/是 启用,0/否 禁用;直接回车默认启用", allow_empty=True, default="1")
|
enabled_text = listen_with_default(sender, "是否启用?输入 1/是 启用,0/否 禁用", "1", "启用")
|
||||||
item = normalize_instance({
|
item = normalize_instance({
|
||||||
"name": name,
|
"name": name,
|
||||||
"base_url": base_url,
|
"base_url": base_url,
|
||||||
@@ -498,7 +510,7 @@ def menu_edit(sender, idx=None):
|
|||||||
elif choice == "3":
|
elif choice == "3":
|
||||||
item["timeout"] = normalize_instance({**item, "timeout": listen_text(sender, "请输入 timeout 秒数 3-60")})["timeout"]
|
item["timeout"] = normalize_instance({**item, "timeout": listen_text(sender, "请输入 timeout 秒数 3-60")})["timeout"]
|
||||||
elif choice == "4":
|
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":
|
elif choice == "5":
|
||||||
item["enabled"] = not item.get("enabled")
|
item["enabled"] = not item.get("enabled")
|
||||||
reply(sender, "已切换为:" + ("启用" if item["enabled"] else "禁用"))
|
reply(sender, "已切换为:" + ("启用" if item["enabled"] else "禁用"))
|
||||||
|
|||||||
Reference in New Issue
Block a user