From 1e21a6ed4a6a6f1dcf07037a340480f037c34187 Mon Sep 17 00:00:00 2001 From: Misha133 <61027276+Misha-133@users.noreply.github.com> Date: Mon, 6 Feb 2023 15:25:59 +0300 Subject: [PATCH] [Feature] Add missing VoiceChannel properties (#2573) * add missing properties * forgot about `MockedVoiceChannel` --- .../Entities/Channels/IVoiceChannel.cs | 5 +++++ .../Entities/Channels/VideoQualityMode.cs | 17 +++++++++++++++++ .../Entities/Channels/VoiceChannelProperties.cs | 5 +++++ src/Discord.Net.Rest/API/Common/Channel.cs | 3 +++ .../API/Rest/CreateGuildChannelParams.cs | 4 ++++ .../Entities/Channels/RestVoiceChannel.cs | 4 ++++ .../Entities/Guilds/GuildHelper.cs | 2 ++ .../Entities/Channels/SocketVoiceChannel.cs | 3 +++ .../MockedEntities/MockedVoiceChannel.cs | 2 ++ 9 files changed, 45 insertions(+) create mode 100644 src/Discord.Net.Core/Entities/Channels/VideoQualityMode.cs diff --git a/src/Discord.Net.Core/Entities/Channels/IVoiceChannel.cs b/src/Discord.Net.Core/Entities/Channels/IVoiceChannel.cs index d75a4e29c..5973e4a2e 100644 --- a/src/Discord.Net.Core/Entities/Channels/IVoiceChannel.cs +++ b/src/Discord.Net.Core/Entities/Channels/IVoiceChannel.cs @@ -26,6 +26,11 @@ namespace Discord /// int? UserLimit { get; } + /// + /// Gets the video quality mode for this channel. + /// + VideoQualityMode VideoQualityMode { get; } + /// /// Bulk-deletes multiple messages. /// diff --git a/src/Discord.Net.Core/Entities/Channels/VideoQualityMode.cs b/src/Discord.Net.Core/Entities/Channels/VideoQualityMode.cs new file mode 100644 index 000000000..f04523b03 --- /dev/null +++ b/src/Discord.Net.Core/Entities/Channels/VideoQualityMode.cs @@ -0,0 +1,17 @@ +namespace Discord; + +/// +/// Represents a video quality mode for voice channels. +/// +public enum VideoQualityMode +{ + /// + /// Discord chooses the quality for optimal performance. + /// + Auto = 1, + + /// + /// 720p. + /// + Full = 2 +} diff --git a/src/Discord.Net.Core/Entities/Channels/VoiceChannelProperties.cs b/src/Discord.Net.Core/Entities/Channels/VoiceChannelProperties.cs index 251a45c3d..417e391c0 100644 --- a/src/Discord.Net.Core/Entities/Channels/VoiceChannelProperties.cs +++ b/src/Discord.Net.Core/Entities/Channels/VoiceChannelProperties.cs @@ -17,5 +17,10 @@ namespace Discord /// Gets or sets the channel voice region id, automatic when set to . /// public Optional RTCRegion { get; set; } + + /// + /// Get or sets the video quality mode for this channel. + /// + public Optional VideoQualityMode { get; set; } } } diff --git a/src/Discord.Net.Rest/API/Common/Channel.cs b/src/Discord.Net.Rest/API/Common/Channel.cs index b8bfe1ea5..8ceaf2b0e 100644 --- a/src/Discord.Net.Rest/API/Common/Channel.cs +++ b/src/Discord.Net.Rest/API/Common/Channel.cs @@ -43,6 +43,9 @@ namespace Discord.API [JsonProperty("rtc_region")] public Optional RTCRegion { get; set; } + [JsonProperty("video_quality_mode")] + public Optional VideoQualityMode { get; set; } + //PrivateChannel [JsonProperty("recipients")] public Optional Recipients { get; set; } diff --git a/src/Discord.Net.Rest/API/Rest/CreateGuildChannelParams.cs b/src/Discord.Net.Rest/API/Rest/CreateGuildChannelParams.cs index 74590fb35..faa46937b 100644 --- a/src/Discord.Net.Rest/API/Rest/CreateGuildChannelParams.cs +++ b/src/Discord.Net.Rest/API/Rest/CreateGuildChannelParams.cs @@ -31,6 +31,10 @@ namespace Discord.API.Rest public Optional Bitrate { get; set; } [JsonProperty("user_limit")] public Optional UserLimit { get; set; } + [JsonProperty("video_quality_mode")] + public Optional VideoQuality { get; set; } + [JsonProperty("rtc_region")] + public Optional RtcRegion { get; set; } //Forum channels [JsonProperty("default_reaction_emoji")] diff --git a/src/Discord.Net.Rest/Entities/Channels/RestVoiceChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestVoiceChannel.cs index 01db33ffb..a4124bc8e 100644 --- a/src/Discord.Net.Rest/Entities/Channels/RestVoiceChannel.cs +++ b/src/Discord.Net.Rest/Entities/Channels/RestVoiceChannel.cs @@ -26,6 +26,8 @@ namespace Discord.Rest public int? UserLimit { get; private set; } /// public string RTCRegion { get; private set; } + /// + public VideoQualityMode VideoQualityMode { get; private set; } internal RestVoiceChannel(BaseDiscordClient discord, IGuild guild, ulong id) : base(discord, guild, id) @@ -48,6 +50,8 @@ namespace Discord.Rest if(model.UserLimit.IsSpecified) UserLimit = model.UserLimit.Value != 0 ? model.UserLimit.Value : (int?)null; + VideoQualityMode = model.VideoQualityMode.GetValueOrDefault(VideoQualityMode.Auto); + RTCRegion = model.RTCRegion.GetValueOrDefault(null); } diff --git a/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs b/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs index 530f7ce5a..ea88e4dbe 100644 --- a/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs +++ b/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs @@ -285,6 +285,8 @@ namespace Discord.Rest Deny = overwrite.Permissions.DenyValue.ToString() }).ToArray() : Optional.Create(), + VideoQuality = props.VideoQualityMode, + RtcRegion = props.RTCRegion }; var model = await client.ApiClient.CreateGuildChannelAsync(guild.Id, args, options).ConfigureAwait(false); return RestVoiceChannel.Create(client, guild, model); diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketVoiceChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketVoiceChannel.cs index f2bb5d6d3..511b16e84 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketVoiceChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketVoiceChannel.cs @@ -34,6 +34,8 @@ namespace Discord.WebSocket public int? UserLimit { get; private set; } /// public string RTCRegion { get; private set; } + /// + public VideoQualityMode VideoQualityMode { get; private set; } /// /// Gets a collection of users that are currently connected to this voice channel. @@ -60,6 +62,7 @@ namespace Discord.WebSocket base.Update(state, model); Bitrate = model.Bitrate.GetValueOrDefault(64000); UserLimit = model.UserLimit.GetValueOrDefault() != 0 ? model.UserLimit.Value : (int?)null; + VideoQualityMode = model.VideoQualityMode.GetValueOrDefault(VideoQualityMode.Auto); RTCRegion = model.RTCRegion.GetValueOrDefault(null); } diff --git a/test/Discord.Net.Tests.Unit/MockedEntities/MockedVoiceChannel.cs b/test/Discord.Net.Tests.Unit/MockedEntities/MockedVoiceChannel.cs index 3f167ba5f..da978e551 100644 --- a/test/Discord.Net.Tests.Unit/MockedEntities/MockedVoiceChannel.cs +++ b/test/Discord.Net.Tests.Unit/MockedEntities/MockedVoiceChannel.cs @@ -38,6 +38,8 @@ namespace Discord public ChannelFlags Flags => throw new NotImplementedException(); + public VideoQualityMode VideoQualityMode => throw new NotImplementedException(); + public Task AddPermissionOverwriteAsync(IRole role, OverwritePermissions permissions, RequestOptions options = null) => throw new NotImplementedException(); public Task AddPermissionOverwriteAsync(IUser user, OverwritePermissions permissions, RequestOptions options = null) => throw new NotImplementedException(); public Task ConnectAsync(bool selfDeaf = false, bool selfMute = false, bool external = false) => throw new NotImplementedException();