From 1a16f4d271949ed50d2f8c117414500ae9bb4137 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D0=BE=D0=B3=D0=B4=D0=B0=D0=BD=20=D0=9F=D0=B5=D1=82?= =?UTF-8?q?=D1=80=D0=B5=D0=BD=D0=BA=D0=BE?= <71781221+Lepterion@users.noreply.github.com> Date: Sat, 24 Feb 2024 00:17:07 +0200 Subject: [PATCH] [Fix] Receiving voice packets (use system-assigned port) (#2857) * Voice receive fix (use system-selected port) * Update SocketGuild.cs --------- Co-authored-by: Misha133 --- src/Discord.Net.WebSocket/Audio/AudioClient.cs | 4 +--- src/Discord.Net.WebSocket/DiscordVoiceApiClient.cs | 4 ++-- .../Entities/Guilds/SocketGuild.cs | 12 +++--------- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/src/Discord.Net.WebSocket/Audio/AudioClient.cs b/src/Discord.Net.WebSocket/Audio/AudioClient.cs index e1379fdd..9f028ed8 100644 --- a/src/Discord.Net.WebSocket/Audio/AudioClient.cs +++ b/src/Discord.Net.WebSocket/Audio/AudioClient.cs @@ -321,11 +321,9 @@ namespace Discord.Audio return; } string ip; - int port; try { ip = Encoding.UTF8.GetString(packet, 8, 74 - 10).TrimEnd('\0'); - port = (packet[73] << 8) | packet[72]; } catch (Exception ex) { @@ -334,7 +332,7 @@ namespace Discord.Audio } await _audioLogger.DebugAsync("Received Discovery").ConfigureAwait(false); - await ApiClient.SendSelectProtocol(ip, port).ConfigureAwait(false); + await ApiClient.SendSelectProtocol(ip).ConfigureAwait(false); } else if (_connection.State == ConnectionState.Connected) { diff --git a/src/Discord.Net.WebSocket/DiscordVoiceApiClient.cs b/src/Discord.Net.WebSocket/DiscordVoiceApiClient.cs index 31be80a3..891bade2 100644 --- a/src/Discord.Net.WebSocket/DiscordVoiceApiClient.cs +++ b/src/Discord.Net.WebSocket/DiscordVoiceApiClient.cs @@ -143,7 +143,7 @@ namespace Discord.Audio }); } - public Task SendSelectProtocol(string externalIp, int externalPort) + public Task SendSelectProtocol(string externalIp) { return SendAsync(VoiceOpCode.SelectProtocol, new SelectProtocolParams { @@ -151,7 +151,7 @@ namespace Discord.Audio Data = new UdpProtocolInfo { Address = externalIp, - Port = externalPort, + Port = UdpPort, Mode = Mode } }); diff --git a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs index 6ca80cd7..34e5e6c2 100644 --- a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs +++ b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs @@ -1744,11 +1744,9 @@ namespace Discord.WebSocket if (external) { -#pragma warning disable IDISP001 - var _ = promise.TrySetResultAsync(null); + _ = promise.TrySetResultAsync(null); await Discord.ApiClient.SendVoiceStateUpdateAsync(_voiceStateUpdateParams).ConfigureAwait(false); return null; -#pragma warning restore IDISP001 } if (_audioClient == null) @@ -1766,19 +1764,15 @@ namespace Discord.WebSocket await promise.TrySetExceptionAsync(ex); else await promise.TrySetCanceledAsync(); - return; } }; audioClient.Connected += () => { -#pragma warning disable IDISP001 - var _ = promise.TrySetResultAsync(_audioClient); -#pragma warning restore IDISP001 + _ = promise.TrySetResultAsync(_audioClient); return Task.Delay(0); }; -#pragma warning disable IDISP003 + _audioClient = audioClient; -#pragma warning restore IDISP003 } await Discord.ApiClient.SendVoiceStateUpdateAsync(_voiceStateUpdateParams).ConfigureAwait(false);