diff --git a/src/Discord.Net.Core/Entities/Activities/ActivityFlags.cs b/src/Discord.Net.Core/Entities/Activities/ActivityFlags.cs
new file mode 100644
index 000000000..69e47dc40
--- /dev/null
+++ b/src/Discord.Net.Core/Entities/Activities/ActivityFlags.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Discord
+{
+ [Flags]
+ public enum ActivityFlag
+ {
+ Instance = 1,
+ Join = 0b10,
+ Spectate = 0b100,
+ JoinRequest = 0b1000,
+ Sync = 0b10000,
+ Play = 0b100000
+ }
+}
diff --git a/src/Discord.Net.Core/Entities/Users/UserFlags.cs b/src/Discord.Net.Core/Entities/Users/UserFlags.cs
new file mode 100644
index 000000000..54b16676e
--- /dev/null
+++ b/src/Discord.Net.Core/Entities/Users/UserFlags.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Discord
+{
+ [Flags]
+ public enum UserFlag
+ {
+ ///
+ /// Default value for flags, when none are given to an account.
+ ///
+ None = 0,
+ ///
+ /// Flag given to Discord staff.
+ ///
+ Staff = 0b1,
+ ///
+ /// Flag given to Discord partners.
+ ///
+ Partner = 0b10,
+ HypeSquadEvents = 0b100,
+ BugHunter = 0b1000,
+ HypeSquadBravery = 0b100_0000,
+ HypeSquadBrilliance = 0b1000_0000,
+ HypeSquadBalance = 0b1_0000_0000,
+ EarlySupporter = 0b10_0000_0000,
+ }
+}
diff --git a/src/Discord.Net.Core/Extensions/ActivityExtensions.cs b/src/Discord.Net.Core/Extensions/ActivityExtensions.cs
new file mode 100644
index 000000000..ba968140b
--- /dev/null
+++ b/src/Discord.Net.Core/Extensions/ActivityExtensions.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Discord
+{
+ ///
+ /// Extension methods for the types.
+ ///
+ public static class ActivityExtensions
+ {
+ public static bool CheckFlag(this IActivity activity, ActivityFlag flag)
+ => (activity.Flags & (int)flag) >= (int)flag;
+ }
+}
diff --git a/src/Discord.Net.Core/Extensions/UserExtensions.cs b/src/Discord.Net.Core/Extensions/UserExtensions.cs
index f98bf7227..cff3d1a09 100644
--- a/src/Discord.Net.Core/Extensions/UserExtensions.cs
+++ b/src/Discord.Net.Core/Extensions/UserExtensions.cs
@@ -160,5 +160,8 @@ namespace Discord
///
public static Task BanAsync(this IGuildUser user, int pruneDays = 0, string reason = null, RequestOptions options = null)
=> user.Guild.AddBanAsync(user, pruneDays, reason, options);
+
+ public static bool CheckUserFlag(this IUser user, UserFlag flag)
+ => (user.Flags & (int)flag) >= (int)flag;
}
}
diff --git a/src/Discord.Net.Rest/API/Common/Game.cs b/src/Discord.Net.Rest/API/Common/Game.cs
index 4cde8444a..09c74b1dc 100644
--- a/src/Discord.Net.Rest/API/Common/Game.cs
+++ b/src/Discord.Net.Rest/API/Common/Game.cs
@@ -33,6 +33,8 @@ namespace Discord.API
public Optional SyncId { get; set; }
[JsonProperty("session_id")]
public Optional SessionId { get; set; }
+ [JsonProperty("Flags")]
+ public Optional Flags { get; set; }
[OnError]
internal void OnError(StreamingContext context, ErrorContext errorContext)
diff --git a/src/Discord.Net.Rest/API/Common/User.cs b/src/Discord.Net.Rest/API/Common/User.cs
index d49d24623..1a124ea6e 100644
--- a/src/Discord.Net.Rest/API/Common/User.cs
+++ b/src/Discord.Net.Rest/API/Common/User.cs
@@ -1,4 +1,4 @@
-#pragma warning disable CS1591
+#pragma warning disable CS1591
using Newtonsoft.Json;
namespace Discord.API
@@ -23,5 +23,9 @@ namespace Discord.API
public Optional Email { get; set; }
[JsonProperty("mfa_enabled")]
public Optional MfaEnabled { get; set; }
+ [JsonProperty("flags")]
+ public Optional Flags { get; set; }
+ [JsonProperty("premium_type")]
+ public Optional PremiumType { get; set; }
}
}
diff --git a/src/Discord.Net.Rest/Entities/Users/RestUser.cs b/src/Discord.Net.Rest/Entities/Users/RestUser.cs
index 6bfa9bcf3..29cfcd3aa 100644
--- a/src/Discord.Net.Rest/Entities/Users/RestUser.cs
+++ b/src/Discord.Net.Rest/Entities/Users/RestUser.cs
@@ -63,6 +63,10 @@ namespace Discord.Rest
IsBot = model.Bot.Value;
if (model.Username.IsSpecified)
Username = model.Username.Value;
+ if (model.Flags.IsSpecified)
+ Flags = model.Flags.Value;
+ if (model.PremiumType.IsSpecified)
+ PremiumType = model.PremiumType.Value;
}
///
diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs
index 659a2eeea..47d9f93b7 100644
--- a/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs
+++ b/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs
@@ -194,5 +194,6 @@ namespace Discord.WebSocket
//IVoiceState
///
IVoiceChannel IVoiceState.VoiceChannel => VoiceChannel;
+
}
}
diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs
index 4832e7311..ead657da6 100644
--- a/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs
+++ b/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs
@@ -38,6 +38,11 @@ namespace Discord.WebSocket
public IActivity Activity => Presence.Activity;
///
public UserStatus Status => Presence.Status;
+ ///
+ public int Flags { get; internal set; }
+ ///
+ public PremiumType? PremiumType { get; internal set; }
+
///
/// Gets mutual guilds shared with this user.
///
@@ -75,6 +80,16 @@ namespace Discord.WebSocket
Username = model.Username.Value;
hasChanges = true;
}
+ if (model.Flags.IsSpecified && model.Flags.Value != Flags)
+ {
+ Flags = model.Flags.Value;
+ hasChanges = true;
+ }
+ if (model.PremiumType.IsSpecified && model.PremiumType.Value != PremiumType)
+ {
+ PremiumType = model.PremiumType.Value;
+ hasChanges = true;
+ }
return hasChanges;
}
diff --git a/src/Discord.Net.WebSocket/Extensions/EntityExtensions.cs b/src/Discord.Net.WebSocket/Extensions/EntityExtensions.cs
index e8dc4b5f0..f97f59746 100644
--- a/src/Discord.Net.WebSocket/Extensions/EntityExtensions.cs
+++ b/src/Discord.Net.WebSocket/Extensions/EntityExtensions.cs
@@ -25,7 +25,8 @@ namespace Discord.WebSocket
Artists = model.State.GetValueOrDefault()?.Split(';').Select(x=>x?.Trim()).ToImmutableArray(),
Duration = timestamps?.End - timestamps?.Start,
AlbumArtUrl = albumArtId != null ? CDN.GetSpotifyAlbumArtUrl(albumArtId) : null,
- Type = ActivityType.Listening
+ Type = ActivityType.Listening,
+ Flags = model.Flags.GetValueOrDefault()
};
}
@@ -44,14 +45,15 @@ namespace Discord.WebSocket
LargeAsset = assets?[1],
Party = model.Party.IsSpecified ? model.Party.Value.ToEntity() : null,
Secrets = model.Secrets.IsSpecified ? model.Secrets.Value.ToEntity() : null,
- Timestamps = model.Timestamps.IsSpecified ? model.Timestamps.Value.ToEntity() : null
+ Timestamps = model.Timestamps.IsSpecified ? model.Timestamps.Value.ToEntity() : null,
+ Flags = model.Flags.GetValueOrDefault()
};
}
// Stream Game
if (model.StreamUrl.IsSpecified)
{
return new StreamingGame(
- model.Name,
+ model.Name,
model.StreamUrl.Value);
}
// Normal Game