npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

koishi-plugin-ll-feedback

v0.0.4

Published

问题反馈插件:群内一键发送反馈卡片,点击按钮即可填写问题,管理员可查询/回复/处理

Readme

koishi-plugin-ll-feedback

npm

问题反馈插件:群内发送一张反馈卡片,用户点击按钮后直接发送要反馈的内容即可;管理员可以分页查询、查看详情、回复并私聊通知反馈人。

思路参考了 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 模式下才打印)

常见的两种原因:

  1. 消息开头的 @机器人 没有被剥离,导致 @若汐 /反馈提交 xxx 整体被当成指令名而匹配不上。 插件默认开启 atPrefixFallback:只有在检测到确实残留了 @ 前缀时才会兜底重新解析,正常指令不受影响。
  2. 前缀配置不匹配:按钮发出的是 /反馈提交,如果你的 Koishi 没有配置 / 前缀,请把 prefix 加上 /,或把按钮文案改成不带斜杠的写法。

参数不用打空格

Koishi 解析指令时要求「指令名」和「参数」之间必须有空白,所以 反馈提交TEST123 整体会被当成一个不存在的指令名而毫无反应。插件会把粘连的写法自动拆开:

| 你输入 | 实际执行 | | --- | --- | | /反馈提交TEST123 | /反馈提交 TEST123 | | 反馈提交也不带空格 | /反馈提交 也不带空格 | | /反馈详情1 | /反馈详情 1 | | /反馈回复2咕咕嘎嘎 | /反馈回复 2 咕咕嘎嘎 | | /反馈回复 2咕咕嘎嘎 | /反馈回复 2 咕咕嘎嘎 |

这里其实有两层粘连,分别由两处处理:

  1. 指令名与参数之间 —— 由中间件补空格。这条兜底只对必须带参数的指令生效(反馈提交 / 提交反馈 / 反馈查询 / 反馈列表 / 反馈详情 / 反馈回复 / 反馈完成),并且只在「Koishi 自己匹配不上」时才介入,不会和正常指令重复执行。
  2. 编号与后面的内容之间 —— 反馈详情 / 反馈回复 / 反馈完成 的编号参数由插件自己解析,所以 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