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