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();