Simple Robot v4.7.0 Help

用例: 发送图片

发送图片是一个经常使用、且经常被问及“怎么发图片”的内容。

本章节介绍在QQ机器人组件中,如何发送一个图片。

API模块

以在频道中为例:

假如你只使用了API模块,那么就需要普通地使用API来发送图片: 使用 MessageSendApi 中的 fileImageimage 属性上传图片。

其中 image 比较简单,就是一个图片的地址。

val api = MessageSendApi.create("channel id") { image = "https://图片.域名/xxx.jpg" } // 请求API,即发送消息 api.request(...)
// 你的图片资源 var myFileImage = ... // MessageSendApi 的 body 的 builder var bodyBuilder = MessageSendApi.Body.builder(); bodyBuilder.setImage("https://图片.域名/xxx.jpg"); // 构建API var api = MessageSendApi.create("channel id", bodyBuilder.build()); // 请求API,即发送消息 XxxRequests.requestXxx(...)

另一种方式便是使用 fileImage 上传一个图片。

首先,准备好你的图片并提供给参数 fileImage

所有平台中,都可以提供如下类型的图片:

  • ByteArray (字节数组)

  • InputProvider (参考 Ktor)

  • ByteReadPacket (参考 Ktor)

  • ChannelProvider (参考 Ktor)

在 JVM 平台中, 额外可以提供如下类型的参数:

  • java.io.File (本地图片资源)

  • java.nio.Path (本地图片资源)

  • java.net.URL (远程图片资源,会先下载到本地)

  • java.net.URI (远程图片资源,会先下载到本地)

// 你的图片资源 val myFileImage = ... // 构建API val api = MessageSendApi.create("channel ID") { fileImage = myFileImage // ... } // 请求API,即发送消息 api.request(...)
// 你的图片资源 var myFileImage = ... // MessageSendApi 的 body 的 builder var bodyBuilder = MessageSendApi.Body.builder(); bodyBuilder.setFileImage(myFileImage); // 构建API var api = MessageSendApi.create("channel id", bodyBuilder.build()); // 请求API,即发送消息 XxxRequests.requestXxx(...)

组件库模块

以在频道中为例:

更多的时候也可能是想要在使用组件库配合simbot的时候发送一个图片。

实际上,simbot标准API中提供了一些常见、通用的消息类型,其中就包括图片类型。 当希望发送消息,那么你可以构建一个 OfflineImage, 而 OfflineImage 则可以通过 Resource 构建而来。

// 你想要发送消息的目标 QGTextChanenl // 只有文字子频道 QGTextChanenl 才能发送消息 // 其他类型的 QGChannel 无法发送消息 val channel: QGTextChannel = ... // 获取到一个 Resource, 此处以 JVM 的 Path 为参考 val imageFile = Path("本地图片/地址/image.png").toResource() val offlineImage = imageFile.toOfflineImage() channel.send(offlineImage) // 或配合其他消息元素发送,比如文字 channel.send("你好".toText() + offlineImage)
// 你想要发送消息的目标 QGTextChanenl // 只有文字子频道 QGTextChanenl 才能发送消息 // 其他类型的 QGChannel 无法发送消息 QGTextChannel channel = ... // 获取到一个 Resource, 此处以 Path 为参考 var path = Path.of("本地图片/地址/image.png"); var resource = Resources.valueOf(path); var offlineImage = OfflineImage.ofResource(resource); channel.sendXxx(offlineImage); // 或配合其他消息元素发送,比如文字 channel.sendXxx(Messages.of(Text.of("你好"), offlineImage));
Last modified: 15 November 2024