diff --git a/src/requests/voice.rs b/src/requests/voice.rs index 54f16e8..924a34d 100644 --- a/src/requests/voice.rs +++ b/src/requests/voice.rs @@ -39,19 +39,22 @@ pub fn leave(server: &Arc, client: &Client, channel_id: &str) -> crate:: pub fn voice(server: &Arc, client: &Client, data: &[u8]) -> crate::Result<()> { let v = server.voice.lock().unwrap(); - let Some((channel_id, voice_id)) = v.find_user(&client.get_uuid()?) else { + let user_id = client.get_uuid()?; + let Some((channel_id, voice_id)) = v.find_user(&user_id) else { return Ok(()); }; - let targets = v.get(&channel_id); + let mut targets = v.get(&channel_id); + + if let Some(pos) = targets.iter().position(|x| *x == &user_id) { + targets.remove(pos); + } let prefix = voice_id.to_le_bytes(); let mut payload = Vec::with_capacity(prefix.len() + data.len()); payload.extend_from_slice(&prefix); payload.extend_from_slice(data); - client.send_bin(&payload)?; - server.broadcast_bin_to(&targets, payload)?; Ok(())