qq频道适配器在频道发不出图来

QQ频道适配器和其他插件配合只能发出文本发不出图片

1 个赞

这是一个较为经典的问题,是由于插件直接发送了图片的地址(而非图片的内容)导致的。

  • 如果你是该插件的使用者:可以联系插件的开发者求助。
  • 如果你是该插件的开发者:你需要使用 ctx.http 下载图片后使用 h.image() 发送图片。
  • 如果你是插件开发者,并且正在使用 Blockly 开发插件:你需要等待 Blockly 的作者更新发送图片的新方式。可以咨询 @TimeBather
  • 如果你是适配器开发者:可能需要判断公网 url 然后下载图片发送。

才知道有论坛(
我是上面插件的开发者,使用的是 session.sendQueued(segment('image', {url: "https://abc.com/img.png"})) 的语法,目前发送图片在go-cqhttp适配器下表现正常,所以这个问题是qq频道适配器特定的问题么?
另外,好像最新的文档使用的是JSX和h.img(),我的使用方法好像有点过时(doge

这是发送图片的正确姿势:

try {
  await session.sendQueued(
    h.image(
      await ctx.http.get("https://abc.com/img.png", {
        responseType: "arraybuffer",
      }),
      "image/png"
    )
  );
} catch (e) {
  // 可以进行错误处理,比如
  // await session.sendQueued('出错啦')
}

@YehowahLiu

  1. 根据 Koishi 的规定,segment(或者 h)是可以发送 url 图片的。如果部分适配器没有成功发送,那么是适配器实现的问题或者平台不支持所导致
  2. segment 完全等价于 h,我们提供 h 的别名是因为 h 更短,适合大量使用的场景
  3. 文档没有过时,上面 @ilharp 的回答是错误的
  4. 类型不匹配的原因是你需要额外传一个二参数:h(buffer, mime),其中 mime 比如 image/png