fix: include voice states in servercreate event
feat: call started system message in dms
This commit is contained in:
@@ -43,7 +43,6 @@ revolt-config = { path = "../core/config" }
|
||||
revolt-database = { path = "../core/database" }
|
||||
revolt-permissions = { version = "0.8.1", path = "../core/permissions" }
|
||||
revolt-presence = { path = "../core/presence", features = ["redis-is-patched"] }
|
||||
revolt-voice = { path = "../core/voice" }
|
||||
|
||||
# redis
|
||||
fred = { version = "8.0.1", features = ["subscriber-client"] }
|
||||
|
||||
@@ -93,6 +93,7 @@ impl ProtocolConfiguration {
|
||||
ReadyPayloadFields::Channels,
|
||||
ReadyPayloadFields::Members,
|
||||
ReadyPayloadFields::Emoji,
|
||||
ReadyPayloadFields::VoiceStates,
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ use std::{env, sync::Arc};
|
||||
use async_std::net::TcpListener;
|
||||
use revolt_presence::clear_region;
|
||||
use once_cell::sync::OnceCell;
|
||||
use revolt_voice::VoiceClient;
|
||||
use revolt_database::voice::VoiceClient;
|
||||
|
||||
#[macro_use]
|
||||
extern crate log;
|
||||
|
||||
Reference in New Issue
Block a user