@@ -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 leave 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. | /// <see langword="null"/> or a time in the past to clear a currently existing timeout. | ||||
/// </remarks> | /// </remarks> | ||||
public Optional<DateTimeOffset?> TimedOutUntil { get; set; } | public Optional<DateTimeOffset?> TimedOutUntil { get; set; } | ||||
/// <summary> | |||||
/// Gets or sets the flags of the guild member. | |||||
/// </summary> | |||||
/// <remarks> | |||||
/// Not all flags can be modified and are reserved for Discord. | |||||
/// </remarks> | |||||
public Optional<GuildUserFlags> Flags { get; set; } | |||||
} | } | ||||
} | } |
@@ -111,6 +111,11 @@ namespace Discord | |||||
/// </returns> | /// </returns> | ||||
DateTimeOffset? TimedOutUntil { get; } | DateTimeOffset? TimedOutUntil { get; } | ||||
/// <summary> | |||||
/// Gets the public flags for this guild member. | |||||
/// </summary> | |||||
GuildUserFlags Flags { get; } | |||||
/// <summary> | /// <summary> | ||||
/// Gets the level permissions granted to this user to a given channel. | /// Gets the level permissions granted to this user to a given channel. | ||||
/// </summary> | /// </summary> | ||||
@@ -25,5 +25,8 @@ namespace Discord.API | |||||
public Optional<DateTimeOffset?> PremiumSince { get; set; } | public Optional<DateTimeOffset?> PremiumSince { get; set; } | ||||
[JsonProperty("communication_disabled_until")] | [JsonProperty("communication_disabled_until")] | ||||
public Optional<DateTimeOffset?> TimedOutUntil { get; set; } | 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; } | public Optional<ulong?> ChannelId { get; set; } | ||||
[JsonProperty("communication_disabled_until")] | [JsonProperty("communication_disabled_until")] | ||||
public Optional<DateTimeOffset?> TimedOutUntil { get; set; } | 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; } | public ulong GuildId { get; } | ||||
/// <inheritdoc /> | /// <inheritdoc /> | ||||
public bool? IsPending { get; private set; } | public bool? IsPending { get; private set; } | ||||
/// <inheritdoc /> | |||||
public GuildUserFlags Flags { get; private set; } | |||||
/// <inheritdoc /> | /// <inheritdoc /> | ||||
public int Hierarchy | public int Hierarchy | ||||
{ | { | ||||
@@ -114,6 +118,7 @@ namespace Discord.Rest | |||||
_timedOutTicks = model.TimedOutUntil.Value?.UtcTicks; | _timedOutTicks = model.TimedOutUntil.Value?.UtcTicks; | ||||
if (model.Pending.IsSpecified) | if (model.Pending.IsSpecified) | ||||
IsPending = model.Pending.Value; | IsPending = model.Pending.Value; | ||||
Flags = model.Flags; | |||||
} | } | ||||
private void UpdateRoles(ulong[] roleIds) | private void UpdateRoles(ulong[] roleIds) | ||||
{ | { | ||||
@@ -71,6 +71,8 @@ namespace Discord.Rest | |||||
DateTimeOffset? IGuildUser.TimedOutUntil => null; | DateTimeOffset? IGuildUser.TimedOutUntil => null; | ||||
/// <inheritdoc /> | /// <inheritdoc /> | ||||
GuildPermissions IGuildUser.GuildPermissions => GuildPermissions.Webhook; | GuildPermissions IGuildUser.GuildPermissions => GuildPermissions.Webhook; | ||||
/// <inheritdoc /> | |||||
GuildUserFlags IGuildUser.Flags => GuildUserFlags.None; | |||||
/// <inheritdoc /> | /// <inheritdoc /> | ||||
ChannelPermissions IGuildUser.GetPermissions(IGuildChannel channel) => Permissions.ToChannelPerms(channel, GuildPermissions.Webhook.RawValue); | ChannelPermissions IGuildUser.GetPermissions(IGuildChannel channel) => Permissions.ToChannelPerms(channel, GuildPermissions.Webhook.RawValue); | ||||
@@ -40,7 +40,8 @@ namespace Discord.Rest | |||||
Deaf = args.Deaf, | Deaf = args.Deaf, | ||||
Mute = args.Mute, | Mute = args.Mute, | ||||
Nickname = args.Nickname, | Nickname = args.Nickname, | ||||
TimedOutUntil = args.TimedOutUntil | |||||
TimedOutUntil = args.TimedOutUntil, | |||||
Flags = args.Flags | |||||
}; | }; | ||||
if (args.Channel.IsSpecified) | if (args.Channel.IsSpecified) | ||||
@@ -71,6 +71,8 @@ namespace Discord.WebSocket | |||||
/// <inheritdoc /> | /// <inheritdoc /> | ||||
public bool? IsPending { get; private set; } | public bool? IsPending { get; private set; } | ||||
/// <inheritdoc /> | |||||
public GuildUserFlags Flags { get; private set; } | |||||
/// <inheritdoc /> | /// <inheritdoc /> | ||||
public DateTimeOffset? JoinedAt => DateTimeUtils.FromTicks(_joinedAtTicks); | public DateTimeOffset? JoinedAt => DateTimeUtils.FromTicks(_joinedAtTicks); | ||||
@@ -179,6 +181,8 @@ namespace Discord.WebSocket | |||||
_timedOutTicks = model.TimedOutUntil.Value?.UtcTicks; | _timedOutTicks = model.TimedOutUntil.Value?.UtcTicks; | ||||
if (model.Pending.IsSpecified) | if (model.Pending.IsSpecified) | ||||
IsPending = model.Pending.Value; | IsPending = model.Pending.Value; | ||||
Flags = model.Flags; | |||||
} | } | ||||
internal void Update(ClientState state, PresenceModel model, bool updatePresence) | internal void Update(ClientState state, PresenceModel model, bool updatePresence) | ||||
{ | { | ||||
@@ -126,6 +126,10 @@ namespace Discord.WebSocket | |||||
public bool IsVideoing | public bool IsVideoing | ||||
=> GuildUser.IsVideoing; | => GuildUser.IsVideoing; | ||||
/// <inheritdoc/> | |||||
public GuildUserFlags Flags | |||||
=> GuildUser.Flags; | |||||
/// <inheritdoc/> | /// <inheritdoc/> | ||||
public DateTimeOffset? RequestToSpeakTimestamp | public DateTimeOffset? RequestToSpeakTimestamp | ||||
=> GuildUser.RequestToSpeakTimestamp; | => GuildUser.RequestToSpeakTimestamp; | ||||
@@ -84,6 +84,8 @@ namespace Discord.WebSocket | |||||
int IGuildUser.Hierarchy => 0; | int IGuildUser.Hierarchy => 0; | ||||
/// <inheritdoc /> | /// <inheritdoc /> | ||||
GuildPermissions IGuildUser.GuildPermissions => GuildPermissions.Webhook; | GuildPermissions IGuildUser.GuildPermissions => GuildPermissions.Webhook; | ||||
/// <inheritdoc /> | |||||
GuildUserFlags IGuildUser.Flags => GuildUserFlags.None; | |||||
/// <inheritdoc /> | /// <inheritdoc /> | ||||
ChannelPermissions IGuildUser.GetPermissions(IGuildChannel channel) => Permissions.ToChannelPerms(channel, GuildPermissions.Webhook.RawValue); | ChannelPermissions IGuildUser.GetPermissions(IGuildChannel channel) => Permissions.ToChannelPerms(channel, GuildPermissions.Webhook.RawValue); | ||||