主要更新 (V1.3.3) - 修复按钮重定向
- 🔧 功能修复: 解决了在特定场景下按钮重定向后菜单显示不正确的问题,确保开启“定位目标菜单”后能够准确展示目标按钮及菜单。
主要更新 (V1.3.2) - 新增按钮工具动作
- 🔁 按钮重定向模块化动作: 新增的“按钮重定向”动作允许在工作流中临时复用现有按钮的行为,快速构建返回主菜单、引导至其他菜单等场景。
- 🆔 获取现有 ID 模块化动作: 新增的“获取现有 ID”动作提供菜单、按钮、WebApp、本地动作与工作流的下拉选择,并将所选 ID 输出给下游节点,方便搭建依赖现有资源的流程。
主要更新 (V1.3.1) - 工作流画布与动作列表再升级
- 🪄 悬浮动作列表: 模块化动作列表改为悬浮在画布左上角,折叠按钮缩成圆形悬浮球,吸入/展开动画更灵动,画布始终保持最大可视面积。
- 📱 触控体验优化: 双指缩放加入阻尼和灵敏度调节,同时保留滚轮缩放与拖拽,移动端也能顺畅查看与摆放节点。
- 🎚️ 列表密度调整: 列表内部采用更紧凑的卡片布局并支持平滑折叠,让更多模块动作可以同时显示、滚动浏览。
主要更新 (V1.3.0) - 等待用户输入体验升级
- 🆕 提示展示模式切换:
等待用户输入模块化动作的“提示展示方式”现支持三种策略,可在保留按钮菜单的前提下仅修改触发按钮标题、更新菜单标题文本,或继续使用替换整条消息的旧行为。 - 🎛️ 一致的下拉选择: 包括消息解析模式在内的多选参数全面改为下拉菜单,避免手动输入导致的拼写错误。
- 📣 更友好的默认提示: 在按钮标题模式下会自动精简提示与结果文本,保证 Telegram 按钮标签的可读性。
主要更新 (V1.2.2) - 新增消息操作动作
- ✨ 新增消息编辑与删除动作:
编辑消息文本: 用于更新纯文本消息的内容。编辑媒体消息: 用于更新带媒体消息的图片/语音和/或说明文字。删除消息: 用于删除任意指定的消息。
- 📚 文档更新: 在工作流文档中为新动作添加了详细说明和“阅后即焚”高级教程。
主要更新 (V1.2.1) - 功能增强与修复
- ✨ 新增预设动作: 添加了多个开箱即用的模块化动作,简化常见任务(如缓存、文本处理、发送图片等)。
- 🚀 WebUI 优化: 优化了 WebUI 的交互和性能。
- 🐛 Bug 修复: 修复了部分回调操作可能导致堵塞的问题,提升了插件的响应速度和稳定性。
主要更新 (V1.2.0) - 工作流与模块化动作
此版本引入了强大的“工作流”引擎和“模块化动作”系统,将插件的可定制性和扩展性得到了提升。
- ✨ 新增“工作流 (Workflow)”引擎: 引入了一个可视化的工作流设计器,允许用户通过拖拽方式将多个独立的动作(HTTP、本地、模块动作)编排成复杂的任务流。实现了动作之间的数据传递和逻辑分支,极大地增强了自动化能力。
- 🧩 新增“模块化动作 (Modular Action)”系统: 允许开发者和高级用户通过在指定目录中创建简单的 Python 文件来添加自定义功能,无需修改插件核心代码。这为插件提供了前所未有的可扩展性。
- 📂 文档结构优化与内容补充: 将所有说明文档从
md/目录迁移至docs/目录,并为新的“工作流”和“模块化动作”功能撰写了详细的开发和使用指南。
主要更新 (V1.1.2) - 安全修复
此版本为安全更新,建议升级。
- 🔒 安全修复: 修复了
actions.py中存在的服务器端模板注入 (SSTI) 漏洞。此漏洞可能允许有权访问 WebUI 的用户在服务器上执行任意代码。现已通过引入 Jinja2 沙箱环境来阻止此类攻击。 - 🐛 Bug 修复: 修复了当设置
webui_auth_token密钥后,访问 WebUI 主页会导致 500 服务器错误的问题。
主要更新 (V1.1.1)
此版本主要针对 WebUI 进行了全面的功能增强和体验优化,并修复了若干 Bug。
- 功能: 在 WebUI 中补全了对“插入文本”、“转发查询”和“原始回调”等按钮类型的支持。
- 优化: 重构了 WebUI 的弹窗系统和标签页动画,交互体验更统一、更流畅。
- 修复: 解决了重复点击、鼠标悬停和标签页切换时遇到的多个视觉及逻辑 Bug。
主要更新 (V1.1.0)
此版本主要引入了一个可视化 Web 管理界面 (WebUI),用于替代旧版的指令式管理,并增加了多项新功能以支持更复杂的交互。
- 💻 可视化 WebUI: 在浏览器中通过拖拽方式直观地管理按钮、菜单和布局。
- 🚀 新增“动作 (Action)”系统: 让按钮能够调用外部 API、解析数据并动态更新消息。(可能不完善,已测试)
- 🧩 新增按钮类型: 支持子菜单、WebApp 和返回等多种新类型。
- 🌐 WebApp 集成: 直接在 Telegram 内部无缝打开网页应用。(可能不完善,未测试)
- 📜 多菜单支持: 可创建多个相互链接的菜单,构建导航流程。
📦 插件安装
方式一 (推荐): 在 AstrBot 的插件市场搜索
astrbot_plugin_tg_button,点击安装即可。方式二 (手动):
# 进入 AstrBot 插件目录 cd /path/to/your/AstrBot/data/plugins # 克隆仓库 git clone https://github.com/clown145/astrbot_plugin_tg_button.git # 重启 AstrBot
⚙️ 插件配置
安装并重启 AstrBot 后,在 WebUI 找到本插件并进入“管理”页面进行配置。
| 配置项 | 说明 | 默认值 |
|---|---|---|
menu_command |
用于调出根菜单的指令名 (无需 /)。 |
menu |
menu_header_text |
调出菜单时,按钮上方显示的默认提示文字。 | 请选择功能 |
webui_enabled |
(核心) 是否启用插件自带的按钮管理 WebUI。 | false |
webui_port |
WebUI 服务监听的端口号。 | 17861 |
webui_host |
WebUI 服务监听的地址。 127.0.0.1 仅本机可访问。 |
127.0.0.1 |
webui_exclusive |
启用 WebUI 时是否独占插件,开启后将暂停指令与回调功能。 | true |
webui_auth_token |
(可选) 访问 WebUI 时需要携带的认证 Token,若为空则不校验。 | "" |
🖥️ 使用 WebUI 进行配置
现在,所有复杂的按钮和菜单管理都推荐通过 WebUI 完成。
- 在插件配置中,将
webui_enabled设置为true并保存。 - 在浏览器中访问
http://<webui_host>:<webui_port>(默认为http://127.0.0.1:17861)。 - 界面分为左右两栏:左侧是菜单列表,右侧是未分配的按钮。
典型使用流程:创建子菜单与返回按钮
以下步骤将演示如何创建一个名为“实用工具”的子菜单,并为其添加一个返回主菜单的按钮。
创建子菜单:
- 在左侧“菜单 (Menus)”区域,点击
新增菜单。 - 在新出现的菜单
menu_xxxx中,将其名称修改为实用工具。记下它的 ID,例如menu_abc123。
- 在左侧“菜单 (Menus)”区域,点击
创建返回按钮:
- 在右侧“未分配的按钮”区域,点击
创建新按钮。 - 在弹出的窗口中:
- 显示文本:
返回上一级 - 类型: 选择
子菜单 (Submenu) - 目标菜单: 选择
root(这是主菜单的 ID)
- 显示文本:
- 点击
创建按钮。
- 在右侧“未分配的按钮”区域,点击
创建入口按钮:
- 再次点击
创建新按钮。 - 在弹出的窗口中:
- 显示文本:
实用工具 - 类型: 选择
子菜单 (Submenu) - 目标菜单: 选择刚刚创建的
实用工具 (menu_abc123)
- 显示文本:
- 点击
创建按钮。
- 再次点击
组合布局:
- 使用鼠标,将右侧的
返回上一级按钮拖拽到左侧实用工具菜单的布局网格中。 - 同样,将右侧的
实用工具按钮拖拽到root(主菜单) 的布局网格中。
- 使用鼠标,将右侧的
保存:
- 确认布局无误后,点击页面右上角的
保存全部按钮。现在,你在 Telegram 中使用/menu就可以看到效果了。
- 确认布局无误后,点击页面右上角的
🔒 安全警告:保护您的 WebUI 与模块化动作
WebUI 拥有强大的功能,可以配置能够执行服务器端逻辑的“动作 (Action)”按钮,甚至上传自定义代码(模块化动作)。因此,保护对 WebUI 的访问至关重要。
[!WARNING]
强烈建议不要常态化开启 WebUI!
为了安全和节省系统资源,建议仅在需要配置按钮时开启 WebUI,完成后立即在插件配置中将webui_enabled设置回false。
[!CAUTION]
关于模块化动作上传功能的额外警告
- 高风险功能:通过 WebUI 上传
.py文件作为模块化动作的功能,相当于允许通过网页直接在您的服务器上部署和执行代码。这是一个非常危险的权限。- 默认关闭且不推荐开启:出于安全考虑,此功能默认是禁用的。我们强烈不推荐普通用户开启此功能。
- 强制密码保护:如果您确切地知道风险并决定启用它,您必须在插件配置中为上传 (
webui_upload_auth_token) 和删除 (webui_delete_auth_token) 操作设置一个长而复杂的、不同于主 WebUI 密钥的密码。否则,任何能够访问您 WebUI 的人都有可能上传恶意代码并控制您的服务器。
[!IMPORTANT]
务必为 WebUI 设置访问密钥!
如果您需要开启 WebUI(即使是临时),特别是当您将端口暴露给公网(webui_host设置为0.0.0.0)时,必须在插件配置中设置一个长而复杂的webui_auth_token。
📖 深入了解高级功能
我们为新功能准备了详细的指南文档,帮助你更好地使用本插件:
- ✨ (新) 工作流 (Workflow) 功能详解
- 🧩 (新) 如何创建模块化动作
- 📄 动作 (Action) 按钮使用指南
- 🌐 WebApp 按钮使用指南
- 🔗 Telegram
tg://协议链接大全 - ⚙️ 按钮类型参考指南
⌨️ 关于旧版指令的说明
旧版的 /bind 和 /unbind 指令已在 1.2.0 版本中被完全移除,以鼓励用户转向功能更强大、更安全的 WebUI。
所有按钮和菜单的管理现在都应通过 WebUI 完成。
📝 开发说明
本插件的开发过程得到了 AI 的大量协助,如果代码或功能中存在任何不妥之处,敬请谅解并通过 Issue 提出,感谢您的支持!