From 8bcd3da9e4ee025b3f5dfd6cdb171587ca63d79a Mon Sep 17 00:00:00 2001
From: EpicOfficer <9379778+EpicOfficer@users.noreply.github.com>
Date: Wed, 2 Mar 2022 20:27:29 +0000
Subject: [PATCH] Add self_video to VoiceState (#2137)
* Add self_video to VoiceState
* Update selfVideo flag
---
src/Discord.Net.Core/Entities/Users/IVoiceState.cs | 7 +++++++
src/Discord.Net.Rest/API/Common/VoiceState.cs | 2 ++
src/Discord.Net.Rest/Entities/Users/RestGroupUser.cs | 2 ++
src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs | 2 ++
.../Entities/Users/RestWebhookUser.cs | 2 ++
.../Entities/Users/SocketGroupUser.cs | 2 ++
.../Entities/Users/SocketGuildUser.cs | 2 ++
.../Entities/Users/SocketThreadUser.cs | 4 ++++
.../Entities/Users/SocketVoiceState.cs | 11 ++++++++---
.../Entities/Users/SocketWebhookUser.cs | 2 ++
10 files changed, 33 insertions(+), 3 deletions(-)
diff --git a/src/Discord.Net.Core/Entities/Users/IVoiceState.cs b/src/Discord.Net.Core/Entities/Users/IVoiceState.cs
index c9a22761f..f346fc914 100644
--- a/src/Discord.Net.Core/Entities/Users/IVoiceState.cs
+++ b/src/Discord.Net.Core/Entities/Users/IVoiceState.cs
@@ -65,6 +65,13 @@ namespace Discord
///
bool IsStreaming { get; }
///
+ /// Gets a value that indicates if the user is videoing in a voice channel.
+ ///
+ ///
+ /// true if the user has their camera turned on; otherwise false.
+ ///
+ bool IsVideoing { get; }
+ ///
/// Gets the time on which the user requested to speak.
///
DateTimeOffset? RequestToSpeakTimestamp { get; }
diff --git a/src/Discord.Net.Rest/API/Common/VoiceState.cs b/src/Discord.Net.Rest/API/Common/VoiceState.cs
index f7cd54a72..adfa7f20e 100644
--- a/src/Discord.Net.Rest/API/Common/VoiceState.cs
+++ b/src/Discord.Net.Rest/API/Common/VoiceState.cs
@@ -28,6 +28,8 @@ namespace Discord.API
public bool Suppress { get; set; }
[JsonProperty("self_stream")]
public bool SelfStream { get; set; }
+ [JsonProperty("self_video")]
+ public bool SelfVideo { get; set; }
[JsonProperty("request_to_speak_timestamp")]
public Optional RequestToSpeakTimestamp { get; set; }
}
diff --git a/src/Discord.Net.Rest/Entities/Users/RestGroupUser.cs b/src/Discord.Net.Rest/Entities/Users/RestGroupUser.cs
index 40e45b135..a8c1a9b0a 100644
--- a/src/Discord.Net.Rest/Entities/Users/RestGroupUser.cs
+++ b/src/Discord.Net.Rest/Entities/Users/RestGroupUser.cs
@@ -41,6 +41,8 @@ namespace Discord.Rest
///
bool IVoiceState.IsStreaming => false;
///
+ bool IVoiceState.IsVideoing => false;
+ ///
DateTimeOffset? IVoiceState.RequestToSpeakTimestamp => null;
#endregion
}
diff --git a/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs b/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs
index d6c7b5d7c..0a4a33099 100644
--- a/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs
+++ b/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs
@@ -223,6 +223,8 @@ namespace Discord.Rest
///
bool IVoiceState.IsStreaming => false;
///
+ bool IVoiceState.IsVideoing => false;
+ ///
DateTimeOffset? IVoiceState.RequestToSpeakTimestamp => null;
#endregion
}
diff --git a/src/Discord.Net.Rest/Entities/Users/RestWebhookUser.cs b/src/Discord.Net.Rest/Entities/Users/RestWebhookUser.cs
index d03800676..3fa88649a 100644
--- a/src/Discord.Net.Rest/Entities/Users/RestWebhookUser.cs
+++ b/src/Discord.Net.Rest/Entities/Users/RestWebhookUser.cs
@@ -131,6 +131,8 @@ namespace Discord.Rest
///
bool IVoiceState.IsStreaming => false;
///
+ bool IVoiceState.IsVideoing => false;
+ ///
DateTimeOffset? IVoiceState.RequestToSpeakTimestamp => null;
#endregion
}
diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketGroupUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketGroupUser.cs
index d027bf0aa..a40ae59be 100644
--- a/src/Discord.Net.WebSocket/Entities/Users/SocketGroupUser.cs
+++ b/src/Discord.Net.WebSocket/Entities/Users/SocketGroupUser.cs
@@ -70,6 +70,8 @@ namespace Discord.WebSocket
///
bool IVoiceState.IsStreaming => false;
///
+ bool IVoiceState.IsVideoing => false;
+ ///
DateTimeOffset? IVoiceState.RequestToSpeakTimestamp => null;
#endregion
}
diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs
index ac3a53f17..051687b78 100644
--- a/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs
+++ b/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs
@@ -65,6 +65,8 @@ namespace Discord.WebSocket
///
public bool IsStreaming => VoiceState?.IsStreaming ?? false;
///
+ public bool IsVideoing => VoiceState?.IsVideoing ?? false;
+ ///
public DateTimeOffset? RequestToSpeakTimestamp => VoiceState?.RequestToSpeakTimestamp ?? null;
///
public bool? IsPending { get; private set; }
diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketThreadUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketThreadUser.cs
index 08a1cbab4..025d34d0f 100644
--- a/src/Discord.Net.WebSocket/Entities/Users/SocketThreadUser.cs
+++ b/src/Discord.Net.WebSocket/Entities/Users/SocketThreadUser.cs
@@ -122,6 +122,10 @@ namespace Discord.WebSocket
public bool IsStreaming
=> GuildUser.IsStreaming;
+ ///
+ public bool IsVideoing
+ => GuildUser.IsVideoing;
+
///
public DateTimeOffset? RequestToSpeakTimestamp
=> GuildUser.RequestToSpeakTimestamp;
diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketVoiceState.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketVoiceState.cs
index 816a839fc..6c5b867b5 100644
--- a/src/Discord.Net.WebSocket/Entities/Users/SocketVoiceState.cs
+++ b/src/Discord.Net.WebSocket/Entities/Users/SocketVoiceState.cs
@@ -13,7 +13,7 @@ namespace Discord.WebSocket
///
/// Initializes a default with everything set to null or false.
///
- public static readonly SocketVoiceState Default = new SocketVoiceState(null, null, null, false, false, false, false, false, false);
+ public static readonly SocketVoiceState Default = new SocketVoiceState(null, null, null, false, false, false, false, false, false, false);
[Flags]
private enum Flags : byte
@@ -25,6 +25,7 @@ namespace Discord.WebSocket
SelfMuted = 0x08,
SelfDeafened = 0x10,
SelfStream = 0x20,
+ SelfVideo = 0x40,
}
private readonly Flags _voiceStates;
@@ -50,9 +51,11 @@ namespace Discord.WebSocket
public bool IsSelfDeafened => (_voiceStates & Flags.SelfDeafened) != 0;
///
public bool IsStreaming => (_voiceStates & Flags.SelfStream) != 0;
+ ///
+ public bool IsVideoing => (_voiceStates & Flags.SelfVideo) != 0;
- internal SocketVoiceState(SocketVoiceChannel voiceChannel, DateTimeOffset? requestToSpeak, string sessionId, bool isSelfMuted, bool isSelfDeafened, bool isMuted, bool isDeafened, bool isSuppressed, bool isStream)
+ internal SocketVoiceState(SocketVoiceChannel voiceChannel, DateTimeOffset? requestToSpeak, string sessionId, bool isSelfMuted, bool isSelfDeafened, bool isMuted, bool isDeafened, bool isSuppressed, bool isStream, bool isVideo)
{
VoiceChannel = voiceChannel;
VoiceSessionId = sessionId;
@@ -71,11 +74,13 @@ namespace Discord.WebSocket
voiceStates |= Flags.Suppressed;
if (isStream)
voiceStates |= Flags.SelfStream;
+ if (isVideo)
+ voiceStates |= Flags.SelfVideo;
_voiceStates = voiceStates;
}
internal static SocketVoiceState Create(SocketVoiceChannel voiceChannel, Model model)
{
- return new SocketVoiceState(voiceChannel, model.RequestToSpeakTimestamp.IsSpecified ? model.RequestToSpeakTimestamp.Value : null, model.SessionId, model.SelfMute, model.SelfDeaf, model.Mute, model.Deaf, model.Suppress, model.SelfStream);
+ return new SocketVoiceState(voiceChannel, model.RequestToSpeakTimestamp.IsSpecified ? model.RequestToSpeakTimestamp.Value : null, model.SessionId, model.SelfMute, model.SelfDeaf, model.Mute, model.Deaf, model.Suppress, model.SelfStream, model.SelfVideo);
}
///
diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketWebhookUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketWebhookUser.cs
index df5fe786d..2b2c259c5 100644
--- a/src/Discord.Net.WebSocket/Entities/Users/SocketWebhookUser.cs
+++ b/src/Discord.Net.WebSocket/Entities/Users/SocketWebhookUser.cs
@@ -164,6 +164,8 @@ namespace Discord.WebSocket
///
bool IVoiceState.IsStreaming => false;
///
+ bool IVoiceState.IsVideoing => false;
+ ///
DateTimeOffset? IVoiceState.RequestToSpeakTimestamp => null;
#endregion
}