From 9bb08c9ba44483103c0f3f101a1095b3758dbe5e Mon Sep 17 00:00:00 2001 From: Chris Johnston Date: Sat, 7 Sep 2019 19:08:40 -0700 Subject: [PATCH] feature: Add SelfStream voice state property (#1369) * Add self_stream voice state property Adds the self_stream property which is set true when a user is streaming a video to a voice channel * use flags for selfstream state instead of its own prop --- 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/SocketVoiceState.cs | 11 ++++++++--- .../Entities/Users/SocketWebhookUser.cs | 2 ++ 9 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Users/IVoiceState.cs b/src/Discord.Net.Core/Entities/Users/IVoiceState.cs index 2b3abc06f..ae5f0264c 100644 --- a/src/Discord.Net.Core/Entities/Users/IVoiceState.cs +++ b/src/Discord.Net.Core/Entities/Users/IVoiceState.cs @@ -55,5 +55,12 @@ namespace Discord /// Gets the unique identifier for this user's voice session. /// string VoiceSessionId { get; } + /// + /// Gets a value that indicates if this user is streaming in a voice channel. + /// + /// + /// true if the user is streaming; otherwise false. + /// + bool IsStream { get; } } } diff --git a/src/Discord.Net.Rest/API/Common/VoiceState.cs b/src/Discord.Net.Rest/API/Common/VoiceState.cs index b1f937b09..c7a571ed0 100644 --- a/src/Discord.Net.Rest/API/Common/VoiceState.cs +++ b/src/Discord.Net.Rest/API/Common/VoiceState.cs @@ -26,5 +26,7 @@ namespace Discord.API public bool SelfMute { get; set; } [JsonProperty("suppress")] public bool Suppress { get; set; } + [JsonProperty("self_stream")] + public bool SelfStream { get; set; } } } diff --git a/src/Discord.Net.Rest/Entities/Users/RestGroupUser.cs b/src/Discord.Net.Rest/Entities/Users/RestGroupUser.cs index fbd76f609..5be1dc892 100644 --- a/src/Discord.Net.Rest/Entities/Users/RestGroupUser.cs +++ b/src/Discord.Net.Rest/Entities/Users/RestGroupUser.cs @@ -35,5 +35,7 @@ namespace Discord.Rest IVoiceChannel IVoiceState.VoiceChannel => null; /// string IVoiceState.VoiceSessionId => null; + /// + bool IVoiceState.IsStream => false; } } diff --git a/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs b/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs index 27a910576..ec329cca5 100644 --- a/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs +++ b/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs @@ -151,5 +151,7 @@ namespace Discord.Rest IVoiceChannel IVoiceState.VoiceChannel => null; /// string IVoiceState.VoiceSessionId => null; + /// + bool IVoiceState.IsStream => false; } } diff --git a/src/Discord.Net.Rest/Entities/Users/RestWebhookUser.cs b/src/Discord.Net.Rest/Entities/Users/RestWebhookUser.cs index 67914e873..b558ff89a 100644 --- a/src/Discord.Net.Rest/Entities/Users/RestWebhookUser.cs +++ b/src/Discord.Net.Rest/Entities/Users/RestWebhookUser.cs @@ -95,5 +95,7 @@ namespace Discord.Rest IVoiceChannel IVoiceState.VoiceChannel => null; /// string IVoiceState.VoiceSessionId => null; + /// + bool IVoiceState.IsStream => false; } } diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketGroupUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketGroupUser.cs index f560aadbb..b8e05aa0c 100644 --- a/src/Discord.Net.WebSocket/Entities/Users/SocketGroupUser.cs +++ b/src/Discord.Net.WebSocket/Entities/Users/SocketGroupUser.cs @@ -61,5 +61,7 @@ namespace Discord.WebSocket IVoiceChannel IVoiceState.VoiceChannel => null; /// string IVoiceState.VoiceSessionId => null; + /// + bool IVoiceState.IsStream => false; } } diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs index dee450cdd..fe2d4a3cf 100644 --- a/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs +++ b/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs @@ -55,6 +55,8 @@ namespace Discord.WebSocket /// public bool IsMuted => VoiceState?.IsMuted ?? false; /// + public bool IsStream => VoiceState?.IsStream ?? false; + /// public DateTimeOffset? JoinedAt => DateTimeUtils.FromTicks(_joinedAtTicks); /// /// Returns a collection of roles that the user possesses. diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketVoiceState.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketVoiceState.cs index 3e5d1c3b7..4d9b2ed5e 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, false, false, false, false, false); + public static readonly SocketVoiceState Default = new SocketVoiceState(null, null, false, false, false, false, false, false); [Flags] private enum Flags : byte @@ -24,6 +24,7 @@ namespace Discord.WebSocket Deafened = 0x04, SelfMuted = 0x08, SelfDeafened = 0x10, + SelfStream = 0x20, } private readonly Flags _voiceStates; @@ -45,8 +46,10 @@ namespace Discord.WebSocket public bool IsSelfMuted => (_voiceStates & Flags.SelfMuted) != 0; /// public bool IsSelfDeafened => (_voiceStates & Flags.SelfDeafened) != 0; + /// + public bool IsStream => (_voiceStates & Flags.SelfStream) != 0; - internal SocketVoiceState(SocketVoiceChannel voiceChannel, string sessionId, bool isSelfMuted, bool isSelfDeafened, bool isMuted, bool isDeafened, bool isSuppressed) + internal SocketVoiceState(SocketVoiceChannel voiceChannel, string sessionId, bool isSelfMuted, bool isSelfDeafened, bool isMuted, bool isDeafened, bool isSuppressed, bool isStream) { VoiceChannel = voiceChannel; VoiceSessionId = sessionId; @@ -62,11 +65,13 @@ namespace Discord.WebSocket voiceStates |= Flags.Deafened; if (isSuppressed) voiceStates |= Flags.Suppressed; + if (isStream) + voiceStates |= Flags.SelfStream; _voiceStates = voiceStates; } internal static SocketVoiceState Create(SocketVoiceChannel voiceChannel, Model model) { - return new SocketVoiceState(voiceChannel, model.SessionId, model.SelfMute, model.SelfDeaf, model.Mute, model.Deaf, model.Suppress); + return new SocketVoiceState(voiceChannel, model.SessionId, model.SelfMute, model.SelfDeaf, model.Mute, model.Deaf, model.Suppress, model.SelfStream); } /// diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketWebhookUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketWebhookUser.cs index 8ff4ee48c..821b8c745 100644 --- a/src/Discord.Net.WebSocket/Entities/Users/SocketWebhookUser.cs +++ b/src/Discord.Net.WebSocket/Entities/Users/SocketWebhookUser.cs @@ -114,5 +114,7 @@ namespace Discord.WebSocket IVoiceChannel IVoiceState.VoiceChannel => null; /// string IVoiceState.VoiceSessionId => null; + /// + bool IVoiceState.IsStream => false; } }