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?);
}
///