@@ -20,6 +20,13 @@ namespace Discord | |||
/// </returns> | |||
string Url { get; } | |||
/// <summary> | |||
/// Gets the user that created this invite. | |||
/// </summary> | |||
/// <returns> | |||
/// A user that created this invite. | |||
/// </returns> | |||
IUser Inviter { get; } | |||
/// <summary> | |||
/// Gets the channel this invite is linked to. | |||
/// </summary> | |||
@@ -83,5 +90,19 @@ namespace Discord | |||
/// invite points to; <c>null</c> if one cannot be obtained. | |||
/// </returns> | |||
int? MemberCount { get; } | |||
/// <summary> | |||
/// Gets the user this invite is linked to via <see cref="TargetUserType"/>. | |||
/// </summary> | |||
/// <returns> | |||
/// A user that is linked to this invite. | |||
/// </returns> | |||
IUser TargetUser { get; } | |||
/// <summary> | |||
/// Gets the type of the linked <see cref="TargetUser"/> for this invite. | |||
/// </summary> | |||
/// <returns> | |||
/// The type of the linked user that is linked to this invite. | |||
/// </returns> | |||
TargetUserType TargetUserType { get; } | |||
} | |||
} |
@@ -7,20 +7,6 @@ namespace Discord | |||
/// </summary> | |||
public interface IInviteMetadata : IInvite | |||
{ | |||
/// <summary> | |||
/// Gets the user that created this invite. | |||
/// </summary> | |||
/// <returns> | |||
/// A user that created this invite. | |||
/// </returns> | |||
IUser Inviter { get; } | |||
/// <summary> | |||
/// Gets a value that indicates whether the invite has been revoked. | |||
/// </summary> | |||
/// <returns> | |||
/// <c>true</c> if this invite was revoked; otherwise <c>false</c>. | |||
/// </returns> | |||
bool IsRevoked { get; } | |||
/// <summary> | |||
/// Gets a value that indicates whether the invite is a temporary one. | |||
/// </summary> | |||
@@ -36,7 +22,7 @@ namespace Discord | |||
/// An <see cref="int"/> representing the time in seconds until this invite expires; <c>null</c> if this | |||
/// invite never expires. | |||
/// </returns> | |||
int? MaxAge { get; } | |||
int MaxAge { get; } | |||
/// <summary> | |||
/// Gets the max number of uses this invite may have. | |||
/// </summary> | |||
@@ -44,20 +30,20 @@ namespace Discord | |||
/// An <see cref="int"/> representing the number of uses this invite may be accepted until it is removed | |||
/// from the guild; <c>null</c> if none is set. | |||
/// </returns> | |||
int? MaxUses { get; } | |||
int MaxUses { get; } | |||
/// <summary> | |||
/// Gets the number of times this invite has been used. | |||
/// </summary> | |||
/// <returns> | |||
/// An <see cref="int"/> representing the number of times this invite has been used. | |||
/// </returns> | |||
int? Uses { get; } | |||
int Uses { get; } | |||
/// <summary> | |||
/// Gets when this invite was created. | |||
/// </summary> | |||
/// <returns> | |||
/// A <see cref="DateTimeOffset"/> representing the time of which the invite was first created. | |||
/// </returns> | |||
DateTimeOffset? CreatedAt { get; } | |||
DateTimeOffset CreatedAt { get; } | |||
} | |||
} |
@@ -0,0 +1,14 @@ | |||
namespace Discord | |||
{ | |||
public enum TargetUserType | |||
{ | |||
/// <summary> | |||
/// The invite whose target user type is not defined. | |||
/// </summary> | |||
Undefined = 0, | |||
/// <summary> | |||
/// The invite is for a Go Live stream. | |||
/// </summary> | |||
Stream = 1 | |||
} | |||
} |
@@ -11,9 +11,15 @@ namespace Discord.API | |||
public Optional<InviteGuild> Guild { get; set; } | |||
[JsonProperty("channel")] | |||
public InviteChannel Channel { get; set; } | |||
[JsonProperty("inviter")] | |||
public Optional<User> Inviter { get; set; } | |||
[JsonProperty("approximate_presence_count")] | |||
public Optional<int?> PresenceCount { get; set; } | |||
[JsonProperty("approximate_member_count")] | |||
public Optional<int?> MemberCount { get; set; } | |||
[JsonProperty("target_user")] | |||
public Optional<User> TargetUser { get; set; } | |||
[JsonProperty("target_user_type")] | |||
public Optional<TargetUserType> TargetUserType { get; set; } | |||
} | |||
} |
@@ -6,19 +6,15 @@ namespace Discord.API | |||
{ | |||
internal class InviteMetadata : Invite | |||
{ | |||
[JsonProperty("inviter")] | |||
public User Inviter { get; set; } | |||
[JsonProperty("uses")] | |||
public Optional<int> Uses { get; set; } | |||
public int Uses { get; set; } | |||
[JsonProperty("max_uses")] | |||
public Optional<int> MaxUses { get; set; } | |||
public int MaxUses { get; set; } | |||
[JsonProperty("max_age")] | |||
public Optional<int> MaxAge { get; set; } | |||
public int MaxAge { get; set; } | |||
[JsonProperty("temporary")] | |||
public bool Temporary { get; set; } | |||
[JsonProperty("created_at")] | |||
public Optional<DateTimeOffset> CreatedAt { get; set; } | |||
[JsonProperty("revoked")] | |||
public bool Revoked { get; set; } | |||
public DateTimeOffset CreatedAt { get; set; } | |||
} | |||
} |
@@ -21,6 +21,12 @@ namespace Discord.Rest | |||
public ulong ChannelId { get; private set; } | |||
/// <inheritdoc /> | |||
public ulong? GuildId { get; private set; } | |||
/// <inheritdoc /> | |||
public IUser Inviter { get; private set; } | |||
/// <inheritdoc /> | |||
public IUser TargetUser { get; private set; } | |||
/// <inheritdoc /> | |||
public TargetUserType TargetUserType { get; private set; } | |||
internal IChannel Channel { get; } | |||
internal IGuild Guild { get; } | |||
@@ -50,6 +56,9 @@ namespace Discord.Rest | |||
MemberCount = model.MemberCount.IsSpecified ? model.MemberCount.Value : null; | |||
PresenceCount = model.PresenceCount.IsSpecified ? model.PresenceCount.Value : null; | |||
ChannelType = (ChannelType)model.Channel.Type; | |||
Inviter = model.Inviter.IsSpecified ? RestUser.Create(Discord, model.Inviter.Value) : null; | |||
TargetUser = model.TargetUser.IsSpecified ? RestUser.Create(Discord, model.TargetUser.Value) : null; | |||
TargetUserType = model.TargetUserType.IsSpecified ? model.TargetUserType.Value : TargetUserType.Undefined; | |||
} | |||
/// <inheritdoc /> | |||
@@ -6,25 +6,19 @@ namespace Discord.Rest | |||
/// <summary> Represents additional information regarding the REST-based invite object. </summary> | |||
public class RestInviteMetadata : RestInvite, IInviteMetadata | |||
{ | |||
private long? _createdAtTicks; | |||
private long _createdAtTicks; | |||
/// <inheritdoc /> | |||
public bool IsRevoked { get; private set; } | |||
/// <inheritdoc /> | |||
public bool IsTemporary { get; private set; } | |||
/// <inheritdoc /> | |||
public int? MaxAge { get; private set; } | |||
public int MaxAge { get; private set; } | |||
/// <inheritdoc /> | |||
public int? MaxUses { get; private set; } | |||
public int MaxUses { get; private set; } | |||
/// <inheritdoc /> | |||
public int? Uses { get; private set; } | |||
/// <summary> | |||
/// Gets the user that created this invite. | |||
/// </summary> | |||
public RestUser Inviter { get; private set; } | |||
public int Uses { get; private set; } | |||
/// <inheritdoc /> | |||
public DateTimeOffset? CreatedAt => DateTimeUtils.FromTicks(_createdAtTicks); | |||
public DateTimeOffset CreatedAt => DateTimeUtils.FromTicks(_createdAtTicks); | |||
internal RestInviteMetadata(BaseDiscordClient discord, IGuild guild, IChannel channel, string id) | |||
: base(discord, guild, channel, id) | |||
@@ -39,16 +33,11 @@ namespace Discord.Rest | |||
internal void Update(Model model) | |||
{ | |||
base.Update(model); | |||
Inviter = model.Inviter != null ? RestUser.Create(Discord, model.Inviter) : null; | |||
IsRevoked = model.Revoked; | |||
IsTemporary = model.Temporary; | |||
MaxAge = model.MaxAge.IsSpecified ? model.MaxAge.Value : (int?)null; | |||
MaxUses = model.MaxUses.IsSpecified ? model.MaxUses.Value : (int?)null; | |||
Uses = model.Uses.IsSpecified ? model.Uses.Value : (int?)null; | |||
_createdAtTicks = model.CreatedAt.IsSpecified ? model.CreatedAt.Value.UtcTicks : (long?)null; | |||
MaxAge = model.MaxAge; | |||
MaxUses = model.MaxUses; | |||
Uses = model.Uses; | |||
_createdAtTicks = model.CreatedAt.UtcTicks; | |||
} | |||
/// <inheritdoc /> | |||
IUser IInviteMetadata.Inviter => Inviter; | |||
} | |||
} |