[Feature] Add support for Guild Member Flags (#2571)
* implement `GuildUserFlags` Co-authored-by: Casmir <68127614+csmir@users.noreply.github.com>
This commit is contained in:
42
src/Discord.Net.Core/Entities/Users/GuildUserFlags.cs
Normal file
42
src/Discord.Net.Core/Entities/Users/GuildUserFlags.cs
Normal file
@@ -0,0 +1,42 @@
|
||||
namespace Discord;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Represents public flags for a guild member.
|
||||
/// </summary>
|
||||
public enum GuildUserFlags
|
||||
{
|
||||
/// <summary>
|
||||
/// Member has no flags set.
|
||||
/// </summary>
|
||||
None = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Member has left and rejoined the guild.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Cannot be modified.
|
||||
/// </remarks>
|
||||
DidRejoin = 1 << 0,
|
||||
|
||||
/// <summary>
|
||||
/// Member has completed onboarding.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Cannot be modified.
|
||||
/// </remarks>
|
||||
CompletedOnboarding = 1 << 1,
|
||||
|
||||
/// <summary>
|
||||
/// Member bypasses guild verification requirements.
|
||||
/// </summary>
|
||||
BypassesVerification = 1 << 2,
|
||||
|
||||
/// <summary>
|
||||
/// Member has started onboarding.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Cannot be modified.
|
||||
/// </remarks>
|
||||
StartedOnboarding = 1 << 3,
|
||||
}
|
||||
@@ -82,5 +82,13 @@ namespace Discord
|
||||
/// <see langword="null"/> or a time in the past to clear a currently existing timeout.
|
||||
/// </remarks>
|
||||
public Optional<DateTimeOffset?> TimedOutUntil { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the flags of the guild member.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Not all flags can be modified, these are reserved for Discord.
|
||||
/// </remarks>
|
||||
public Optional<GuildUserFlags> Flags { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,6 +111,11 @@ namespace Discord
|
||||
/// </returns>
|
||||
DateTimeOffset? TimedOutUntil { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the public flags for this guild member.
|
||||
/// </summary>
|
||||
GuildUserFlags Flags { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the level permissions granted to this user to a given channel.
|
||||
/// </summary>
|
||||
|
||||
@@ -25,5 +25,8 @@ namespace Discord.API
|
||||
public Optional<DateTimeOffset?> PremiumSince { get; set; }
|
||||
[JsonProperty("communication_disabled_until")]
|
||||
public Optional<DateTimeOffset?> TimedOutUntil { get; set; }
|
||||
|
||||
[JsonProperty("flags")]
|
||||
public GuildUserFlags Flags { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,5 +18,8 @@ namespace Discord.API.Rest
|
||||
public Optional<ulong?> ChannelId { get; set; }
|
||||
[JsonProperty("communication_disabled_until")]
|
||||
public Optional<DateTimeOffset?> TimedOutUntil { get; set; }
|
||||
|
||||
[JsonProperty("flags")]
|
||||
public Optional<GuildUserFlags> Flags { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,6 +38,10 @@ namespace Discord.Rest
|
||||
public ulong GuildId { get; }
|
||||
/// <inheritdoc />
|
||||
public bool? IsPending { get; private set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public GuildUserFlags Flags { get; private set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public int Hierarchy
|
||||
{
|
||||
@@ -114,6 +118,7 @@ namespace Discord.Rest
|
||||
_timedOutTicks = model.TimedOutUntil.Value?.UtcTicks;
|
||||
if (model.Pending.IsSpecified)
|
||||
IsPending = model.Pending.Value;
|
||||
Flags = model.Flags;
|
||||
}
|
||||
private void UpdateRoles(ulong[] roleIds)
|
||||
{
|
||||
|
||||
@@ -71,6 +71,8 @@ namespace Discord.Rest
|
||||
DateTimeOffset? IGuildUser.TimedOutUntil => null;
|
||||
/// <inheritdoc />
|
||||
GuildPermissions IGuildUser.GuildPermissions => GuildPermissions.Webhook;
|
||||
/// <inheritdoc />
|
||||
GuildUserFlags IGuildUser.Flags => GuildUserFlags.None;
|
||||
|
||||
/// <inheritdoc />
|
||||
ChannelPermissions IGuildUser.GetPermissions(IGuildChannel channel) => Permissions.ToChannelPerms(channel, GuildPermissions.Webhook.RawValue);
|
||||
|
||||
@@ -40,7 +40,8 @@ namespace Discord.Rest
|
||||
Deaf = args.Deaf,
|
||||
Mute = args.Mute,
|
||||
Nickname = args.Nickname,
|
||||
TimedOutUntil = args.TimedOutUntil
|
||||
TimedOutUntil = args.TimedOutUntil,
|
||||
Flags = args.Flags
|
||||
};
|
||||
|
||||
if (args.Channel.IsSpecified)
|
||||
|
||||
@@ -71,6 +71,8 @@ namespace Discord.WebSocket
|
||||
/// <inheritdoc />
|
||||
public bool? IsPending { get; private set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public GuildUserFlags Flags { get; private set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public DateTimeOffset? JoinedAt => DateTimeUtils.FromTicks(_joinedAtTicks);
|
||||
@@ -179,6 +181,8 @@ namespace Discord.WebSocket
|
||||
_timedOutTicks = model.TimedOutUntil.Value?.UtcTicks;
|
||||
if (model.Pending.IsSpecified)
|
||||
IsPending = model.Pending.Value;
|
||||
|
||||
Flags = model.Flags;
|
||||
}
|
||||
internal void Update(ClientState state, PresenceModel model, bool updatePresence)
|
||||
{
|
||||
|
||||
@@ -126,6 +126,10 @@ namespace Discord.WebSocket
|
||||
public bool IsVideoing
|
||||
=> GuildUser.IsVideoing;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public GuildUserFlags Flags
|
||||
=> GuildUser.Flags;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public DateTimeOffset? RequestToSpeakTimestamp
|
||||
=> GuildUser.RequestToSpeakTimestamp;
|
||||
|
||||
@@ -84,6 +84,8 @@ namespace Discord.WebSocket
|
||||
int IGuildUser.Hierarchy => 0;
|
||||
/// <inheritdoc />
|
||||
GuildPermissions IGuildUser.GuildPermissions => GuildPermissions.Webhook;
|
||||
/// <inheritdoc />
|
||||
GuildUserFlags IGuildUser.Flags => GuildUserFlags.None;
|
||||
|
||||
/// <inheritdoc />
|
||||
ChannelPermissions IGuildUser.GetPermissions(IGuildChannel channel) => Permissions.ToChannelPerms(channel, GuildPermissions.Webhook.RawValue);
|
||||
|
||||
Reference in New Issue
Block a user