feat: 完成对各个类型响应Event的抽象定义

This commit is contained in:
叁玖领域 2025-08-15 09:51:19 +08:00
parent 39642a2f34
commit 9b1c9b1ace
9 changed files with 414 additions and 0 deletions

View File

@ -0,0 +1 @@
# 基于NapCat Websocket Server 框架开发

View File

@ -3,6 +3,13 @@ package top.r3944realms.ltdmanager.napcat.events
import kotlinx.serialization.*
import kotlinx.serialization.json.Json
import top.r3944realms.ltdmanager.napcat.events.account.AbstractAccountEvent
import top.r3944realms.ltdmanager.napcat.events.file.AbstractFileEvent
import top.r3944realms.ltdmanager.napcat.events.group.AbstractGroupEvent
import top.r3944realms.ltdmanager.napcat.events.message.AbstractMessageEvent
import top.r3944realms.ltdmanager.napcat.events.other.AbstractOtherEvent
import top.r3944realms.ltdmanager.napcat.events.passkey.AbstractPassKeyEvent
import top.r3944realms.ltdmanager.napcat.events.personal.AbstractPersonalEvent
import top.r3944realms.ltdmanager.napcat.events.system.AbstractSystemEvent
/**
@ -23,6 +30,13 @@ abstract class NapCatEvent(
private val eventTypeMap by lazy {
mutableMapOf<String, KSerializer<out NapCatEvent>>().apply {
putAll(AbstractAccountEvent.eventTypeMap)
putAll(AbstractFileEvent.eventTypeMap)
putAll(AbstractOtherEvent.eventTypeMap)
putAll(AbstractPersonalEvent.eventTypeMap)
putAll(AbstractPassKeyEvent.eventTypeMap)
putAll(AbstractGroupEvent.eventTypeMap)
putAll(AbstractSystemEvent.eventTypeMap)
putAll(AbstractMessageEvent.eventTypeMap)
}
}
@ -32,6 +46,20 @@ abstract class NapCatEvent(
// 如果是Account相关事件使用AccountEvent的json配置
if (type.startsWith("account/")) {
AbstractAccountEvent.json.decodeFromString(serializer, jsonString)
} else if (type.startsWith("file/")) {
AbstractFileEvent.json.decodeFromString(serializer, jsonString)
} else if (type.startsWith("group/")) {
AbstractGroupEvent.json.decodeFromString(serializer, jsonString)
} else if (type.startsWith("message/")) {
AbstractMessageEvent.json.decodeFromString(serializer, jsonString)
} else if (type.startsWith("passkey/")) {
AbstractPassKeyEvent.json.decodeFromString(serializer, jsonString)
} else if (type.startsWith("personal/")) {
AbstractPersonalEvent.json.decodeFromString(serializer, jsonString)
} else if (type.startsWith("system/")) {
AbstractSystemEvent.json.decodeFromString(serializer, jsonString)
} else if (type.startsWith("other/")) {
AbstractOtherEvent.json.decodeFromString(serializer, jsonString)
} else {
// 其他类型的事件可以使用默认的Json配置
val json = Json {

View File

@ -0,0 +1,59 @@
package top.r3944realms.ltdmanager.napcat.events.file
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.polymorphic
import top.r3944realms.ltdmanager.napcat.events.NapCatEvent
/**
* QQ 文件相关响应抽象
* @property status 状态字符串
* @property retcode 返回代码
* @property message 消息
* @property wording 文字描述
* @property echo 回显字段 (可空)
*/
@Serializable
abstract class AbstractFileEvent(
/**
* 状态字符串
*/
open val status: Status,
/**
* 返回代码
*/
open val retcode: Double,
/**
* 消息
*/
open val message: String,
/**
* 文字描述
*/
open val wording: String,
/**
* 回显字段
*/
open val echo: String? = null
) : NapCatEvent() {
override fun type(): String = "file/" + subtype()
companion object {
val eventTypeMap by lazy {
mutableMapOf<String, KSerializer<out NapCatEvent>>().apply {
}
}
internal val json: Json by lazy {
Json {
ignoreUnknownKeys = true
serializersModule = SerializersModule {
polymorphic(NapCatEvent::class) {
}
}
}
}
}
}

View File

@ -0,0 +1,60 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.polymorphic
import top.r3944realms.ltdmanager.napcat.events.NapCatEvent
/**
* QQ 群聊相关响应抽象
* @property status 状态字符串
* @property retcode 返回代码
* @property message 消息
* @property wording 文字描述
* @property echo 回显字段 (可空)
*/
@Serializable
abstract class AbstractGroupEvent (
/**
* 状态字符串
*/
open val status: Status,
/**
* 返回代码
*/
open val retcode: Double,
/**
* 消息
*/
open val message: String,
/**
* 文字描述
*/
open val wording: String,
/**
* 回显字段
*/
open val echo: String? = null
) : NapCatEvent() {
override fun type(): String = "group/" + subtype()
companion object {
val eventTypeMap by lazy {
mutableMapOf<String, KSerializer<out NapCatEvent>>().apply {
}
}
internal val json: Json by lazy {
Json {
ignoreUnknownKeys = true
serializersModule = SerializersModule {
polymorphic(NapCatEvent::class) {
}
}
}
}
}
}

View File

@ -0,0 +1,60 @@
package top.r3944realms.ltdmanager.napcat.events.message
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.polymorphic
import top.r3944realms.ltdmanager.napcat.events.NapCatEvent
/**
* QQ 消息相关响应抽象
* @property status 状态字符串
* @property retcode 返回代码
* @property message 消息
* @property wording 文字描述
* @property echo 回显字段 (可空)
*/
@Serializable
abstract class AbstractMessageEvent (
/**
* 状态字符串
*/
open val status: Status,
/**
* 返回代码
*/
open val retcode: Double,
/**
* 消息
*/
open val message: String,
/**
* 文字描述
*/
open val wording: String,
/**
* 回显字段
*/
open val echo: String? = null
) : NapCatEvent() {
override fun type(): String = "message/" + subtype()
companion object {
val eventTypeMap by lazy {
mutableMapOf<String, KSerializer<out NapCatEvent>>().apply {
}
}
internal val json: Json by lazy {
Json {
ignoreUnknownKeys = true
serializersModule = SerializersModule {
polymorphic(NapCatEvent::class) {
}
}
}
}
}
}

View File

@ -0,0 +1,59 @@
package top.r3944realms.ltdmanager.napcat.events.other
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.polymorphic
import top.r3944realms.ltdmanager.napcat.events.NapCatEvent
/**
* QQ 其它相关响应抽象
* @property status 状态字符串
* @property retcode 返回代码
* @property message 消息
* @property wording 文字描述
* @property echo 回显字段 (可空)
*/
@Serializable
abstract class AbstractOtherEvent (
/**
* 状态字符串
*/
open val status: Status,
/**
* 返回代码
*/
open val retcode: Double,
/**
* 消息
*/
open val message: String,
/**
* 文字描述
*/
open val wording: String,
/**
* 回显字段
*/
open val echo: String? = null
) : NapCatEvent() {
override fun type(): String = "other/" + subtype()
companion object {
val eventTypeMap by lazy {
mutableMapOf<String, KSerializer<out NapCatEvent>>().apply {
}
}
internal val json: Json by lazy {
Json {
ignoreUnknownKeys = true
serializersModule = SerializersModule {
polymorphic(NapCatEvent::class) {
}
}
}
}
}
}

View File

@ -0,0 +1,58 @@
package top.r3944realms.ltdmanager.napcat.events.passkey
import kotlinx.serialization.KSerializer
import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.polymorphic
import top.r3944realms.ltdmanager.napcat.events.NapCatEvent
/**
* QQ 密钥相关响应抽象
* @property status 状态字符串
* @property retcode 返回代码
* @property message 消息
* @property wording 文字描述
* @property echo 回显字段 (可空)
*/
abstract class AbstractPassKeyEvent (
/**
* 状态字符串
*/
open val status: Status,
/**
* 返回代码
*/
open val retcode: Double,
/**
* 消息
*/
open val message: String,
/**
* 文字描述
*/
open val wording: String,
/**
* 回显字段
*/
open val echo: String? = null
) : NapCatEvent() {
override fun type(): String = "passkey/" + subtype()
companion object {
val eventTypeMap by lazy {
mutableMapOf<String, KSerializer<out NapCatEvent>>().apply {
}
}
internal val json: Json by lazy {
Json {
ignoreUnknownKeys = true
serializersModule = SerializersModule {
polymorphic(NapCatEvent::class) {
}
}
}
}
}
}

View File

@ -0,0 +1,60 @@
package top.r3944realms.ltdmanager.napcat.events.personal
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.polymorphic
import top.r3944realms.ltdmanager.napcat.events.NapCatEvent
/**
* QQ 个人相关响应抽象
* @property status 状态字符串
* @property retcode 返回代码
* @property message 消息
* @property wording 文字描述
* @property echo 回显字段 (可空)
*/
@Serializable
abstract class AbstractPersonalEvent (
/**
* 状态字符串
*/
open val status: Status,
/**
* 返回代码
*/
open val retcode: Double,
/**
* 消息
*/
open val message: String,
/**
* 文字描述
*/
open val wording: String,
/**
* 回显字段
*/
open val echo: String? = null
) : NapCatEvent() {
override fun type(): String = "personal/" + subtype()
companion object {
val eventTypeMap by lazy {
mutableMapOf<String, KSerializer<out NapCatEvent>>().apply {
}
}
internal val json: Json by lazy {
Json {
ignoreUnknownKeys = true
serializersModule = SerializersModule {
polymorphic(NapCatEvent::class) {
}
}
}
}
}
}

View File

@ -0,0 +1,29 @@
package top.r3944realms.ltdmanager.napcat.events.system
import kotlinx.serialization.KSerializer
import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.polymorphic
import top.r3944realms.ltdmanager.napcat.events.NapCatEvent
abstract class AbstractSystemEvent
: NapCatEvent() {
override fun type(): String = "system/" + subtype()
companion object {
val eventTypeMap by lazy {
mutableMapOf<String, KSerializer<out NapCatEvent>>().apply {
}
}
internal val json: Json by lazy {
Json {
ignoreUnknownKeys = true
serializersModule = SerializersModule {
polymorphic(NapCatEvent::class) {
}
}
}
}
}
}