guilds, lifecycle gateway disconnector, base channels
This commit is contained in:
parent
fcdd237809
commit
0781606a00
14 changed files with 292 additions and 6 deletions
|
|
@ -20,7 +20,7 @@ kotlin {
|
|||
|
||||
sourceSets {
|
||||
commonMain.dependencies {
|
||||
implementation(project(":api:shared"))
|
||||
api(project(":api:shared"))
|
||||
|
||||
implementation(libs.kermit)
|
||||
implementation(libs.ktor.client.core)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue