# 按钮替换 **Repository Path**: wind-trace-typ/replaceButton-plugin ## Basic Information - **Project Name**: 按钮替换 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2026-05-30 - **Last Updated**: 2026-09-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ReplaceButton **Yunzai-Bot 按钮文本替换添加插件(QQBot 专用)** 自动拦截消息,根据正则规则 **替换或注入 QQ 按钮 和 文本消息**,无需修改任何现有插件。 - 如果有些插件自带的按钮样式不喜欢,但是自己修改了更新后又会丢失,可以使用本插件进行拦截替换。 - 如果想给一些功能添加按钮,那么也可以使用本插件添加。 - 如果想要去掉喵喵插件按钮结尾 uid 但不想修改插件导致更新问题,也可使用本插件。 - 除了按钮,还可以对回复**添加 / 替换文字**(规则级 + 全局级)。 --- ## ✨ 功能特性 - ✅ 仅对 `QQBot` 适配器生效 - ✅ 自动移除原消息中的按钮并注入自定义按钮 - ✅ 按钮支持四种类型:输入框 / 自动发送 / 链接跳转 / 回调 - ✅ 按钮支持颜色样式、点击后文本、权限限制、二次确认弹窗 - ✅ 支持多个 JSON 规则文件 + 文件级开关 - ✅ **规则优先级**:数值越小越先匹配,命中即中断 - ✅ **规则级文字处理**:命中后给回复添加文字(开头 / 结尾)或替换文字(全部 / 第一处 / 最后一处) - ✅ **全局文字**:未命中规则与命中规则的回复都可自动追加文字,可逐规则「避开全局」 - ✅ 每条规则可独立开启 **小按钮** - ✅ 喵喵插件按钮结尾 uid 去除 - ✅ 插件级实现,不污染全局原型 - ✅ web 端快捷添加 / 编辑规则与全局配置,保存后自动生效 --- ## 📁 目录结构 ``` yunzai/plugins/ └─ replaceButton-plugin/ ├─ index.js # 插件主体 ├─ buttons/ # 按钮规则目录(自动创建) │ ├─ help.json │ └─ xxxx.json ├─ config/ # 配置文件目录(自动创建) │ └─ setting.json # 全局文字配置 └─ webadapter/ ├─ index.js # Web 管理 API(规则增删改查 / 正则库 / 全局配置) ├─ page.js # 页面注册(在 Web 控制台注册本管理页) └─ manage.html # Web 管理页面 UI ``` --- ## 📦 安装方法 将插件放入 Yunzai 插件目录: ```bash git clone https://gitee.com/wind-trace-typ/replaceButton-plugin.git ./plugins/replaceButton-plugin ``` 重启 Yunzai 即可生效。 如需拦截或替换某插件的按钮,请参考下方 **按钮替换规则写法**。 --- ## 🔗 建议配合[🔗QQBot-Web-Adapter](https://gitee.com/wind-trace-typ/QQBot-Web-Adapter)插件使用,可以在 web 端中快捷添加及修改规则 --- ## ⚙️ 按钮替换规则写法 规则文件为 **JSON 格式**(保存在 `buttons/*.json`): - 文件名可自定义,但必须以 `.json` 结尾 - 建议 **同一插件的规则写在同一个 JSON 文件中**,文件名推荐使用插件名命名 - 文件顶部可写 `enable`(整文件开关)与 `description`(简介) - 每条规则除正则和按钮外,还可配置文字处理、优先级、小按钮等(见下方字段说明) - 手动修改 JSON 后发送 `#重载按钮替换`,或在 web 管理页保存后自动生效 📄 例:`buttons/help.json` ```json { "enable": true, "description": "简介", "rules": [ { "regex": "^帮助$", "smallbtn": false, "priority": 100, "buttons": [ [ { "text": "使用帮助", "callback": "帮助" } ] ] }, { "regex": "^菜单$", "priority": 100, "mode": "add", "text": "(以上为菜单)", "position": "end", "buttons": [ [ { "text": "功能列表", "callback": "功能" } ], [ { "text": "设置", "callback": "设置" } ] ] } ] } ``` ### 字段说明 | 字段 | 说明 | |---|---| | `enable` | 是否启用本规则文件,缺省视为启用 | | `description` | 简介 | | `regex` | 正则字符串,匹配 `raw_message`(忽略大小写) | | `buttons` | 按钮矩阵:数组内每个元素是一个「行」(数组),每行数组内每个对象是一个按钮 | | `smallbtn` | 本条规则是否使用小按钮,可选,默认 `false` | | `priority` | 优先级,可选,默认 `100`;数值越小优先级越高,命中该规则后不再匹配后续规则 | | `mode` | 文字处理模式,可选:`add` = 添加文字,`replace` = 替换文字,不写则不处理文字 | | `position` | 仅 `mode: "add"` 时使用:`start` = 开头添加,`end` = 结尾添加(默认) | | `text` | `mode: "add"` 时 = 要添加的文字内容;`mode: "replace"` 时 = 替换成的内容 | | `match` | 仅 `mode: "replace"` 时使用:需要被替换的文字(查找内容) | | `replaceMode` | 仅 `mode: "replace"` 时使用:`all` = 全部替换(默认),`first` = 替换第一处,`last` = 替换最后一处 | | `skipGlobal` | 可选,默认 `false`;开启后本规则命中的回复不再追加「全局文字」 | 📄 带文字替换的示例: ```json { "enable": true, "rules": [ { "regex": "^签到$", "mode": "replace", "match": "成功", "text": "失败", "replaceMode": "last", "buttons": [ [ { "text": "再签一次", "callback": "签到" } ] ] } ] } ``` ### 按钮字段说明 每个按钮是一个对象,最核心的是 `text`(显示文本,必填)。其他字段看按钮类型选用: | 字段 | 说明 | |---|---| | `text` | 按钮显示文字(必填) | | `input` | 输入框按钮:点击后自动在输入框填入该内容 | | `callback` | 自动发送按钮:点击后直接发送该内容 | | `link` | 链接按钮:点击后跳转到该 `https://...` 地址 | | `toCallback` | 回调按钮:置 `true` 时按钮点击通过回调数据(callback)触发 | | `reply` | 可选布尔:配合 `input` / `callback`,点击后引用当前消息再发送 / 填入 | | `send` | 可选布尔:配合 `input`,点击后自动发送,无需用户手动回车 | | `style` | 可选:按钮颜色样式(1~5,如灰蓝 / 蓝色等,按 QQ 规范) | | `clicked_text` | 可选:点击按钮后展示的文本(常用于替代文字 / 特效按钮) | | `permission` | 可选:留空所有人可用;填 `admin` 仅管理员可操作;填用户 ID 则仅这些用户可用(多个用逗号分隔) | | `content` | 可选:弹窗标题,配合下方两项实现点击后二次确认 | | `confirm_text` | 可选:弹窗确认按钮文字,默认 `是` | | `cancel_text` | 可选:弹窗取消按钮文字,默认 `否` | | 其余按钮属性 | 参考 [🔗按钮写法](https://gitee.com/wind-trace-typ/Yunzai-QQBot-Plugin/blob/main/%E6%8C%89%E9%92%AE%E5%86%99%E6%B3%95.md) | 📄 按钮示例: ```json { "text": "确认签到", "callback": "签到", "reply": true, "style": 2, "clicked_text": "好的,这就帮你签到", "permission": "admin", "content": "是否确认签到?", "confirm_text": "确认", "cancel_text": "再想想" } ``` --- ## 🌐 全局文字配置(config/setting.json) 除规则级文字处理外,还可以配置一个**全局文字**,对所有回复统一追加(例如广告语、友情提示): ```json { "enabled": true, "position": "end", "text": "本群由 XXX 维护" } ``` | 字段 | 说明 | |---|---| | `enabled` | 是否启用全局文字 | | `position` | 添加位置:`start` = 开头,`end` = 结尾(默认) | | `text` | 要追加的文字内容 | **生效规则(优先级最低):** - 回复**未命中**任何按钮规则 → 直接追加全局文字; - 回复**命中**某规则 → 先执行该规则的文字处理,再追加全局文字; - 若该规则开启了 `skipGlobal: true` → 命中后**不追加**全局文字。 修改后发送 `#重载按钮替换`(或 web 管理页保存)生效。 --- ## 🖥️ Web 管理页(需配合 QQBot-Web-Adapter) 在 Web 管理面板中: - 每个 JSON 规则文件显示为一个卡片横幅,可单独开关、删除、点开编辑 - 正则输入框旁提供**正则下拉库**:通用正则模板 + 自动扫描已安装插件命令生成的「插件正则」 - 每条规则可视化编辑:正则、优先级、文字处理(添加 / 替换 / 关闭)、避开全局、小按钮开关、按钮矩阵 - 按钮编辑弹窗可视化配置按钮的全部字段(类型 / 文本 / 样式 / 权限 / 弹窗等) - 顶部「全局添加文字」卡片直接配置全局文字 - 保存后**自动重载生效**,无需手动发送指令 --- ## 🔧 使用指令(仅限主人) | 指令 | 说明 | |---|---| | `#开启按钮替换` | 启用按钮替换 | | `#关闭按钮替换` | 禁用按钮替换 | | `#重载按钮替换` | 重新加载按钮规则与全局文字配置 | | `#开启UID去除` | 开启去除喵喵插件按钮结尾 uid | | `#关闭UID去除` | 关闭去除喵喵插件按钮结尾 uid | --- ## 🧠 工作原理 1. 插件启动时加载 `buttons/*.json` 规则并按 `priority` 升序排序,同时加载全局文字配置 `config/setting.json` 2. 每条消息到达时:仅处理 `QQBot`,将消息文本拼接后用正则匹配(支持 `/` 开头的指令自动按 `#` 再匹配一次) 3. 命中规则后(优先级最高者): - 先按规则的 `mode` 处理文字:`add` 添加 / `replace` 查找替换 - 若未开启 `skipGlobal`,再追加全局文字 - 移除原消息中的 `segment.button`,注入新按钮;若开启 `smallbtn` 则追加小按钮标记 4. 未命中规则:仅做 uid 去除(如开启)与全局文字追加 5. web 管理页保存 / 删除 / 开关规则后会自动重载内存规则 --- ## ⚠️ 注意事项 - 仅支持 **QQBot 官方适配器** - 按钮格式必须符合 Yunzai `segment.button` 规范 - 正则匹配默认忽略大小写 - 本插件 **不会阻断其他插件执行**;同一规则文件内命中的是最优优先级的规则 --- ## ❤️ 适用 Yunzai 分支 - ✅ TRSS Yunzai --- ## 其他 - 当前可以配合[🔗qqbot-web-adapter插件](https://gitee.com/wind-trace-typ/QQBot-Web-Adapter)直接在网页端快捷添加规则及编辑规则,具体参考下图 ![alt text](./webadapter/menu.png) ![alt text](./webadapter/rule.png) ![alt text](./webadapter/button.png) --- ## 交流群 [🔗@windtrace/qq-group-bot](https://qm.qq.com/q/N1rjDkd7qu)