Simple Robot | 米游社大别野组件 v0.2.0 Help

使用API

安装

plugins { // 或使用 kotlin("multiplatform") // 但是不管是什么,你都需要 kotlin 插件来支持自动选择对应平台的依赖。 kotlin("jvm") version "1.9.21" // 其他一些插件, 随你喜欢 `[[[java|https://docs.gradle.org/current/userguide/java_plugin.html#header]]]` // 你依旧可以使用 Java 编写代码 `[[[application|https://docs.gradle.org/current/userguide/application_plugin.html]]]` // 使用 application 可以打包你的应用程序 } // 其他配置... dependencies { implementation("love.forte.simbot.component:simbot-component-miyoushe-villa-api:0.2.0") // 其他依赖.. }
plugins { // 或使用 org.jetbrains.kotlin.multiplatform, // 但是不管是什么,你都需要 kotlin 插件来支持自动选择对应平台的依赖。 id 'org.jetbrains.kotlin.jvm' version '1.9.21' // 其他一些插件, 随你喜欢 id '[[[java|https://docs.gradle.org/current/userguide/java_plugin.html#header]]]' // 你依旧可以使用 Java 编写代码 id '[[[application|https://docs.gradle.org/current/userguide/application_plugin.html]]]' // 使用 application 可以打包你的应用程序 } // 其他配置... dependencies { implementation 'love.forte.simbot.component:simbot-component-miyoushe-villa-api:0.2.0' // 其他依赖.. }
<dependency> <groupId>love.forte.simbot.component</groupId> <!-- Maven 需要添加 `-jvm` 后缀来选择使用 JVM 平台 --> <artifactId>simbot-component-miyoushe-villa-api-jvm</artifactId> <version>0.2.0</version> </dependency>

然后选择一个合适的 Ktor 引擎。

Ktor引擎

你可以前往 Ktor文档 处选择一个对应所用平台下合适的 Client Engine。 这里会根据不同平台提供几个示例,你可以选择其他可用目标。


CIO 是一个比较通用的引擎。 在不知道选什么的情况下,可以考虑使用它。

runtimeOnly("io.ktor:ktor-client-cio-jvm:$ktor_version")
runtimeOnly 'io.ktor:ktor-client-cio-jvm:$ktor_version'
<dependency> <groupId>io.ktor</groupId> <artifactId>ktor-client-cio-jvm</artifactId> <version>${ktor_version}</version> <scope>runtime</scope> </dependency>

如果你打算使用 Java11+,也可以选择 Java 引擎。


runtimeOnly("io.ktor:ktor-client-java:$ktor_version")

runtimeOnly 'io.ktor:ktor-client-java:$ktor_version'

<dependency> <groupId>io.ktor</groupId> <artifactId>ktor-client-java-jvm</artifactId> <version>${ktor_version}</version> <scope>runtime</scope> </dependency>


JavaScript 平台下可以选择 Js 引擎。

implementation("io.ktor:ktor-client-js:$ktor_version")
implementation 'io.ktor:ktor-client-js:$ktor_version'

native 平台目标下,可能需要根据不同的平台类型选择不同的引擎。


可以选择 WinHttp 引擎。

implementation("io.ktor:ktor-client-winhttp:$ktor_version")
implementation 'io.ktor:ktor-client-winhttp:$ktor_version'

Linux 下依旧可以选择 CIO 引擎。

implementation("io.ktor:ktor-client-cio:$ktor_version")
implementation 'io.ktor:ktor-client-cio:$ktor_version'

可以选择 Darwin 引擎。

implementation("io.ktor:ktor-client-darwin:$ktor_version")
implementation 'io.ktor:ktor-client-darwin:$ktor_version'

使用

大别野组件 的API模块提供了针对 米游社大别野API 的基本对应封装。

API封装的命名与API具有一定关联,例如 获取大别野信息

GET /vila/api/bot/platform/getVilla
love.forte.simbot.miyoushe.api.villa.GetVillaApi

API的应用大差不差,因此此处仅使用部分类型作为示例, 不会演示所有API。

// 准备 bot 的必要信息 val botId = "bot_xxxx" val botSecret = "xxxx" // 大别野ID,请求时作为token的一员。 val villaId = "1234" // 构建请求用的 token val token = MiyousheVillaApiToken(botId, botSecret, villaId) // 准备一个用于 HTTP 请求的 [[[HttpClient|https://ktor.io/docs/create-client.html]]] // 如果使用 JVM,你需要确保 classpath 环境中添加了合适的 [[[引擎|https://ktor.io/docs/http-client-engines.html]]] // 如果使用其他平台,例如 JS 或 native,则可能需要添加了合适的引擎依赖后手动填入它们,以 mingwx64 平台为例:`HttpClient(WinHttp)`。 val httpClient = HttpClient() // 构建需要请求的 API 示例,此处为 [[[获取房间信息|https://webstatic.mihoyo.com/vila/bot/doc/room_api/get_room.html]]] API val roomId: ULong = 1234u // 假设房间ID是 1234 val api = GetRoomApi.create(roomId) // 发起请求并得到结果。在 API 模块中有三种请求方式(均为挂起函数): // 1️⃣ 使用 api.request, 得到 Ktor 进行 HTTP 请求的原始响应类型 HttpResponse val response: HttpResponse = api.request(httpClient, token) // 2️⃣ 使用 api.requestResult, 得到请求结果的统一响应体结构。假如此响应代表成功(result.retcode == 0), 则可以通过 result.data 获取响应结果。 val result: ApiResult<GetRoomResult> = api.requestResult(httpClient, token) // 3️⃣ 使用 api.requestData, 得到当响应体代表成功时的响应数据。如果响应体不为成功则会抛出异常。 val requestData: GetRoomResult = api.requestData(httpClient, token)
// 准备 bot 的必要信息 var botId = "bot_xxxx"; var botSecret = "xxxx"; // 大别野ID,请求时作为token的一员。 var villaId = "1234"; // 构建请求用的 token var token = new MiyousheVillaApiToken(botId, botSecret, villaId); // 准备一个用于 HTTP 请求的 [[[HttpClient|https://ktor.io/docs/create-client.html]]] // 你需要确保 classpath 环境中添加了合适的 [[[引擎|https://ktor.io/docs/http-client-engines.html]]] var client = HttpClientJvmKt.HttpClient((config) -> Unit.INSTANCE); // 构建需要请求的 API 示例,此处为 [[[获取房间信息|https://webstatic.mihoyo.com/vila/bot/doc/room_api/get_room.html]]] API // 假设房间ID是 1234 var api = GetRoomApi.create(Long.parseUnsignedLong("1234")); // Java 中操作无符号数字比较麻烦,因此面向Java的大部分相关操作也会提供基于字符串操作的重载、扩展API var api = GetRoomApi.create("1234"); // 发起请求并得到结果。在 API 模块中有三种请求方式(均使用 `APIRequests` 的静态方法): // 1️⃣ 使用 api.request, 得到 Ktor 进行 HTTP 请求的原始响应类型 HttpResponse HttpResponse response = APIRequests.requestBlocking(api, client, token); // 2️⃣ 使用 api.requestResult, 得到请求结果的统一响应体结构。假如此响应代表成功(result.retcode == 0), 则可以通过 result.data 获取响应结果。 ApiResult<GetRoomResult> result = APIRequests.requestResultBlocking(api, client, token); // 3️⃣ 使用 api.requestData, 得到当响应体代表成功时的响应数据。如果响应体不为成功则会抛出异常。 GetRoomResult requestData = APIRequests.requestDataBlocking(api, client, token);
import java.util.concurrent.CompletableFuture;// 准备 bot 的必要信息 var botId = "bot_xxxx"; var botSecret = "xxxx"; // 大别野ID,请求时作为token的一员。 var villaId = "1234"; // 构建请求用的 token var token = new MiyousheVillaApiToken(botId, botSecret, villaId); // 准备一个用于 HTTP 请求的 [[[HttpClient|https://ktor.io/docs/create-client.html]]] // 你需要确保 classpath 环境中添加了合适的 [[[引擎|https://ktor.io/docs/http-client-engines.html]]] var client = HttpClientJvmKt.HttpClient((config) -> Unit.INSTANCE); // 构建需要请求的 API 示例,此处为 [[[获取房间信息|https://webstatic.mihoyo.com/vila/bot/doc/room_api/get_room.html]]] API // 假设房间ID是 1234 var api = GetRoomApi.create(Long.parseUnsignedLong("1234")); // Java 中操作无符号数字比较麻烦,因此面向Java的大部分相关操作也会提供基于字符串操作的重载、扩展API var api = GetRoomApi.create("1234"); // 发起请求并得到结果。在 API 模块中有三种请求方式(均使用 `APIRequests` 的静态方法): // 1️⃣ 使用 api.request, 得到 Ktor 进行 HTTP 请求的原始响应类型 HttpResponse CompletableFuture<HttpResponse> response = APIRequests.requestAsync(api, client, token); // 2️⃣ 使用 api.requestResult, 得到请求结果的统一响应体结构。假如此响应代表成功(result.retcode == 0), 则可以通过 result.data 获取响应结果。 CompletableFuture<ApiResult<GetRoomResult>> result = APIRequests.requestResultAsync(api, client, token); // 3️⃣ 使用 api.requestData, 得到当响应体代表成功时的响应数据。如果响应体不为成功则会抛出异常。 CompletableFuture<GetRoomResult> requestData = APIRequests.requestDataAsync(api, client, token);
Last modified: 05 January 2024