guilds, lifecycle gateway disconnector, base channels

This commit is contained in:
Cilly Leang 2026-03-21 18:53:24 +11:00
parent fcdd237809
commit 0781606a00
Signed by: cilly
GPG key ID: 6500251E087653C9
14 changed files with 292 additions and 6 deletions

View file

@ -20,7 +20,7 @@ kotlin {
sourceSets {
commonMain.dependencies {
implementation(project(":api:shared"))
api(project(":api:shared"))
implementation(libs.kermit)
implementation(libs.ktor.client.core)

View file

@ -3,6 +3,8 @@ package moe.lava.neon.api.gateway
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.JsonElement
import moe.lava.neon.api.ApiConstants
import moe.lava.neon.api.gateway.content.GuildSerializer
import moe.lava.neon.api.objects.Guild
import moe.lava.neon.api.objects.User
sealed interface Payload {
@ -58,7 +60,8 @@ sealed interface Event {
NO_AFFINE_USER_IDS,
DEDUPE_USER_OBJECTS,
USER_SETTINGS_PROTO,
DEBOUNCE_MESSAGE_REACTIONS
DEBOUNCE_MESSAGE_REACTIONS,
CLIENT_STATE_V2,
) },
// TODO: Client state v2
// val clientState: ClientState,
@ -107,7 +110,7 @@ sealed interface Event {
data class Ready(
val v: Int,
val user: User,
// val guilds: List<UnavailableGuild>,
val guilds: List<@Serializable(GuildSerializer::class) Guild>,
val sessionId: String,
val resumeGatewayUrl: String,
// val application: Application,

View file

@ -0,0 +1,19 @@
package moe.lava.neon.api.gateway.content
import kotlinx.serialization.DeserializationStrategy
import kotlinx.serialization.json.JsonContentPolymorphicSerializer
import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.booleanOrNull
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
import moe.lava.neon.api.objects.Guild
object GuildSerializer : JsonContentPolymorphicSerializer<Guild>(Guild::class) {
override fun selectDeserializer(element: JsonElement): DeserializationStrategy<Guild> {
return if (element.jsonObject["unavailable"]?.jsonPrimitive?.booleanOrNull == true) {
Guild.Unavailable.serializer()
} else {
Guild.Gateway.serializer()
}
}
}