diff --git a/crates/core/database/src/voice/voice_client.rs b/crates/core/database/src/voice/voice_client.rs index 52733c8b..0b2ecdbe 100644 --- a/crates/core/database/src/voice/voice_client.rs +++ b/crates/core/database/src/voice/voice_client.rs @@ -42,6 +42,10 @@ impl VoiceClient { } } + pub fn is_enabled(&self) -> bool { + !self.rooms.is_empty() + } + pub async fn from_revolt_config() -> Self { let config = config().await; @@ -89,8 +93,7 @@ impl VoiceClient { Channel::TextChannel { voice: Some(voice), .. } => Some(Cow::Borrowed(voice)), _ => None } - - .ok_or_else(|| create_error!(NotAVoiceChannel))?; + .ok_or_else(|| create_error!(NotAVoiceChannel))?; room.client .create_room( diff --git a/crates/core/models/src/v0/channels.rs b/crates/core/models/src/v0/channels.rs index efd65aeb..ecd895c4 100644 --- a/crates/core/models/src/v0/channels.rs +++ b/crates/core/models/src/v0/channels.rs @@ -324,7 +324,7 @@ auto_derived!( /// Join a voice channel pub struct DataJoinCall { - pub node: String + pub node: Option } ); diff --git a/crates/delta/src/routes/channels/voice_join.rs b/crates/delta/src/routes/channels/voice_join.rs index eebbdc71..7c3c86cd 100644 --- a/crates/delta/src/routes/channels/voice_join.rs +++ b/crates/delta/src/routes/channels/voice_join.rs @@ -1,6 +1,6 @@ use revolt_config::config; use revolt_models::v0; -use revolt_database::{util::{permissions::perms, reference::Reference}, voice::{raise_if_in_voice, VoiceClient}, Channel, Database, SystemMessage, User, AMQP}; +use revolt_database::{util::{permissions::perms, reference::Reference}, voice::{get_channel_node, raise_if_in_voice, VoiceClient}, Channel, Database, SystemMessage, User, AMQP}; use revolt_permissions::{calculate_channel_permissions, ChannelPermission}; use revolt_result::{create_error, Result}; @@ -12,10 +12,11 @@ use rocket::{serde::json::Json, State}; #[openapi(tag = "Voice")] #[post("//join_call", data="")] pub async fn call(db: &State, amqp: &State, voice: &State, user: User, target: Reference, data: Json) -> Result> { - let config = config().await; + if !voice.is_enabled() { + return Err(create_error!(LiveKitUnavailable)) + } - let node_host = config.hosts.livekit.get(&data.node) - .ok_or_else(|| create_error!(UnknownNode))?; + let config = config().await; let channel = target.as_channel(db).await?; @@ -26,8 +27,17 @@ pub async fn call(db: &State, amqp: &State, voice: &State