调试、发布与常见问题

奶狗 发表于 4 周前 浏览 28 字数 1454 阅读时长 8分钟

7. 调试、发布与常见问题

7.1 安装与发布流程

  1. 把目录放到 plugins/<id>/(确保有 index.jsid 与目录名一致)。
  2. 重启 server(或调用 plugins.reload())。
  3. 后台 → 插件市场 → 找到插件 → 点击安装。
  4. 安装后插件在 plugins 表中产生记录(enabled=1),消息轮询开始调用它。

7.2 收费模式(access)

access 模式 说明
0 免费 所有用户免费安装
1 付费 所有用户需消耗积分
2 会员免费 会员免积分,非会员付积分
3 会员付费 仅会员可兑换,需消耗积分

7.3 用户上传自定义插件

  • 前端:插件市场 → 上传 .js 文件(限 500KB,不支持 npm 依赖)。
  • 后端存入 plugins/market/mp-{id}/index.js
  • 上传后需审核通过才会在市场列表出现。

7.4 运行模式(避免重复消息)

  • 本地 / 生产:只需 node server.js(内置 auto-poll 自动拉消息)。
  • 不要同时跑 node server.js + node worker.js(两个进程各拉一遍 → 同一条消息处理两次 → 重复回复)。
  • 如果确实要用独立 worker:AUTO_POLL=0 node server.js 关闭内置轮询,再 node worker.js

7.5 调试

// 日志
console.log('[my-plugin] 调试信息');
console.error('[my-plugin] 错误', err.message);

// 热重载(修改插件后无需重启)
const plugins = require('./lib/plugins');
plugins.reload();   // 清除 require 缓存,新增/修改的插件立即生效

// 验证加载
node -e "const m = require('./plugins/my-plugin/index.js'); console.log(m.meta)"

7.6 常见问题

现象 原因
市场看不到插件 文件为空 / meta.id 缺失 / 目录名与 id 不一致
插件不触发 触发词不匹配 / 未安装到该机器人 / 被其他插件拦截
图片发送失败 临时文件路径错误 / 文件太小 / CDN 上传失败
语音发不出 用了 voice 类型 → 改用 file 类型
改代码不生效 require 缓存未清 → 调 plugins.reload() 或重启
AI 工具不出现 插件未安装到该机器人 / 工具名与内置重名
handleAiTool 报错 使用了 this.xxx → 改用模块级函数
QQ 上不生效 插件未声明 channels:['qq'],且 id 不在 QQ 白名单

7.7 快速上手检查清单

  • [ ] 在 plugins/<id>/index.js 创建文件(id 与目录名一致)
  • [ ] 导出 meta(含 idnameversionauthordescriptionusageentry
  • [ ] 导出 onMessage(msg, ctx),返回 true/false/{reply}
  • [ ] 如需设置面板:添加 meta.settingsSchema,用 plugins.loadPluginConfig 读取
  • [ ] 如需 AI 自动调用:添加 meta.aiTools + 导出 handleAiTool
  • [ ] 如需 QQ 支持:声明 meta.channels: ['wechat','qq'] 或确保 id 在白名单
  • [ ] 如需被动监听:用 hooks.on('group_message', ...)
  • [ ] 如需扩充提示词:导出 getCombinedPrompt(botId, peerId)
  • [ ] 重启 server 或调 plugins.reload()
  • [ ] 后台插件市场安装启用
  • [ ] 发消息测试,看控制台日志