feat: early definition of ready event with voice state

Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
Infi 2025-04-27 20:23:53 +02:00
parent 12b08edaf0
commit fd8d22b170
4 changed files with 36 additions and 7 deletions

View File

@ -41,9 +41,10 @@ enum class PermissionBit(val value: Long) {
MuteMembers(1L shl 33),
DeafenMembers(1L shl 34),
MoveMembers(1L shl 35),
Listen(1L shl 36),
// * Misc. permissions
// % Bits 36 to 52: free area
// % Bits 37 to 52: free area
// % Bits 53 to 64: do not use
// * Grant all permissions
@ -85,7 +86,8 @@ object BitDefaults {
PermissionBit.SendEmbeds +
PermissionBit.UploadFiles +
PermissionBit.Connect +
PermissionBit.Speak
PermissionBit.Speak +
PermissionBit.Listen
val SavedMessages =
PermissionBit.GrantAllSafe.value

View File

@ -50,6 +50,7 @@ import io.ktor.websocket.readText
import io.ktor.websocket.send
import kotlinx.coroutines.channels.consumeEach
import kotlinx.serialization.SerializationException
import logcat.logcat
enum class DisconnectionState {
Disconnected,
@ -146,10 +147,14 @@ object RealtimeSocket {
"Ready" -> {
val readyFrame = RevoltJson.decodeFromString(ReadyFrame.serializer(), rawFrame)
Log.d(
"RealtimeSocket",
"Received ready frame with ${readyFrame.users.size} users, ${readyFrame.servers.size} servers, ${readyFrame.channels.size} channels, and ${readyFrame.emojis.size} emojis."
)
logcat {
"Received ready frame with ${readyFrame.users.size} users, " +
"${readyFrame.servers.size} servers, " +
"${readyFrame.channels.size} channels, " +
"${readyFrame.emojis.size} emojis, " +
"and ${readyFrame.voiceStates.size} voice states."
}
Log.d("RealtimeSocket", "Adding users to cache.")
val userMap = readyFrame.users.associateBy { it.id!! }

View File

@ -1,6 +1,7 @@
package chat.revolt.api.realtime.frames.receivable
import chat.revolt.api.schemas.Channel
import chat.revolt.api.schemas.ChannelVoiceState
import chat.revolt.api.schemas.Embed
import chat.revolt.api.schemas.Emoji
import chat.revolt.api.schemas.Member
@ -42,7 +43,8 @@ data class ReadyFrame(
val users: List<User>,
val servers: List<Server>,
val channels: List<Channel>,
val emojis: List<Emoji>
val emojis: List<Emoji>,
@SerialName("voice_states") val voiceStates: List<ChannelVoiceState>,
)
typealias MessageFrame = Message

View File

@ -0,0 +1,20 @@
package chat.revolt.api.schemas
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class ChannelVoiceState(
val id: String,
val participants: List<UserVoiceState>,
val node: String,
)
@Serializable
data class UserVoiceState(
val id: String,
@SerialName("is_receiving") val isReceiving: Boolean,
@SerialName("is_publishing") val isPublishing: Boolean,
val screensharing: Boolean,
val camera: Boolean,
)