From c21d0979f50c34554c88ec05582fe07b7a80f943 Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 22 Apr 2020 08:40:06 -0300 Subject: [PATCH] Add two new fields to the gateway event --- .../Entities/Invites/TargetUserType.cs | 8 ++++++++ .../API/Gateway/InviteCreateEvent.cs | 4 ++++ src/Discord.Net.WebSocket/DiscordSocketClient.cs | 10 +++++++++- .../Entities/Invites/SocketInvite.cs | 16 +++++++++++++--- 4 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 src/Discord.Net.Core/Entities/Invites/TargetUserType.cs diff --git a/src/Discord.Net.Core/Entities/Invites/TargetUserType.cs b/src/Discord.Net.Core/Entities/Invites/TargetUserType.cs new file mode 100644 index 000000000..5c7d10bc3 --- /dev/null +++ b/src/Discord.Net.Core/Entities/Invites/TargetUserType.cs @@ -0,0 +1,8 @@ +namespace Discord +{ + public enum TargetUserType + { + /// The invite is for a Go Live stream. + Stream = 1 + } +} diff --git a/src/Discord.Net.WebSocket/API/Gateway/InviteCreateEvent.cs b/src/Discord.Net.WebSocket/API/Gateway/InviteCreateEvent.cs index e58e985fb..e2ddd8816 100644 --- a/src/Discord.Net.WebSocket/API/Gateway/InviteCreateEvent.cs +++ b/src/Discord.Net.WebSocket/API/Gateway/InviteCreateEvent.cs @@ -19,6 +19,10 @@ namespace Discord.API.Gateway public int MaxAge { get; set; } [JsonProperty("max_uses")] public int MaxUses { get; set; } + [JsonProperty("target_user")] + public Optional TargetUser { get; set; } + [JsonProperty("target_user_type")] + public Optional TargetUserType { get; set; } [JsonProperty("temporary")] public bool Temporary { get; set; } [JsonProperty("uses")] diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index a04765485..dd1763afe 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -1658,7 +1658,15 @@ namespace Discord.WebSocket inviter = guild.AddOrUpdateUser(data.Inviter.Value); } - var invite = SocketInvite.Create(this, guild, channel, inviter, data); + SocketUser target = null; + if (data.TargetUser.IsSpecified) + { + target = guild.GetUser(data.TargetUser.Value.Id); + if (target == null) + target = SocketUnknownUser.Create(this, State, data.TargetUser.Value); + } + + var invite = SocketInvite.Create(this, guild, channel, inviter, target, data); await TimedInvokeAsync(_inviteCreatedEvent, nameof(InviteCreated), invite).ConfigureAwait(false); } diff --git a/src/Discord.Net.WebSocket/Entities/Invites/SocketInvite.cs b/src/Discord.Net.WebSocket/Entities/Invites/SocketInvite.cs index 8c31ede6d..0bc471b0e 100644 --- a/src/Discord.Net.WebSocket/Entities/Invites/SocketInvite.cs +++ b/src/Discord.Net.WebSocket/Entities/Invites/SocketInvite.cs @@ -80,22 +80,31 @@ namespace Discord.WebSocket /// Gets when this invite was created. /// public DateTimeOffset CreatedAt => DateTimeUtils.FromTicks(_createdAtTicks); + /// + /// Gets the user targeted by this invite if available. + /// + public SocketUser TargetUser { get; private set; } + /// + /// Gets the type of the user targeted by this invite if available. + /// + public TargetUserType? TargetUserType { get; private set; } /// public string Code => Id; /// public string Url => $"{DiscordConfig.InviteUrl}{Code}"; - internal SocketInvite(DiscordSocketClient discord, SocketGuild guild, SocketGuildChannel channel, SocketGuildUser inviter, string id) + internal SocketInvite(DiscordSocketClient discord, SocketGuild guild, SocketGuildChannel channel, SocketGuildUser inviter, SocketUser target, string id) : base(discord, id) { Guild = guild; Channel = channel; Inviter = inviter; + TargetUser = target; } - internal static SocketInvite Create(DiscordSocketClient discord, SocketGuild guild, SocketGuildChannel channel, SocketGuildUser inviter, Model model) + internal static SocketInvite Create(DiscordSocketClient discord, SocketGuild guild, SocketGuildChannel channel, SocketGuildUser inviter, SocketUser target, Model model) { - var entity = new SocketInvite(discord, guild, channel, inviter, model.Code); + var entity = new SocketInvite(discord, guild, channel, inviter, target, model.Code); entity.Update(model); return entity; } @@ -108,6 +117,7 @@ namespace Discord.WebSocket MaxUses = model.MaxUses; Uses = model.Uses; _createdAtTicks = model.CreatedAt.UtcTicks; + TargetUserType = model.TargetUserType.IsSpecified ? model.TargetUserType.Value : default(TargetUserType?); } ///