koishi-plugin-ggcevo 1.3.2 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -2973,7 +2973,7 @@ ${rewardLines.join("\n")}` : "";
2973
2973
  const cachePath = import_node_path.default.resolve(menuCacheDir, `${hash}.jpg`);
2974
2974
  if (import_node_fs.default.existsSync(cachePath)) {
2975
2975
  const cached = await (0, import_promises.readFile)(cachePath);
2976
- return import_koishi.h.image(`data:image/jpeg;base64,${cached.toString("base64")}`);
2976
+ return `data:image/jpeg;base64,${cached.toString("base64")}`;
2977
2977
  }
2978
2978
  if (!ctx.puppeteer) {
2979
2979
  logger.warn("[menu-render] 未启用 puppeteer 服务");
@@ -2994,7 +2994,7 @@ ${rewardLines.join("\n")}` : "";
2994
2994
  } catch (e) {
2995
2995
  logger.error("[menu-render] 写入菜单图缓存失败: %o", e);
2996
2996
  }
2997
- return import_koishi.h.image(`data:image/jpeg;base64,${img.toString("base64")}`);
2997
+ return `data:image/jpeg;base64,${img.toString("base64")}`;
2998
2998
  } catch (e) {
2999
2999
  logger.warn("[menu-render] 渲染菜单图片失败: %o", e);
3000
3000
  return "⚠️ 菜单图片渲染失败,请查看日志后重试。";
@@ -3002,10 +3002,50 @@ ${rewardLines.join("\n")}` : "";
3002
3002
  await page.close();
3003
3003
  }
3004
3004
  }, "renderMenuImage");
3005
+ const sendMenuImage = /* @__PURE__ */ __name(async (session, dataUrl) => {
3006
+ const logger = ctx.logger("ggcevo");
3007
+ if (!dataUrl.startsWith("data:image")) return dataUrl;
3008
+ if (session.platform !== "qq") return import_koishi.h.image(dataUrl);
3009
+ const bot = session.bot;
3010
+ const match = /^data:image\/[\w.+-]+;base64,(.*)$/.exec(dataUrl);
3011
+ if (!match) return "⚠️ 菜单图片数据无效。";
3012
+ try {
3013
+ const fileData = match[1];
3014
+ const msgSeq = (session["seq"] || 0) + 1;
3015
+ session["seq"] = msgSeq;
3016
+ if (session.isDirect) {
3017
+ const fileRes = await bot.internal.sendFilePrivate(session.userId, { file_type: 1, srv_send_msg: false, file_data: fileData });
3018
+ logger.info("[menu-render] QQ 官方图片上传响应: %o", fileRes);
3019
+ await bot.internal.sendPrivateMessage(session.channelId, {
3020
+ msg_type: 7,
3021
+ media: fileRes,
3022
+ content: "",
3023
+ msg_id: session.messageId,
3024
+ msg_seq: msgSeq
3025
+ });
3026
+ } else {
3027
+ const fileRes = await bot.internal.sendFileGuild(session.channelId, { file_type: 1, srv_send_msg: false, file_data: fileData });
3028
+ logger.info("[menu-render] QQ 官方图片上传响应: %o", fileRes);
3029
+ const msgRes = await bot.internal.sendMessage(session.channelId, {
3030
+ msg_type: 7,
3031
+ media: fileRes,
3032
+ content: "",
3033
+ msg_id: session.messageId,
3034
+ msg_seq: msgSeq
3035
+ });
3036
+ logger.info("[menu-render] QQ 官方消息发送响应: %o", msgRes);
3037
+ if (msgRes?.audit_id) logger.warn("[menu-render] QQ 消息进入审核(audit_id=%s), 需开启 MESSAGE_AUDIT intent 才能确认最终是否发出", msgRes.audit_id);
3038
+ }
3039
+ return;
3040
+ } catch (e) {
3041
+ logger.error("[menu-render] QQ 官方发送菜单图失败: %o", e);
3042
+ return "⚠️ QQ 发送菜单图失败,请查看日志中的错误信息。";
3043
+ }
3044
+ }, "sendMenuImage");
3005
3045
  ctx.command("咕咕之战", "查看咕咕之战内容分类菜单").alias("菜单").action(async ({ session }) => {
3006
3046
  if (config.menuStyle === "image") {
3007
- const result = await renderMenuImage(buildMenuHtml("咕咕之战", "内容分类菜单 · 输入指令名即可使用"));
3008
- return typeof result === "string" ? result : (0, import_koishi.h)("quote", { id: session.messageId }, result);
3047
+ const dataUrl = await renderMenuImage(buildMenuHtml("咕咕之战", "内容分类菜单 · 输入指令名即可使用"));
3048
+ return sendMenuImage(session, dataUrl);
3009
3049
  }
3010
3050
  return buildTextMenu();
3011
3051
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-ggcevo",
3
3
  "description": "GGCEVO 综合插件:星际争霸2游戏句柄绑定 + 签到/抽奖/兑换/背包/活动系统等虚拟物品玩法",
4
- "version": "1.3.2",
4
+ "version": "1.3.3",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [
package/readme.md CHANGED
@@ -179,6 +179,14 @@ npm install koishi-plugin-ggcevo
179
179
 
180
180
  ## 更新日志
181
181
 
182
+ ### v1.3.3
183
+
184
+ 修复 QQ 官方机器人不发送图片菜单且无报错的问题。
185
+
186
+ - **移除图片消息的引用回复**:`咕咕之战` 图片菜单不再包裹 `<quote>` 引用(与 preview-help 一致,裸发图片)。此前消息同时携带 `message_reference` + 被动回复 `msg_id` + `media` 的组合,在 QQ 官方接口下可能被静默丢弃
187
+ - **QQ 官方机器人手动发送 + 真实响应日志**:图片模式下,QQ 平台不再走适配器(适配器会吞掉 QQ 接口错误导致「无报错」),改为插件直接调用 QQ 官方富媒体上传(`/v2/groups/{id}/files`)与消息发送接口,并将 QQ 真实返回(含 `file_uuid`/`audit_id`/错误码)输出到 `[menu-render]` 日志;若返回 `audit_id`(消息进入审核)会额外警告,提示需开启 `MESSAGE_AUDIT` intent
188
+ - **非 QQ 平台**:图片直接发送,不再带引用
189
+
182
190
  ### v1.3.2
183
191
 
184
192
  图片菜单渲染对齐 preview-help 方案,新增磁盘缓存。