Skip to content

Commit 765fba9

Browse files
authored
Merge pull request #289 from simple-robot/dev/support-voice-APIs
支持语音相关接口api
2 parents 5d36e13 + 996dd52 commit 765fba9

File tree

11 files changed

+1431
-5
lines changed

11 files changed

+1431
-5
lines changed

simbot-component-kook-api/api/simbot-component-kook-api.api

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2102,6 +2102,140 @@ public final class love/forte/simbot/kook/api/userchat/UserChatView$Companion {
21022102
public final fun serializer ()Lkotlinx/serialization/KSerializer;
21032103
}
21042104

2105+
public final class love/forte/simbot/kook/api/voice/GetVoiceListApi : love/forte/simbot/kook/api/KookGetApi {
2106+
public static final field Factory Llove/forte/simbot/kook/api/voice/GetVoiceListApi$Factory;
2107+
public synthetic fun <init> (Ljava/lang/Integer;Ljava/lang/Integer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
2108+
public static final fun create ()Llove/forte/simbot/kook/api/voice/GetVoiceListApi;
2109+
public static final fun create (Ljava/lang/Integer;)Llove/forte/simbot/kook/api/voice/GetVoiceListApi;
2110+
public static final fun create (Ljava/lang/Integer;Ljava/lang/Integer;)Llove/forte/simbot/kook/api/voice/GetVoiceListApi;
2111+
public fun getResultDeserializationStrategy ()Lkotlinx/serialization/DeserializationStrategy;
2112+
}
2113+
2114+
public final class love/forte/simbot/kook/api/voice/GetVoiceListApi$Factory {
2115+
public final fun create ()Llove/forte/simbot/kook/api/voice/GetVoiceListApi;
2116+
public final fun create (Ljava/lang/Integer;)Llove/forte/simbot/kook/api/voice/GetVoiceListApi;
2117+
public final fun create (Ljava/lang/Integer;Ljava/lang/Integer;)Llove/forte/simbot/kook/api/voice/GetVoiceListApi;
2118+
public static synthetic fun create$default (Llove/forte/simbot/kook/api/voice/GetVoiceListApi$Factory;Ljava/lang/Integer;Ljava/lang/Integer;ILjava/lang/Object;)Llove/forte/simbot/kook/api/voice/GetVoiceListApi;
2119+
}
2120+
2121+
public final class love/forte/simbot/kook/api/voice/JoinedVoiceChannel {
2122+
public static final field Companion Llove/forte/simbot/kook/api/voice/JoinedVoiceChannel$Companion;
2123+
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
2124+
public final fun component1 ()Ljava/lang/String;
2125+
public final fun component2 ()Ljava/lang/String;
2126+
public final fun component3 ()Ljava/lang/String;
2127+
public final fun component4 ()Ljava/lang/String;
2128+
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Llove/forte/simbot/kook/api/voice/JoinedVoiceChannel;
2129+
public static synthetic fun copy$default (Llove/forte/simbot/kook/api/voice/JoinedVoiceChannel;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Llove/forte/simbot/kook/api/voice/JoinedVoiceChannel;
2130+
public fun equals (Ljava/lang/Object;)Z
2131+
public final fun getGuildId ()Ljava/lang/String;
2132+
public final fun getId ()Ljava/lang/String;
2133+
public final fun getName ()Ljava/lang/String;
2134+
public final fun getParentId ()Ljava/lang/String;
2135+
public fun hashCode ()I
2136+
public fun toString ()Ljava/lang/String;
2137+
}
2138+
2139+
public synthetic class love/forte/simbot/kook/api/voice/JoinedVoiceChannel$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
2140+
public static final field INSTANCE Llove/forte/simbot/kook/api/voice/JoinedVoiceChannel$$serializer;
2141+
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
2142+
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
2143+
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Llove/forte/simbot/kook/api/voice/JoinedVoiceChannel;
2144+
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
2145+
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
2146+
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Llove/forte/simbot/kook/api/voice/JoinedVoiceChannel;)V
2147+
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
2148+
}
2149+
2150+
public final class love/forte/simbot/kook/api/voice/JoinedVoiceChannel$Companion {
2151+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
2152+
}
2153+
2154+
public final class love/forte/simbot/kook/api/voice/VoiceJoinApi : love/forte/simbot/kook/api/KookPostApi {
2155+
public static final field Factory Llove/forte/simbot/kook/api/voice/VoiceJoinApi$Factory;
2156+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
2157+
public static final fun create (Ljava/lang/String;)Llove/forte/simbot/kook/api/voice/VoiceJoinApi;
2158+
public static final fun create (Ljava/lang/String;Ljava/lang/String;)Llove/forte/simbot/kook/api/voice/VoiceJoinApi;
2159+
public static final fun create (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Llove/forte/simbot/kook/api/voice/VoiceJoinApi;
2160+
public static final fun create (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;)Llove/forte/simbot/kook/api/voice/VoiceJoinApi;
2161+
public static final fun create (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;)Llove/forte/simbot/kook/api/voice/VoiceJoinApi;
2162+
public fun getBody ()Ljava/lang/Object;
2163+
public fun getResultDeserializationStrategy ()Lkotlinx/serialization/DeserializationStrategy;
2164+
}
2165+
2166+
public final class love/forte/simbot/kook/api/voice/VoiceJoinApi$Factory {
2167+
public final fun create (Ljava/lang/String;)Llove/forte/simbot/kook/api/voice/VoiceJoinApi;
2168+
public final fun create (Ljava/lang/String;Ljava/lang/String;)Llove/forte/simbot/kook/api/voice/VoiceJoinApi;
2169+
public final fun create (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Llove/forte/simbot/kook/api/voice/VoiceJoinApi;
2170+
public final fun create (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;)Llove/forte/simbot/kook/api/voice/VoiceJoinApi;
2171+
public final fun create (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;)Llove/forte/simbot/kook/api/voice/VoiceJoinApi;
2172+
public static synthetic fun create$default (Llove/forte/simbot/kook/api/voice/VoiceJoinApi$Factory;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;ILjava/lang/Object;)Llove/forte/simbot/kook/api/voice/VoiceJoinApi;
2173+
}
2174+
2175+
public final class love/forte/simbot/kook/api/voice/VoiceJoinApi$Result {
2176+
public static final field Companion Llove/forte/simbot/kook/api/voice/VoiceJoinApi$Result$Companion;
2177+
public fun <init> (Ljava/lang/String;Ljava/lang/String;ZIILjava/lang/String;Ljava/lang/String;)V
2178+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;ZIILjava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
2179+
public final fun component1 ()Ljava/lang/String;
2180+
public final fun component2 ()Ljava/lang/String;
2181+
public final fun component3 ()Z
2182+
public final fun component4 ()I
2183+
public final fun component5 ()I
2184+
public final fun component6 ()Ljava/lang/String;
2185+
public final fun component7 ()Ljava/lang/String;
2186+
public final fun copy (Ljava/lang/String;Ljava/lang/String;ZIILjava/lang/String;Ljava/lang/String;)Llove/forte/simbot/kook/api/voice/VoiceJoinApi$Result;
2187+
public static synthetic fun copy$default (Llove/forte/simbot/kook/api/voice/VoiceJoinApi$Result;Ljava/lang/String;Ljava/lang/String;ZIILjava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Llove/forte/simbot/kook/api/voice/VoiceJoinApi$Result;
2188+
public fun equals (Ljava/lang/Object;)Z
2189+
public final fun getAudioPt ()Ljava/lang/String;
2190+
public final fun getAudioSsrc ()Ljava/lang/String;
2191+
public final fun getBitrate ()I
2192+
public final fun getIp ()Ljava/lang/String;
2193+
public final fun getPort ()Ljava/lang/String;
2194+
public final fun getRtcpMux ()Z
2195+
public final fun getRtcpPort ()I
2196+
public fun hashCode ()I
2197+
public fun toString ()Ljava/lang/String;
2198+
}
2199+
2200+
public synthetic class love/forte/simbot/kook/api/voice/VoiceJoinApi$Result$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
2201+
public static final field INSTANCE Llove/forte/simbot/kook/api/voice/VoiceJoinApi$Result$$serializer;
2202+
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
2203+
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
2204+
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Llove/forte/simbot/kook/api/voice/VoiceJoinApi$Result;
2205+
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
2206+
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
2207+
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Llove/forte/simbot/kook/api/voice/VoiceJoinApi$Result;)V
2208+
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
2209+
}
2210+
2211+
public final class love/forte/simbot/kook/api/voice/VoiceJoinApi$Result$Companion {
2212+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
2213+
}
2214+
2215+
public final class love/forte/simbot/kook/api/voice/VoiceKeepAliveApi : love/forte/simbot/kook/api/KookPostApi {
2216+
public static final field Factory Llove/forte/simbot/kook/api/voice/VoiceKeepAliveApi$Factory;
2217+
public synthetic fun <init> (Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
2218+
public static final fun create (Ljava/lang/String;)Llove/forte/simbot/kook/api/voice/VoiceKeepAliveApi;
2219+
public fun getBody ()Ljava/lang/Object;
2220+
public fun getResultDeserializationStrategy ()Lkotlinx/serialization/DeserializationStrategy;
2221+
}
2222+
2223+
public final class love/forte/simbot/kook/api/voice/VoiceKeepAliveApi$Factory {
2224+
public final fun create (Ljava/lang/String;)Llove/forte/simbot/kook/api/voice/VoiceKeepAliveApi;
2225+
}
2226+
2227+
public final class love/forte/simbot/kook/api/voice/VoiceLeaveApi : love/forte/simbot/kook/api/KookPostApi {
2228+
public static final field Factory Llove/forte/simbot/kook/api/voice/VoiceLeaveApi$Factory;
2229+
public synthetic fun <init> (Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
2230+
public static final fun create (Ljava/lang/String;)Llove/forte/simbot/kook/api/voice/VoiceLeaveApi;
2231+
public fun getBody ()Ljava/lang/Object;
2232+
public fun getResultDeserializationStrategy ()Lkotlinx/serialization/DeserializationStrategy;
2233+
}
2234+
2235+
public final class love/forte/simbot/kook/api/voice/VoiceLeaveApi$Factory {
2236+
public final fun create (Ljava/lang/String;)Llove/forte/simbot/kook/api/voice/VoiceLeaveApi;
2237+
}
2238+
21052239
public final class love/forte/simbot/kook/event/AddBlockListEventBody {
21062240
public static final field Companion Llove/forte/simbot/kook/event/AddBlockListEventBody$Companion;
21072241
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V

simbot-component-kook-api/src/commonMain/kotlin/love/forte/simbot/kook/api/ApiResult.kt

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import kotlinx.serialization.json.JsonElement
2828
import kotlinx.serialization.json.buildJsonObject
2929
import kotlinx.serialization.json.decodeFromJsonElement
3030
import love.forte.simbot.kook.InternalKookApi
31+
import love.forte.simbot.kook.api.KookApiResults.SUCCESS_CODE
3132
import love.forte.simbot.kook.api.RateLimit.Companion.DEFAULT_LIMIT
3233
import love.forte.simbot.kook.api.RateLimit.Companion.DEFAULT_REMAINING
3334
import love.forte.simbot.kook.api.RateLimit.Companion.DEFAULT_RESET
@@ -207,7 +208,7 @@ public class ApiResult @ApiResultType constructor(
207208
/**
208209
* 此接口的响应码是否为成功的响应码.
209210
*/
210-
public val isSuccess: Boolean get() = isHttpSuccess && code == KookApiResults.SUCCESS_CODE
211+
public val isSuccess: Boolean get() = isHttpSuccess && code == SUCCESS_CODE
211212

212213
/**
213214
* 判断 [httpStatus] 是否 [成功][HttpStatusCode.isSuccess]。
@@ -256,8 +257,22 @@ public class ApiResult @ApiResultType constructor(
256257

257258

258259
override fun toString(): String =
259-
"ApiResult(code=$code, message=$message, data=$data, httpStatus=$httpStatus, rateLimit=$rateLimit, raw=$raw)"
260-
260+
"ApiResult(" +
261+
"code=$code, " +
262+
"message=$message, " +
263+
"data=$data, " +
264+
"httpStatus=${httpStatusOrNull ?: "<Not Initialized>"}, " +
265+
"rateLimit=${rateLimitOrNull ?: "<Not Initialized>"}, " +
266+
"raw=${rawOrNull ?: "<Not Initialized>"})"
267+
268+
private val httpStatusOrNull
269+
get() = if (::httpStatus.isInitialized) httpStatus else null
270+
271+
private val rateLimitOrNull
272+
get() = if (::rateLimit.isInitialized) rateLimit else null
273+
274+
private val rawOrNull
275+
get() = if (::raw.isInitialized) raw else null
261276

262277
override fun equals(other: Any?): Boolean {
263278
if (this === other) return true

simbot-component-kook-api/src/commonMain/kotlin/love/forte/simbot/kook/api/channel/GetChannelUserListApi.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ public data class VoiceChannelUser @ApiResultType constructor(
9292
*/
9393
@SerialName("identify_num")
9494
override val identifyNum: String =
95-
username.split("#", limit = 2)
96-
.getOrNull(1) ?: "",
95+
username.substringAfter('#', ""),
96+
9797
/**
9898
* 当前是否在线
9999
*/
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
/*
2+
* Copyright (c) 2023-2025. ForteScarlet.
3+
*
4+
* This file is part of simbot-component-kook.
5+
*
6+
* simbot-component-kook is free software: you can redistribute it and/or modify
7+
* it under the terms of the GNU Lesser General Public License as published by
8+
* the Free Software Foundation, either version 3 of the License, or
9+
* (at your option) any later version.
10+
*
11+
* simbot-component-kook is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU Lesser General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU Lesser General Public License
17+
* along with simbot-component-kook,
18+
* If not, see <https://www.gnu.org/licenses/>.
19+
*/
20+
21+
package love.forte.simbot.kook.api.voice
22+
23+
import io.ktor.http.*
24+
import kotlinx.serialization.DeserializationStrategy
25+
import kotlinx.serialization.SerialName
26+
import kotlinx.serialization.Serializable
27+
import love.forte.simbot.kook.api.ApiResultType
28+
import love.forte.simbot.kook.api.KookGetApi
29+
import love.forte.simbot.kook.api.ListData
30+
import love.forte.simbot.kook.util.appendIfNotNull
31+
import love.forte.simbot.kook.util.parameters
32+
import kotlin.jvm.JvmOverloads
33+
import kotlin.jvm.JvmStatic
34+
35+
/**
36+
* [获取频道列表](https://developer.kookapp.cn/doc/http/voice#获取频道列表)
37+
*
38+
* 获取机器人加入的语音频道列表
39+
*
40+
* @author ForteScarlet
41+
* @since 4.2.0
42+
*/
43+
public class GetVoiceListApi private constructor(
44+
private val page: Int? = null,
45+
private val pageSize: Int? = null
46+
) : KookGetApi<ListData<JoinedVoiceChannel>>() {
47+
48+
public companion object Factory {
49+
private val PATH = ApiPath.create("voice", "list")
50+
51+
/**
52+
* 构造 [GetVoiceListApi].
53+
*/
54+
@JvmStatic
55+
@JvmOverloads
56+
public fun create(page: Int? = null, pageSize: Int? = null): GetVoiceListApi = GetVoiceListApi(page, pageSize)
57+
}
58+
59+
override val resultDeserializationStrategy: DeserializationStrategy<ListData<JoinedVoiceChannel>>
60+
get() = ListData.serializer(JoinedVoiceChannel.serializer())
61+
62+
override val apiPath: ApiPath
63+
get() = PATH
64+
65+
override fun urlBuild(builder: URLBuilder) {
66+
builder.parameters {
67+
appendIfNotNull("page", page) { it.toString() }
68+
appendIfNotNull("page_size", pageSize) { it.toString() }
69+
}
70+
}
71+
}
72+
73+
/**
74+
* (机器人加入的)语音频道的信息
75+
*/
76+
@Serializable
77+
public data class JoinedVoiceChannel @ApiResultType constructor(
78+
/**
79+
* 频道id
80+
*/
81+
val id: String,
82+
/**
83+
* 服务器id
84+
*/
85+
@SerialName("guild_id")
86+
val guildId: String,
87+
/**
88+
* 频道的父频道id
89+
*/
90+
@SerialName("parent_id")
91+
val parentId: String,
92+
/**
93+
* 频道名
94+
*/
95+
val name: String
96+
)

0 commit comments

Comments
 (0)