koishi-plugin-ll-feedback
v0.0.4
Published
问题反馈插件:群内一键发送反馈卡片,点击按钮即可填写问题,管理员可查询/回复/处理
Maintainers
Readme
koishi-plugin-ll-feedback
问题反馈插件:群内发送一张反馈卡片,用户点击按钮后直接发送要反馈的内容即可;管理员可以分页查询、查看详情、回复并私聊通知反馈人。
思路参考了 koishi-plugin-smmcat-eazyfeedback 的卡片 + 按钮交互,但业务换成了「问题反馈」,去掉了问卷、选项投票、主题版本自增、统计占比那一套。
使用
用户侧:
反馈/我要反馈/问题反馈—— 发送反馈卡片- 点击卡片上的「填写反馈」按钮 —— 机器人提示后,直接发送你要反馈的内容即可
反馈提交 <内容>—— 不进卡片,一步提交一条反馈
管理员侧(在 masterList 中配置 userId):
反馈查询 [页码]—— 查看全部反馈(分页,带上一页 / 下一页 / 退出)反馈详情 <编号>—— 查看某条反馈的详情,带「回复反馈人」「标记已处理」按钮反馈回复 <编号> [内容]—— 回复反馈人,并自动私聊通知反馈完成 <编号>—— 标记为已处理反馈诊断—— 输出运行环境自检信息(排查用,见下)
出问题时先跑 /反馈诊断
/反馈诊断 会把下面这些一次性列出来,排查「指令没反应」非常有用:
- 插件版本、平台
platform、useMd开关 反馈提交/反馈查询是否真的注册进了当前上下文- 机器人
selfId、session.messageId/guildId是否存在 bot.internal/internal.sendMessage是否存在(QQ Markdown 通道是否可用)- 数据库
ll_feedback能否查询、共几条 - 本次消息原文和剥离前缀后的内容(用来判断指令到底有没有被正确解析)
- 最近一次发送结果和最近一次错误
排查「点了按钮/发了指令没反应」
插件在 0.0.2 之后不再静默失败:
- 任何指令内部报错,都会直接在聊天里回一条「插件执行出错:…」,同时写进 Koishi 日志
- Markdown 发送失败会降级纯文本,并在日志里留下
ll-feedback的 warn 记录(不再只在 debug 模式下才打印)
常见的两种原因:
- 消息开头的
@机器人没有被剥离,导致@若汐 /反馈提交 xxx整体被当成指令名而匹配不上。 插件默认开启atPrefixFallback:只有在检测到确实残留了@前缀时才会兜底重新解析,正常指令不受影响。 - 前缀配置不匹配:按钮发出的是
/反馈提交,如果你的 Koishi 没有配置/前缀,请把prefix加上/,或把按钮文案改成不带斜杠的写法。
参数不用打空格
Koishi 解析指令时要求「指令名」和「参数」之间必须有空白,所以 反馈提交TEST123 整体会被当成一个不存在的指令名而毫无反应。插件会把粘连的写法自动拆开:
| 你输入 | 实际执行 |
| --- | --- |
| /反馈提交TEST123 | /反馈提交 TEST123 |
| 反馈提交也不带空格 | /反馈提交 也不带空格 |
| /反馈详情1 | /反馈详情 1 |
| /反馈回复2咕咕嘎嘎 | /反馈回复 2 咕咕嘎嘎 |
| /反馈回复 2咕咕嘎嘎 | /反馈回复 2 咕咕嘎嘎 |
这里其实有两层粘连,分别由两处处理:
- 指令名与参数之间 —— 由中间件补空格。这条兜底只对必须带参数的指令生效(
反馈提交/提交反馈/反馈查询/反馈列表/反馈详情/反馈回复/反馈完成),并且只在「Koishi 自己匹配不上」时才介入,不会和正常指令重复执行。 - 编号与后面的内容之间 ——
反馈详情/反馈回复/反馈完成的编号参数由插件自己解析,所以2咕咕嘎嘎会被正确识别为「编号 2 + 内容 咕咕嘎嘎」,而不是丢一个参数 id 输入无效的报错。
反馈 / 我要反馈 / 问题反馈 这几个零参数指令故意不在自动补空格范围内,否则「反馈一下啊」这类日常发言会被误判成指令。
编号写错时(例如 /反馈详情 abc)会给出「请提供反馈编号,例如:/反馈详情 3」这样可读的提示,而不是 Koishi 原始的 参数 id 输入无效,请提供一个正整数。
如果不需要自动补空格,把 autoSpace 关掉即可(编号解析仍然生效)。
配置项
| 配置 | 说明 |
| --- | --- |
| debug | 输出调试日志 |
| useMd | QQ 平台使用 Markdown + 按钮键盘发送卡片 |
| cardTitle | 卡片标题 |
| cardImage | 卡片配图地址(需公网可访问) |
| cardImageWidth / cardImageHeight | 配图尺寸;高度填 0 时按原图比例自动计算(装了 canvas 服务会更准,否则按 4:3 估算) |
| cardContent | 卡片正文,支持 Markdown,换行请用 <br> |
| buttonText | 卡片按钮文案,默认「填写反馈」 |
| submitTip / emptyTip / timeoutTip / noPermTip | 各种提示语 |
| masterList | 管理员 userId 列表 |
| pageSize | 列表每页条数 |
| promptTimeout | 等待用户输入的秒数 |
| atPrefixFallback | 开头 @机器人 未被剥离时兜底识别指令,默认 true |
| autoSpace | 指令名和参数之间忘了打空格时自动补上,默认 true |
平台说明
按钮键盘和 Markdown 卡片是 QQ 官方机器人(qq 平台)的能力:
- 其它平台或关闭
useMd时,卡片会自动降级为纯文本,按钮不可用,但仍可用反馈提交 <内容>提交反馈 - 回复反馈人依赖「主动私聊」权限,发不出去时会回落到提示管理员手动转达
数据表
插件会创建 ll_feedback 表:id / userId / name / avatar / guildId / channelId / content / status / reply / replier / timer。
依赖
- 必需:
database - 可选:
canvas(仅用于自动计算卡片配图高度)
License
MIT
