diff --git a/crates/daemons/voice-ingress/src/api.rs b/crates/daemons/voice-ingress/src/api.rs index 7889d19a..3fa8791f 100644 --- a/crates/daemons/voice-ingress/src/api.rs +++ b/crates/daemons/voice-ingress/src/api.rs @@ -244,7 +244,7 @@ pub async fn ingress( if disconnect { log::debug!("Removing user {user_id} from channel {channel_id} {event:?} due to forbidden track."); - voice_client.remove_user(node, user_id, channel_id).await?; + let _ = voice_client.remove_user(node, user_id, channel_id).await; delete_voice_state(channel_id, channel.server(), user_id).await?; return Ok(EmptyResponse); diff --git a/crates/delta/src/routes/bots/delete.rs b/crates/delta/src/routes/bots/delete.rs index c8bf5cb3..811f58f2 100644 --- a/crates/delta/src/routes/bots/delete.rs +++ b/crates/delta/src/routes/bots/delete.rs @@ -22,10 +22,11 @@ pub async fn delete_bot( bot.delete(db).await?; for channel_id in get_user_voice_channels(&bot.id).await? { - let node = get_channel_node(&channel_id).await?.unwrap(); - let channel = Reference::from_unchecked(&channel_id).as_channel(db).await?; + if let Some(node) = get_channel_node(&channel_id).await? { + let _ = voice_client.remove_user(&node, &bot.id, &channel_id).await; + } - voice_client.remove_user(&node, &bot.id, &channel_id).await?; + let channel = Reference::from_unchecked(&channel_id).as_channel(db).await?; delete_voice_state(&channel_id, channel.server(), &bot.id).await?; } diff --git a/crates/delta/src/routes/channels/group_remove_member.rs b/crates/delta/src/routes/channels/group_remove_member.rs index 0ded3ef3..33a1a709 100644 --- a/crates/delta/src/routes/channels/group_remove_member.rs +++ b/crates/delta/src/routes/channels/group_remove_member.rs @@ -48,9 +48,10 @@ pub async fn remove_member( }; if is_in_voice_channel(&user.id, channel.id()).await? { - let node = get_channel_node(channel.id()).await?.unwrap(); + if let Some(node) = get_channel_node(channel.id()).await? { + let _ = voice_client.remove_user(&node, &user.id, channel.id()).await; + } - voice_client.remove_user(&node, &user.id, channel.id()).await?; delete_voice_state(channel.id(), None, &user.id).await?; }; diff --git a/crates/delta/src/routes/channels/voice_join.rs b/crates/delta/src/routes/channels/voice_join.rs index 9ed3a0ba..75075f35 100644 --- a/crates/delta/src/routes/channels/voice_join.rs +++ b/crates/delta/src/routes/channels/voice_join.rs @@ -79,15 +79,15 @@ pub async fn call( // should only ever loop once but just to cover our backs. for channel_id in get_user_voice_channels(&user.id).await? { - let node = get_channel_node(&channel_id).await?.unwrap(); + if let Some(node) = get_channel_node(&channel_id).await? { + // if this errors its just a mismatching state - ignore and proceed to still delete our state + let _ = voice_client.remove_user(&node, &user.id, &channel_id).await; + }; + let channel = Reference::from_unchecked(&channel_id) .as_channel(db) .await?; - voice_client - .remove_user(&node, &user.id, &channel_id) - .await?; - delete_voice_state(&channel_id, channel.server(), &user.id).await?; } } else { diff --git a/crates/delta/src/routes/servers/ban_create.rs b/crates/delta/src/routes/servers/ban_create.rs index 3d798501..8096abc5 100644 --- a/crates/delta/src/routes/servers/ban_create.rs +++ b/crates/delta/src/routes/servers/ban_create.rs @@ -59,9 +59,9 @@ pub async fn ban( // If the member is in a voice channel while banned kick them from the voice channel if let Some(channel_id) = get_user_voice_channel_in_server(&user.id, &server.id).await? { - let node = get_channel_node(&channel_id).await?.unwrap(); - - voice_client.remove_user(&node, &user.id, &channel_id).await?; + if let Some(node) = get_channel_node(&channel_id).await? { + let _ = voice_client.remove_user(&node, &user.id, &channel_id).await; + } delete_voice_state(&channel_id, Some(&server.id), &user.id).await? } diff --git a/crates/delta/src/routes/servers/member_remove.rs b/crates/delta/src/routes/servers/member_remove.rs index f2a3b654..d263f975 100644 --- a/crates/delta/src/routes/servers/member_remove.rs +++ b/crates/delta/src/routes/servers/member_remove.rs @@ -47,9 +47,9 @@ pub async fn kick( .await?; if let Some(channel_id) = get_user_voice_channel_in_server(&user.id, &server.id).await? { - let node = get_channel_node(&channel_id).await?.unwrap(); - - voice_client.remove_user(&node, &user.id, &channel_id).await?; + if let Some(node) = get_channel_node(&channel_id).await? { + let _ = voice_client.remove_user(&node, &user.id, &channel_id).await; + } delete_voice_state(&channel_id, Some(&server.id), &user.id).await?; }; diff --git a/crates/delta/src/routes/servers/server_delete.rs b/crates/delta/src/routes/servers/server_delete.rs index ce323006..4aa45334 100644 --- a/crates/delta/src/routes/servers/server_delete.rs +++ b/crates/delta/src/routes/servers/server_delete.rs @@ -39,9 +39,9 @@ pub async fn delete( } else { if let Some(channel_id) = get_user_voice_channel_in_server(&user.id, &server.id).await? { if server.channels.iter().any(|c| c == &channel_id) { - let node = get_channel_node(&channel_id).await?.unwrap(); - - voice_client.remove_user(&node, &user.id, &channel_id).await?; + if let Some(node) = get_channel_node(&channel_id).await? { + let _ = voice_client.remove_user(&node, &user.id, &channel_id).await; + } delete_voice_state(&channel_id, Some(&server.id), &user.id).await?; }