Browse Source

Add implementation of activity flags, and extension method to check flag

pull/1237/head
Chris Johnston 6 years ago
parent
commit
b48c6df99d
10 changed files with 102 additions and 4 deletions
  1. +19
    -0
      src/Discord.Net.Core/Entities/Activities/ActivityFlags.cs
  2. +31
    -0
      src/Discord.Net.Core/Entities/Users/UserFlags.cs
  3. +17
    -0
      src/Discord.Net.Core/Extensions/ActivityExtensions.cs
  4. +3
    -0
      src/Discord.Net.Core/Extensions/UserExtensions.cs
  5. +2
    -0
      src/Discord.Net.Rest/API/Common/Game.cs
  6. +5
    -1
      src/Discord.Net.Rest/API/Common/User.cs
  7. +4
    -0
      src/Discord.Net.Rest/Entities/Users/RestUser.cs
  8. +1
    -0
      src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs
  9. +15
    -0
      src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs
  10. +5
    -3
      src/Discord.Net.WebSocket/Extensions/EntityExtensions.cs

+ 19
- 0
src/Discord.Net.Core/Entities/Activities/ActivityFlags.cs View File

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

+ 31
- 0
src/Discord.Net.Core/Entities/Users/UserFlags.cs View File

@@ -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
{
/// <summary>
/// Default value for flags, when none are given to an account.
/// </summary>
None = 0,
/// <summary>
/// Flag given to Discord staff.
/// </summary>
Staff = 0b1,
/// <summary>
/// Flag given to Discord partners.
/// </summary>
Partner = 0b10,
HypeSquadEvents = 0b100,
BugHunter = 0b1000,
HypeSquadBravery = 0b100_0000,
HypeSquadBrilliance = 0b1000_0000,
HypeSquadBalance = 0b1_0000_0000,
EarlySupporter = 0b10_0000_0000,
}
}

+ 17
- 0
src/Discord.Net.Core/Extensions/ActivityExtensions.cs View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Discord
{
/// <summary>
/// Extension methods for the <see cref="IActivity"/> types.
/// </summary>
public static class ActivityExtensions
{
public static bool CheckFlag(this IActivity activity, ActivityFlag flag)
=> (activity.Flags & (int)flag) >= (int)flag;
}
}

+ 3
- 0
src/Discord.Net.Core/Extensions/UserExtensions.cs View File

@@ -160,5 +160,8 @@ namespace Discord
/// </returns>
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;
}
}

+ 2
- 0
src/Discord.Net.Rest/API/Common/Game.cs View File

@@ -33,6 +33,8 @@ namespace Discord.API
public Optional<string> SyncId { get; set; }
[JsonProperty("session_id")]
public Optional<string> SessionId { get; set; }
[JsonProperty("Flags")]
public Optional<int> Flags { get; set; }

[OnError]
internal void OnError(StreamingContext context, ErrorContext errorContext)


+ 5
- 1
src/Discord.Net.Rest/API/Common/User.cs View File

@@ -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<string> Email { get; set; }
[JsonProperty("mfa_enabled")]
public Optional<bool> MfaEnabled { get; set; }
[JsonProperty("flags")]
public Optional<int> Flags { get; set; }
[JsonProperty("premium_type")]
public Optional<PremiumType> PremiumType { get; set; }
}
}

+ 4
- 0
src/Discord.Net.Rest/Entities/Users/RestUser.cs View File

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

/// <inheritdoc />


+ 1
- 0
src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs View File

@@ -194,5 +194,6 @@ namespace Discord.WebSocket
//IVoiceState
/// <inheritdoc />
IVoiceChannel IVoiceState.VoiceChannel => VoiceChannel;

}
}

+ 15
- 0
src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs View File

@@ -38,6 +38,11 @@ namespace Discord.WebSocket
public IActivity Activity => Presence.Activity;
/// <inheritdoc />
public UserStatus Status => Presence.Status;
/// <inheritdoc />
public int Flags { get; internal set; }
/// <inheritdoc />
public PremiumType? PremiumType { get; internal set; }

/// <summary>
/// Gets mutual guilds shared with this user.
/// </summary>
@@ -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;
}



+ 5
- 3
src/Discord.Net.WebSocket/Extensions/EntityExtensions.cs View File

@@ -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


Loading…
Cancel
Save