fix: include voice states in servercreate event

feat: call started system message in dms
This commit is contained in:
Zomatree
2025-01-27 20:46:29 +00:00
parent 9de87a01ab
commit c55b5bf75f
25 changed files with 239 additions and 222 deletions

View File

@@ -3,13 +3,13 @@ use std::collections::HashSet;
use revolt_database::{
events::client::{EventV1, ReadyPayloadFields},
util::permissions::DatabasePermissionQuery,
voice::{delete_voice_state, get_voice_channel_members, get_voice_state, get_channel_voice_state},
Channel, Database, Member, MemberCompositeKey, Presence, RelationshipStatus,
};
use revolt_models::v0;
use revolt_permissions::{calculate_channel_permissions, ChannelPermission};
use revolt_presence::filter_online;
use revolt_result::Result;
use revolt_voice::{delete_voice_state, get_voice_channel_members, get_voice_state};
use super::state::{Cache, State};
@@ -236,7 +236,7 @@ impl State {
let mut voice_states = Vec::new();
for channel in &channels {
if let Ok(Some(voice_state)) = self.fetch_voice_state(channel).await {
if let Ok(Some(voice_state)) = get_channel_voice_state(channel).await {
voice_states.push(voice_state)
}
}
@@ -464,6 +464,7 @@ impl State {
server,
channels,
emojis: _,
voice_states: _,
} => {
self.insert_subscription(id.clone()).await;
@@ -637,32 +638,4 @@ impl State {
true
}
async fn fetch_voice_state(
&self,
channel: &Channel,
) -> Result<Option<v0::ChannelVoiceState>> {
let members = get_voice_channel_members(&channel.id()).await?;
if !members.is_empty() {
let mut participants = Vec::with_capacity(members.len());
for user_id in members {
if let Some(voice_state) = get_voice_state(&channel.id(), channel.server().as_deref(), &user_id).await? {
participants.push(voice_state);
} else {
log::info!("Voice state not found but member in voice channel members, removing.");
delete_voice_state(&channel.id(), channel.server().as_deref(), &user_id).await?;
}
}
Ok(Some(v0::ChannelVoiceState {
id: channel.id().to_string(),
participants,
}))
} else {
Ok(None)
}
}
}