Skip to content

Commit 3dd845a

Browse files
committed
feat(api): 增加对消息模板相关API的支持
close #271
1 parent beec624 commit 3dd845a

File tree

12 files changed

+444
-274
lines changed

12 files changed

+444
-274
lines changed

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ apiValidation {
7979
"love.forte.simbot.annotations.InternalSimbotAPI",
8080
"love.forte.simbot.kook.ExperimentalKookApi",
8181
"love.forte.simbot.kook.InternalKookApi",
82+
"love.forte.simbot.kook.api.template.ExperimentalTemplateApi"
8283
),
8384
)
8485

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

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2103,6 +2103,99 @@ public final class love/forte/simbot/kook/api/role/UserRoleOperated$Companion {
21032103
public final fun serializer ()Lkotlinx/serialization/KSerializer;
21042104
}
21052105

2106+
public final class love/forte/simbot/kook/api/template/CreateTemplateApi$Factory {
2107+
public final fun create (Ljava/lang/String;Ljava/lang/String;I)Llove/forte/simbot/kook/api/template/CreateTemplateApi;
2108+
public final fun create (Ljava/lang/String;Ljava/lang/String;II)Llove/forte/simbot/kook/api/template/CreateTemplateApi;
2109+
public final fun create (Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;)Llove/forte/simbot/kook/api/template/CreateTemplateApi;
2110+
public final fun create (Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;)Llove/forte/simbot/kook/api/template/CreateTemplateApi;
2111+
public static synthetic fun create$default (Llove/forte/simbot/kook/api/template/CreateTemplateApi$Factory;Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Llove/forte/simbot/kook/api/template/CreateTemplateApi;
2112+
}
2113+
2114+
public synthetic class love/forte/simbot/kook/api/template/CreateTemplateResult$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
2115+
public fun <init> (Lkotlinx/serialization/KSerializer;)V
2116+
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
2117+
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
2118+
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Llove/forte/simbot/kook/api/template/CreateTemplateResult;
2119+
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
2120+
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
2121+
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Llove/forte/simbot/kook/api/template/CreateTemplateResult;)V
2122+
public final fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
2123+
}
2124+
2125+
public final class love/forte/simbot/kook/api/template/CreateTemplateResult$Companion {
2126+
public final fun serializer (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;
2127+
}
2128+
2129+
public final class love/forte/simbot/kook/api/template/DeleteTemplateApi$Factory {
2130+
public final fun create (Ljava/lang/String;)Llove/forte/simbot/kook/api/template/DeleteTemplateApi;
2131+
}
2132+
2133+
public abstract interface annotation class love/forte/simbot/kook/api/template/ExperimentalTemplateApi : java/lang/annotation/Annotation {
2134+
}
2135+
2136+
public final class love/forte/simbot/kook/api/template/GetTemplateListApi$Factory {
2137+
public final fun create ()Llove/forte/simbot/kook/api/template/GetTemplateListApi;
2138+
public final fun create (Ljava/lang/Integer;)Llove/forte/simbot/kook/api/template/GetTemplateListApi;
2139+
public final fun create (Ljava/lang/Integer;Ljava/lang/Integer;)Llove/forte/simbot/kook/api/template/GetTemplateListApi;
2140+
public static synthetic fun create$default (Llove/forte/simbot/kook/api/template/GetTemplateListApi$Factory;Ljava/lang/Integer;Ljava/lang/Integer;ILjava/lang/Object;)Llove/forte/simbot/kook/api/template/GetTemplateListApi;
2141+
}
2142+
2143+
public synthetic class love/forte/simbot/kook/api/template/TemplatePageList$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
2144+
public fun <init> (Lkotlinx/serialization/KSerializer;)V
2145+
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
2146+
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
2147+
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Llove/forte/simbot/kook/api/template/TemplatePageList;
2148+
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
2149+
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
2150+
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Llove/forte/simbot/kook/api/template/TemplatePageList;)V
2151+
public final fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
2152+
}
2153+
2154+
public final class love/forte/simbot/kook/api/template/TemplatePageList$Companion {
2155+
public final fun serializer (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;
2156+
}
2157+
2158+
public synthetic class love/forte/simbot/kook/api/template/TemplatePageMeta$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
2159+
public static final field INSTANCE Llove/forte/simbot/kook/api/template/TemplatePageMeta$$serializer;
2160+
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
2161+
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
2162+
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Llove/forte/simbot/kook/api/template/TemplatePageMeta;
2163+
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
2164+
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
2165+
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Llove/forte/simbot/kook/api/template/TemplatePageMeta;)V
2166+
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
2167+
}
2168+
2169+
public final class love/forte/simbot/kook/api/template/TemplatePageMeta$Companion {
2170+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
2171+
}
2172+
2173+
public final class love/forte/simbot/kook/api/template/UpdateTemplateApi$Factory {
2174+
public final fun create (Ljava/lang/String;)Llove/forte/simbot/kook/api/template/UpdateTemplateApi;
2175+
public final fun create (Ljava/lang/String;Ljava/lang/String;)Llove/forte/simbot/kook/api/template/UpdateTemplateApi;
2176+
public final fun create (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Llove/forte/simbot/kook/api/template/UpdateTemplateApi;
2177+
public final fun create (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;)Llove/forte/simbot/kook/api/template/UpdateTemplateApi;
2178+
public final fun create (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)Llove/forte/simbot/kook/api/template/UpdateTemplateApi;
2179+
public final fun create (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;)Llove/forte/simbot/kook/api/template/UpdateTemplateApi;
2180+
public final fun create (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;)Llove/forte/simbot/kook/api/template/UpdateTemplateApi;
2181+
public static synthetic fun create$default (Llove/forte/simbot/kook/api/template/UpdateTemplateApi$Factory;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Llove/forte/simbot/kook/api/template/UpdateTemplateApi;
2182+
}
2183+
2184+
public synthetic class love/forte/simbot/kook/api/template/UpdateTemplateResult$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
2185+
public fun <init> (Lkotlinx/serialization/KSerializer;)V
2186+
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
2187+
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
2188+
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Llove/forte/simbot/kook/api/template/UpdateTemplateResult;
2189+
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
2190+
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
2191+
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Llove/forte/simbot/kook/api/template/UpdateTemplateResult;)V
2192+
public final fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
2193+
}
2194+
2195+
public final class love/forte/simbot/kook/api/template/UpdateTemplateResult$Companion {
2196+
public final fun serializer (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;
2197+
}
2198+
21062199
public final class love/forte/simbot/kook/api/thread/Category {
21072200
public static final field Companion Llove/forte/simbot/kook/api/thread/Category$Companion;
21082201
public fun <init> (Ljava/lang/String;Ljava/lang/String;IILjava/util/List;)V
@@ -7258,6 +7351,21 @@ public abstract class love/forte/simbot/kook/objects/kmd/ValueAppenderMarkdownKo
72587351
public fun <init> (Ljava/lang/CharSequence;)V
72597352
}
72607353

7354+
public synthetic class love/forte/simbot/kook/objects/template/SimpleTemplate$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
7355+
public static final field INSTANCE Llove/forte/simbot/kook/objects/template/SimpleTemplate$$serializer;
7356+
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
7357+
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
7358+
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Llove/forte/simbot/kook/objects/template/SimpleTemplate;
7359+
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
7360+
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
7361+
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Llove/forte/simbot/kook/objects/template/SimpleTemplate;)V
7362+
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
7363+
}
7364+
7365+
public final class love/forte/simbot/kook/objects/template/SimpleTemplate$Companion {
7366+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
7367+
}
7368+
72617369
public final class love/forte/simbot/kook/util/BooleanToIntSerializer : kotlinx/serialization/KSerializer {
72627370
public static final field INSTANCE Llove/forte/simbot/kook/util/BooleanToIntSerializer;
72637371
public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Boolean;

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

Lines changed: 38 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -23,75 +23,84 @@ package love.forte.simbot.kook.api.template
2323
import kotlinx.serialization.DeserializationStrategy
2424
import kotlinx.serialization.SerialName
2525
import kotlinx.serialization.Serializable
26+
import love.forte.simbot.kook.api.ApiResultType
2627
import love.forte.simbot.kook.api.KookPostApi
2728
import love.forte.simbot.kook.objects.template.SimpleTemplate
2829
import love.forte.simbot.kook.objects.template.Template
2930
import kotlin.jvm.JvmOverloads
3031
import kotlin.jvm.JvmStatic
3132

3233
/**
33-
* [创建模板](https://developer.kookapp.cn/doc/reference)
34+
* [创建模板](https://developer.kookapp.cn/doc/http/template)
3435
*
3536
* POST /api/v3/template/create
3637
*
3738
* @author ForteScarlet
3839
* @since 4.3.0
3940
*/
41+
@ExperimentalTemplateApi
4042
public class CreateTemplateApi private constructor(
4143
private val title: String,
4244
private val content: String,
43-
private val description: String? = null,
44-
private val testData: String? = null,
45-
private val msgtype: Int? = null,
46-
private val type: Int? = null,
47-
private val testChannel: String? = null,
48-
) : KookPostApi<Template>() {
45+
private val msgtype: Int,
46+
private val type: Int = 0,
47+
private val testData: String = "",
48+
private val testChannel: String = "",
49+
) : KookPostApi<CreateTemplateResult<Template>>() {
4950
public companion object Factory {
5051
private val PATH = ApiPath.create("template", "create")
5152

52-
5353
/**
5454
* 构建 [CreateTemplateApi]
5555
*
56-
* @param title 模板名称
56+
* @param title 模板标题,最长64
5757
* @param content 模板内容
58-
* @param description 模板描述,可选
59-
* @param testData 测试数据,可选
60-
* @param msgtype 消息类型,可选
61-
* @param type 模板类型,可选
62-
* @param testChannel 测试频道,可选
58+
* @param msgtype 消息类型:1代表kmd消息,2代表通过json发卡片消息,3代表通过yaml发卡片消息
59+
* @param type 模板类型,目前固定为0,代表模板使用twig渲染
60+
* @param testData 测试数据,主要用于界面上的便利测试
61+
* @param testChannel 测试的频道,最长64,主要用于界面上的便利测试
6362
*/
6463
@JvmStatic
6564
@JvmOverloads
6665
public fun create(
6766
title: String,
6867
content: String,
69-
description: String? = null,
70-
testData: String? = null,
71-
msgtype: Int? = null,
72-
type: Int? = null,
73-
testChannel: String? = null
74-
): CreateTemplateApi = CreateTemplateApi(title, content, description, testData, msgtype, type, testChannel)
68+
msgtype: Int,
69+
type: Int = 0,
70+
testData: String = "",
71+
testChannel: String = ""
72+
): CreateTemplateApi = CreateTemplateApi(title, content, msgtype, type, testData, testChannel)
7573
}
7674

7775
override val apiPath: ApiPath
7876
get() = PATH
7977

80-
override val resultDeserializationStrategy: DeserializationStrategy<SimpleTemplate>
81-
get() = SimpleTemplate.serializer()
78+
override val resultDeserializationStrategy: DeserializationStrategy<CreateTemplateResult<Template>>
79+
get() = CreateTemplateResult.serializer(SimpleTemplate.serializer())
8280

83-
override fun createBody(): Any = Body(title, content, description, testData, msgtype, type, testChannel)
81+
override fun createBody(): Any = Body(title, content, msgtype, type, testData, testChannel)
8482

8583
@Serializable
8684
private data class Body(
8785
val title: String,
8886
val content: String,
89-
val description: String? = null,
87+
val msgtype: Int,
88+
val type: Int = 0,
9089
@SerialName("test_data")
91-
val testData: String? = null,
92-
val msgtype: Int? = null,
93-
val type: Int? = null,
90+
val testData: String = "",
9491
@SerialName("test_channel")
95-
val testChannel: String? = null,
92+
val testChannel: String = "",
9693
)
97-
}
94+
}
95+
96+
// 返回值结构:{"code":0,"message":"操作成功","data":{"model":{"id":"85604912","content":"Hello {name}!","type":0,"status":0,"test_data":"","test_channel":"","title":"Test Template","msgtype":1}}}
97+
// {"model":{"id":"85604912","content":"Hello {name}!","type":0,"status":0,"test_data":"","test_channel":"","title":"Test Template","msgtype":1}}}
98+
// 这他妈又是什么粽子
99+
// data 里面套了一层 model,真是醉了
100+
101+
@Serializable
102+
@ConsistentCopyVisibility
103+
@ExperimentalTemplateApi
104+
public data class CreateTemplateResult<out T : Template> @ApiResultType internal constructor(
105+
val model: T
106+
)

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

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -22,28 +22,29 @@ package love.forte.simbot.kook.api.template
2222

2323
import kotlinx.serialization.DeserializationStrategy
2424
import kotlinx.serialization.Serializable
25-
import love.forte.simbot.kook.api.ApiResultType
25+
import kotlinx.serialization.builtins.serializer
2626
import love.forte.simbot.kook.api.KookPostApi
2727
import kotlin.jvm.JvmStatic
2828

2929
/**
30-
* [删除模板](https://developer.kookapp.cn/doc/reference)
30+
* [删除模板](https://developer.kookapp.cn/doc/http/template)
3131
*
3232
* POST /api/v3/template/delete
3333
*
3434
* @author ForteScarlet
3535
* @since 4.3.0
3636
*/
37+
@ExperimentalTemplateApi
3738
public class DeleteTemplateApi private constructor(
3839
private val id: String,
39-
) : KookPostApi<DeleteTemplateResult>() {
40+
) : KookPostApi<Unit>() {
4041
public companion object Factory {
4142
private val PATH = ApiPath.create("template", "delete")
4243

4344
/**
4445
* 构建 [DeleteTemplateApi]
4546
*
46-
* @param id 要删除的模板ID
47+
* @param id 要删除的模板ID,最长16
4748
*/
4849
@JvmStatic
4950
public fun create(id: String): DeleteTemplateApi = DeleteTemplateApi(id)
@@ -52,30 +53,13 @@ public class DeleteTemplateApi private constructor(
5253
override val apiPath: ApiPath
5354
get() = PATH
5455

55-
override val resultDeserializationStrategy: DeserializationStrategy<DeleteTemplateResult>
56-
get() = DeleteTemplateResult.serializer()
56+
override val resultDeserializationStrategy: DeserializationStrategy<Unit>
57+
get() = Unit.serializer()
5758

5859
override fun createBody(): Any = Body(id)
5960

6061
@Serializable
6162
private data class Body(
6263
val id: String,
6364
)
64-
}
65-
66-
/**
67-
* 删除模板 API 响应结果
68-
*
69-
* @since 4.3.0
70-
*/
71-
@Serializable
72-
public data class DeleteTemplateResult @ApiResultType constructor(
73-
/**
74-
* 删除是否成功
75-
*/
76-
val success: Boolean = true,
77-
/**
78-
* 可选的响应消息
79-
*/
80-
val message: String? = null
81-
)
65+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
* Copyright (c) 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.template
22+
23+
@RequiresOptIn(
24+
message = "模板消息相关API是实验性的。" +
25+
"它们尚未公开于官方文档,无法保证稳定性,并且可能会在未来被修改、删除。"
26+
)
27+
@Retention(AnnotationRetention.BINARY)
28+
public annotation class ExperimentalTemplateApi

0 commit comments

Comments
 (0)