Skip to content

Commit 561e0af

Browse files
authored
Merge pull request #295 from simple-robot/dev/blacklist-apis
Support blacklist management APIs
2 parents b356493 + 1ebb1a8 commit 561e0af

File tree

8 files changed

+1103
-2
lines changed

8 files changed

+1103
-2
lines changed

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

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,87 @@ public final class love/forte/simbot/kook/api/asset/CreateAssetApi$Factory {
464464
public static synthetic fun create$default (Llove/forte/simbot/kook/api/asset/CreateAssetApi$Factory;[BLjava/lang/String;ILjava/lang/Object;)Llove/forte/simbot/kook/api/asset/CreateAssetApi;
465465
}
466466

467+
public final class love/forte/simbot/kook/api/blacklist/BlacklistItem {
468+
public static final field Companion Llove/forte/simbot/kook/api/blacklist/BlacklistItem$Companion;
469+
public fun <init> (Ljava/lang/String;JLjava/lang/String;Llove/forte/simbot/kook/objects/SimpleUser;)V
470+
public final fun component1 ()Ljava/lang/String;
471+
public final fun component2 ()J
472+
public final fun component3 ()Ljava/lang/String;
473+
public final fun component4 ()Llove/forte/simbot/kook/objects/SimpleUser;
474+
public final fun copy (Ljava/lang/String;JLjava/lang/String;Llove/forte/simbot/kook/objects/SimpleUser;)Llove/forte/simbot/kook/api/blacklist/BlacklistItem;
475+
public static synthetic fun copy$default (Llove/forte/simbot/kook/api/blacklist/BlacklistItem;Ljava/lang/String;JLjava/lang/String;Llove/forte/simbot/kook/objects/SimpleUser;ILjava/lang/Object;)Llove/forte/simbot/kook/api/blacklist/BlacklistItem;
476+
public fun equals (Ljava/lang/Object;)Z
477+
public final fun getCreatedTime ()J
478+
public final fun getRemark ()Ljava/lang/String;
479+
public final fun getUser ()Llove/forte/simbot/kook/objects/SimpleUser;
480+
public final fun getUserId ()Ljava/lang/String;
481+
public fun hashCode ()I
482+
public fun toString ()Ljava/lang/String;
483+
}
484+
485+
public synthetic class love/forte/simbot/kook/api/blacklist/BlacklistItem$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
486+
public static final field INSTANCE Llove/forte/simbot/kook/api/blacklist/BlacklistItem$$serializer;
487+
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
488+
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
489+
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Llove/forte/simbot/kook/api/blacklist/BlacklistItem;
490+
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
491+
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
492+
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Llove/forte/simbot/kook/api/blacklist/BlacklistItem;)V
493+
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
494+
}
495+
496+
public final class love/forte/simbot/kook/api/blacklist/BlacklistItem$Companion {
497+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
498+
}
499+
500+
public final class love/forte/simbot/kook/api/blacklist/CreateBlacklistApi : love/forte/simbot/kook/api/KookPostApi {
501+
public static final field Factory Llove/forte/simbot/kook/api/blacklist/CreateBlacklistApi$Factory;
502+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
503+
public static final fun create (Ljava/lang/String;Ljava/lang/String;)Llove/forte/simbot/kook/api/blacklist/CreateBlacklistApi;
504+
public static final fun create (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Llove/forte/simbot/kook/api/blacklist/CreateBlacklistApi;
505+
public static final fun create (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;)Llove/forte/simbot/kook/api/blacklist/CreateBlacklistApi;
506+
public fun getResultDeserializationStrategy ()Lkotlinx/serialization/DeserializationStrategy;
507+
}
508+
509+
public final class love/forte/simbot/kook/api/blacklist/CreateBlacklistApi$Factory {
510+
public final fun create (Ljava/lang/String;Ljava/lang/String;)Llove/forte/simbot/kook/api/blacklist/CreateBlacklistApi;
511+
public final fun create (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Llove/forte/simbot/kook/api/blacklist/CreateBlacklistApi;
512+
public final fun create (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;)Llove/forte/simbot/kook/api/blacklist/CreateBlacklistApi;
513+
public static synthetic fun create$default (Llove/forte/simbot/kook/api/blacklist/CreateBlacklistApi$Factory;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;ILjava/lang/Object;)Llove/forte/simbot/kook/api/blacklist/CreateBlacklistApi;
514+
}
515+
516+
public final class love/forte/simbot/kook/api/blacklist/DeleteBlacklistApi : love/forte/simbot/kook/api/KookPostApi {
517+
public static final field Factory Llove/forte/simbot/kook/api/blacklist/DeleteBlacklistApi$Factory;
518+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
519+
public static final fun create (Ljava/lang/String;Ljava/lang/String;)Llove/forte/simbot/kook/api/blacklist/DeleteBlacklistApi;
520+
public fun getResultDeserializationStrategy ()Lkotlinx/serialization/DeserializationStrategy;
521+
}
522+
523+
public final class love/forte/simbot/kook/api/blacklist/DeleteBlacklistApi$Factory {
524+
public final fun create (Ljava/lang/String;Ljava/lang/String;)Llove/forte/simbot/kook/api/blacklist/DeleteBlacklistApi;
525+
}
526+
527+
public final class love/forte/simbot/kook/api/blacklist/GetBlacklistListApi : love/forte/simbot/kook/api/KookGetApi {
528+
public static final field Factory Llove/forte/simbot/kook/api/blacklist/GetBlacklistListApi$Factory;
529+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
530+
public static final fun create (Ljava/lang/String;)Llove/forte/simbot/kook/api/blacklist/GetBlacklistListApi;
531+
public static final fun create (Ljava/lang/String;Ljava/lang/Integer;)Llove/forte/simbot/kook/api/blacklist/GetBlacklistListApi;
532+
public static final fun create (Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)Llove/forte/simbot/kook/api/blacklist/GetBlacklistListApi;
533+
public fun getResultDeserializationStrategy ()Lkotlinx/serialization/DeserializationStrategy;
534+
}
535+
536+
public final class love/forte/simbot/kook/api/blacklist/GetBlacklistListApi$Factory {
537+
public final fun create (Ljava/lang/String;)Llove/forte/simbot/kook/api/blacklist/GetBlacklistListApi;
538+
public final fun create (Ljava/lang/String;Ljava/lang/Integer;)Llove/forte/simbot/kook/api/blacklist/GetBlacklistListApi;
539+
public final fun create (Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)Llove/forte/simbot/kook/api/blacklist/GetBlacklistListApi;
540+
public static synthetic fun create$default (Llove/forte/simbot/kook/api/blacklist/GetBlacklistListApi$Factory;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;ILjava/lang/Object;)Llove/forte/simbot/kook/api/blacklist/GetBlacklistListApi;
541+
}
542+
543+
public final class love/forte/simbot/kook/api/blacklist/GetBlacklistListApiKt {
544+
public static final fun createFlow (Llove/forte/simbot/kook/api/blacklist/GetBlacklistListApi$Factory;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow;
545+
public static final fun createItemFlow (Llove/forte/simbot/kook/api/blacklist/GetBlacklistListApi$Factory;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow;
546+
}
547+
467548
public final class love/forte/simbot/kook/api/channel/ChannelInfo {
468549
public static final field Companion Llove/forte/simbot/kook/api/channel/ChannelInfo$Companion;
469550
public fun <init> (Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;III)V
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
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.blacklist
22+
23+
import kotlinx.serialization.DeserializationStrategy
24+
import kotlinx.serialization.SerialName
25+
import kotlinx.serialization.Serializable
26+
import kotlinx.serialization.builtins.serializer
27+
import love.forte.simbot.kook.api.KookPostApi
28+
import kotlin.jvm.JvmOverloads
29+
import kotlin.jvm.JvmStatic
30+
31+
/**
32+
* [加入黑名单](https://developer.kookapp.cn/doc/http/blacklist#%E5%8A%A0%E5%85%A5%E9%BB%91%E5%90%8D%E5%8D%95)
33+
*
34+
* @since 4.3.0
35+
*
36+
* @author ForteScarlet
37+
*/
38+
public class CreateBlacklistApi private constructor(
39+
private val guildId: String,
40+
private val targetId: String,
41+
private val remark: String? = null,
42+
private val delMsgDays: Int? = null,
43+
) : KookPostApi<Unit>() {
44+
public companion object Factory {
45+
private val PATH = ApiPath.create("blacklist", "create")
46+
47+
/**
48+
* 构建 [CreateBlacklistApi]
49+
*
50+
* @param guildId 服务器id
51+
* @param targetId 目标用户id
52+
* @param remark 加入黑名单的原因
53+
* @param delMsgDays 删除最近几天的消息,最大 7 天, 默认 0
54+
*/
55+
@JvmStatic
56+
@JvmOverloads
57+
public fun create(
58+
guildId: String,
59+
targetId: String,
60+
remark: String? = null,
61+
delMsgDays: Int? = null
62+
): CreateBlacklistApi =
63+
CreateBlacklistApi(guildId, targetId, remark, delMsgDays)
64+
}
65+
66+
override val apiPath: ApiPath
67+
get() = PATH
68+
69+
override val resultDeserializationStrategy: DeserializationStrategy<Unit>
70+
get() = Unit.serializer()
71+
72+
override fun createBody(): Any = Body(guildId, targetId, remark, delMsgDays)
73+
74+
@Serializable
75+
private data class Body(
76+
@SerialName("guild_id")
77+
val guildId: String,
78+
@SerialName("target_id")
79+
val targetId: String,
80+
val remark: String? = null,
81+
@SerialName("del_msg_days")
82+
val delMsgDays: Int? = null,
83+
)
84+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
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.blacklist
22+
23+
import kotlinx.serialization.DeserializationStrategy
24+
import kotlinx.serialization.SerialName
25+
import kotlinx.serialization.Serializable
26+
import kotlinx.serialization.builtins.serializer
27+
import love.forte.simbot.kook.api.KookPostApi
28+
import kotlin.jvm.JvmStatic
29+
30+
/**
31+
* [移除黑名单](https://developer.kookapp.cn/doc/http/blacklist#%E7%A7%BB%E9%99%A4%E9%BB%91%E5%90%8D%E5%8D%95)
32+
*
33+
* @since 4.3.0
34+
*
35+
* @author ForteScarlet
36+
*/
37+
public class DeleteBlacklistApi private constructor(
38+
private val guildId: String,
39+
private val targetId: String,
40+
) : KookPostApi<Unit>() {
41+
public companion object Factory {
42+
private val PATH = ApiPath.create("blacklist", "delete")
43+
44+
/**
45+
* 构建 [DeleteBlacklistApi]
46+
*
47+
* @param guildId 服务器id
48+
* @param targetId 目标用户id
49+
*/
50+
@JvmStatic
51+
public fun create(guildId: String, targetId: String): DeleteBlacklistApi =
52+
DeleteBlacklistApi(guildId, targetId)
53+
}
54+
55+
override val apiPath: ApiPath
56+
get() = PATH
57+
58+
override val resultDeserializationStrategy: DeserializationStrategy<Unit>
59+
get() = Unit.serializer()
60+
61+
override fun createBody(): Any = Body(guildId, targetId)
62+
63+
@Serializable
64+
private data class Body(
65+
@SerialName("guild_id")
66+
val guildId: String,
67+
@SerialName("target_id")
68+
val targetId: String,
69+
)
70+
}
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
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.blacklist
22+
23+
import io.ktor.http.*
24+
import kotlinx.coroutines.flow.Flow
25+
import kotlinx.coroutines.flow.flow
26+
import kotlinx.serialization.DeserializationStrategy
27+
import kotlinx.serialization.SerialName
28+
import kotlinx.serialization.Serializable
29+
import love.forte.simbot.kook.api.ApiResultType
30+
import love.forte.simbot.kook.api.KookGetApi
31+
import love.forte.simbot.kook.api.ListData
32+
import love.forte.simbot.kook.api.ListMeta
33+
import love.forte.simbot.kook.objects.SimpleUser
34+
import love.forte.simbot.kook.util.appendIfNotNull
35+
import love.forte.simbot.kook.util.parameters
36+
import kotlin.jvm.JvmOverloads
37+
import kotlin.jvm.JvmStatic
38+
39+
/**
40+
* [获取黑名单列表](https://developer.kookapp.cn/doc/http/blacklist#%E8%8E%B7%E5%8F%96%E9%BB%91%E5%90%8D%E5%8D%95%E5%88%97%E8%A1%A8)
41+
*
42+
* @since 4.3.0
43+
*
44+
* @author ForteScarlet
45+
*/
46+
public class GetBlacklistListApi private constructor(
47+
private val guildId: String,
48+
/**
49+
* 目标页数
50+
*/
51+
private val page: Int? = null,
52+
/**
53+
* 每页数据数量
54+
*/
55+
private val pageSize: Int? = null,
56+
) : KookGetApi<ListData<BlacklistItem>>() {
57+
public companion object Factory {
58+
private val PATH = ApiPath.create("blacklist", "list")
59+
60+
private val serializer = ListData.serializer(BlacklistItem.serializer())
61+
62+
/**
63+
* 构造 [获取黑名单列表][GetBlacklistListApi] 请求。
64+
*
65+
* @param guildId 服务器id
66+
* @param page 目标页数
67+
* @param pageSize 每页数据数量
68+
*/
69+
@JvmStatic
70+
@JvmOverloads
71+
public fun create(
72+
guildId: String,
73+
page: Int? = null,
74+
pageSize: Int? = null
75+
): GetBlacklistListApi = GetBlacklistListApi(guildId, page, pageSize)
76+
}
77+
78+
override val apiPath: ApiPath
79+
get() = PATH
80+
81+
override val resultDeserializationStrategy: DeserializationStrategy<ListData<BlacklistItem>>
82+
get() = serializer
83+
84+
override fun urlBuild(builder: URLBuilder) {
85+
builder.parameters {
86+
append("guild_id", guildId)
87+
appendIfNotNull("page", page) { it.toString() }
88+
appendIfNotNull("page_size", pageSize) { it.toString() }
89+
}
90+
}
91+
}
92+
93+
/**
94+
* [GetBlacklistListApi] 的响应结果中的黑名单项。
95+
*/
96+
@Serializable
97+
public data class BlacklistItem @ApiResultType constructor(
98+
/**
99+
* 用户id
100+
*/
101+
@SerialName("user_id")
102+
val userId: String,
103+
/**
104+
* 加入黑名单的时间戳(毫秒)
105+
*/
106+
@SerialName("created_time")
107+
val createdTime: Long,
108+
/**
109+
* 加入黑名单的原因
110+
*/
111+
val remark: String,
112+
/**
113+
* 用户信息
114+
*/
115+
val user: SimpleUser,
116+
)
117+
118+
/**
119+
* 批次量的通过 [GetBlacklistListApi] 查询所有结果直至最后一次响应的 [ListMeta.page] >= [ListMeta.pageTotal]。
120+
*
121+
* @param block 通过一个页码参数来通过 [GetBlacklistListApi] 发起一次请求
122+
*/
123+
public inline fun GetBlacklistListApi.Factory.createFlow(
124+
crossinline block: suspend GetBlacklistListApi.Factory.(page: Int) -> ListData<BlacklistItem>
125+
): Flow<ListData<BlacklistItem>> = flow {
126+
var page = 1
127+
do {
128+
val listData = block(page)
129+
emit(listData)
130+
page = listData.meta.page + 1
131+
} while (listData.items.isNotEmpty() && listData.meta.page < listData.meta.pageTotal)
132+
}
133+
134+
/**
135+
* 批次量的通过 [GetBlacklistListApi] 查询所有结果直至最后一次响应的 [ListMeta.page] >= [ListMeta.pageTotal]。
136+
*
137+
* @param block 通过一个页码参数来通过 [GetBlacklistListApi] 发起一次请求
138+
*/
139+
public inline fun GetBlacklistListApi.Factory.createItemFlow(
140+
crossinline block: suspend GetBlacklistListApi.Factory.(page: Int) -> ListData<BlacklistItem>
141+
): Flow<BlacklistItem> = flow {
142+
var page = 1
143+
do {
144+
val listData = block(page)
145+
listData.items.forEach { emit(it) }
146+
page = listData.meta.page + 1
147+
} while (listData.items.isNotEmpty() && listData.meta.page < listData.meta.pageTotal)
148+
}

0 commit comments

Comments
 (0)