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;
}
}