diff --git a/src/Discord.Net.Core/Entities/Interactions/MessageInteractionData/ApplicationCommandInteractionMetadata.cs b/src/Discord.Net.Core/Entities/Interactions/MessageInteractionData/ApplicationCommandInteractionMetadata.cs
index 11e5d480..30b55b48 100644
--- a/src/Discord.Net.Core/Entities/Interactions/MessageInteractionData/ApplicationCommandInteractionMetadata.cs
+++ b/src/Discord.Net.Core/Entities/Interactions/MessageInteractionData/ApplicationCommandInteractionMetadata.cs
@@ -20,6 +20,9 @@ public readonly struct ApplicationCommandInteractionMetadata : IMessageInteracti
///
public ulong UserId { get; }
+ ///
+ public IUser User { get; }
+
///
public IReadOnlyDictionary IntegrationOwners { get; }
@@ -32,7 +35,7 @@ public readonly struct ApplicationCommandInteractionMetadata : IMessageInteracti
public string Name { get; }
internal ApplicationCommandInteractionMetadata(ulong id, InteractionType type, ulong userId, IReadOnlyDictionary integrationOwners,
- ulong? originalResponseMessageId, string name)
+ ulong? originalResponseMessageId, string name, IUser user)
{
Id = id;
Type = type;
@@ -40,5 +43,6 @@ public readonly struct ApplicationCommandInteractionMetadata : IMessageInteracti
IntegrationOwners = integrationOwners;
OriginalResponseMessageId = originalResponseMessageId;
Name = name;
+ User = user;
}
}
diff --git a/src/Discord.Net.Core/Entities/Interactions/MessageInteractionData/IMessageInteractionData.cs b/src/Discord.Net.Core/Entities/Interactions/MessageInteractionData/IMessageInteractionData.cs
index 61c3231b..7661c519 100644
--- a/src/Discord.Net.Core/Entities/Interactions/MessageInteractionData/IMessageInteractionData.cs
+++ b/src/Discord.Net.Core/Entities/Interactions/MessageInteractionData/IMessageInteractionData.cs
@@ -17,6 +17,11 @@ public interface IMessageInteractionMetadata : ISnowflakeEntity
///
ulong UserId { get; }
+ ///
+ /// Gets the user who triggered the interaction.
+ ///
+ IUser User { get; }
+
///
/// Gets the Ids for installation contexts related to the interaction.
///
diff --git a/src/Discord.Net.Core/Entities/Interactions/MessageInteractionData/MessageComponentInteractionMetadata.cs b/src/Discord.Net.Core/Entities/Interactions/MessageInteractionData/MessageComponentInteractionMetadata.cs
index f9f4455f..f04e4ddc 100644
--- a/src/Discord.Net.Core/Entities/Interactions/MessageInteractionData/MessageComponentInteractionMetadata.cs
+++ b/src/Discord.Net.Core/Entities/Interactions/MessageInteractionData/MessageComponentInteractionMetadata.cs
@@ -20,6 +20,9 @@ public readonly struct MessageComponentInteractionMetadata : IMessageInteraction
///
public ulong UserId { get; }
+ ///
+ public IUser User { get; }
+
///
public IReadOnlyDictionary IntegrationOwners { get; }
@@ -32,7 +35,7 @@ public readonly struct MessageComponentInteractionMetadata : IMessageInteraction
public ulong InteractedMessageId { get; }
internal MessageComponentInteractionMetadata(ulong id, InteractionType type, ulong userId, IReadOnlyDictionary integrationOwners,
- ulong? originalResponseMessageId, ulong interactedMessageId)
+ ulong? originalResponseMessageId, ulong interactedMessageId, IUser user)
{
Id = id;
Type = type;
@@ -40,6 +43,7 @@ public readonly struct MessageComponentInteractionMetadata : IMessageInteraction
IntegrationOwners = integrationOwners;
OriginalResponseMessageId = originalResponseMessageId;
InteractedMessageId = interactedMessageId;
+ User = user;
}
}
diff --git a/src/Discord.Net.Core/Entities/Interactions/MessageInteractionData/ModalInteractionMetadata.cs b/src/Discord.Net.Core/Entities/Interactions/MessageInteractionData/ModalInteractionMetadata.cs
index 12306e6f..792f89cd 100644
--- a/src/Discord.Net.Core/Entities/Interactions/MessageInteractionData/ModalInteractionMetadata.cs
+++ b/src/Discord.Net.Core/Entities/Interactions/MessageInteractionData/ModalInteractionMetadata.cs
@@ -20,6 +20,9 @@ public readonly struct ModalSubmitInteractionMetadata :IMessageInteractionMetada
///
public ulong UserId { get; }
+ ///
+ public IUser User { get; }
+
///
public IReadOnlyDictionary IntegrationOwners { get; }
@@ -32,7 +35,7 @@ public readonly struct ModalSubmitInteractionMetadata :IMessageInteractionMetada
public IMessageInteractionMetadata TriggeringInteractionMetadata { get; }
internal ModalSubmitInteractionMetadata(ulong id, InteractionType type, ulong userId, IReadOnlyDictionary integrationOwners,
- ulong? originalResponseMessageId, IMessageInteractionMetadata triggeringInteractionMetadata)
+ ulong? originalResponseMessageId, IMessageInteractionMetadata triggeringInteractionMetadata, IUser user)
{
Id = id;
Type = type;
@@ -40,5 +43,6 @@ public readonly struct ModalSubmitInteractionMetadata :IMessageInteractionMetada
IntegrationOwners = integrationOwners;
OriginalResponseMessageId = originalResponseMessageId;
TriggeringInteractionMetadata = triggeringInteractionMetadata;
+ User = user;
}
}
diff --git a/src/Discord.Net.Rest/API/Common/MessageInteractionMetadata.cs b/src/Discord.Net.Rest/API/Common/MessageInteractionMetadata.cs
index f5f88665..8d35243b 100644
--- a/src/Discord.Net.Rest/API/Common/MessageInteractionMetadata.cs
+++ b/src/Discord.Net.Rest/API/Common/MessageInteractionMetadata.cs
@@ -10,9 +10,9 @@ internal class MessageInteractionMetadata
[JsonProperty("type")]
public InteractionType Type { get; set; }
-
- [JsonProperty("user_id")]
- public ulong UserId { get; set; }
+
+ [JsonProperty("user")]
+ public User User { get; set; }
[JsonProperty("authorizing_integration_owners")]
public Dictionary IntegrationOwners { get; set; }
diff --git a/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs b/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs
index fb1840ff..a081336c 100644
--- a/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs
+++ b/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs
@@ -118,6 +118,7 @@ namespace Discord.Rest
if (model.Type == MessageType.Default ||
model.Type == MessageType.Reply ||
model.Type == MessageType.ApplicationCommand ||
+ model.Type == MessageType.ContextMenuCommand ||
model.Type == MessageType.ThreadStarterMessage)
return RestUserMessage.Create(discord, channel, author, model);
else
diff --git a/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs b/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs
index 4144e2c3..985798a5 100644
--- a/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs
+++ b/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs
@@ -169,7 +169,7 @@ namespace Discord.Rest
ResolvedData = new MessageResolvedData(users, members, roles, channels);
}
if (model.InteractionMetadata.IsSpecified)
- InteractionMetadata = model.InteractionMetadata.Value.ToInteractionMetadata();
+ InteractionMetadata = model.InteractionMetadata.Value.ToInteractionMetadata(Discord);
if (model.Poll.IsSpecified)
Poll = model.Poll.Value.ToEntity();
diff --git a/src/Discord.Net.Rest/Extensions/InteractionMetadataExtensions.cs b/src/Discord.Net.Rest/Extensions/InteractionMetadataExtensions.cs
index 547bd3f9..a16d9f5f 100644
--- a/src/Discord.Net.Rest/Extensions/InteractionMetadataExtensions.cs
+++ b/src/Discord.Net.Rest/Extensions/InteractionMetadataExtensions.cs
@@ -4,7 +4,7 @@ namespace Discord.Rest;
internal static class InteractionMetadataExtensions
{
- public static IMessageInteractionMetadata ToInteractionMetadata(this API.MessageInteractionMetadata metadata)
+ public static IMessageInteractionMetadata ToInteractionMetadata(this API.MessageInteractionMetadata metadata, BaseDiscordClient discord)
{
switch (metadata.Type)
{
@@ -12,28 +12,31 @@ internal static class InteractionMetadataExtensions
return new ApplicationCommandInteractionMetadata(
metadata.Id,
metadata.Type,
- metadata.UserId,
+ metadata.User.Id,
metadata.IntegrationOwners.ToImmutableDictionary(),
metadata.OriginalResponseMessageId.IsSpecified ? metadata.OriginalResponseMessageId.Value : null,
- metadata.Name.GetValueOrDefault(null));
+ metadata.Name.GetValueOrDefault(null),
+ RestUser.Create(discord, metadata.User));
case InteractionType.MessageComponent:
return new MessageComponentInteractionMetadata(
metadata.Id,
metadata.Type,
- metadata.UserId,
+ metadata.User.Id,
metadata.IntegrationOwners.ToImmutableDictionary(),
metadata.OriginalResponseMessageId.IsSpecified ? metadata.OriginalResponseMessageId.Value : null,
- metadata.InteractedMessageId.GetValueOrDefault(0));
+ metadata.InteractedMessageId.GetValueOrDefault(0),
+ RestUser.Create(discord, metadata.User));
case InteractionType.ModalSubmit:
return new ModalSubmitInteractionMetadata(
metadata.Id,
metadata.Type,
- metadata.UserId,
+ metadata.User.Id,
metadata.IntegrationOwners.ToImmutableDictionary(),
metadata.OriginalResponseMessageId.IsSpecified ? metadata.OriginalResponseMessageId.Value : null,
- metadata.TriggeringInteractionMetadata.GetValueOrDefault(null)?.ToInteractionMetadata());
+ metadata.TriggeringInteractionMetadata.GetValueOrDefault(null)?.ToInteractionMetadata(discord),
+ RestUser.Create(discord, metadata.User));
default:
return null;
diff --git a/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs b/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs
index 58026e70..34af97d8 100644
--- a/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs
+++ b/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs
@@ -211,7 +211,7 @@ namespace Discord.WebSocket
}
if (model.InteractionMetadata.IsSpecified)
- InteractionMetadata = model.InteractionMetadata.Value.ToInteractionMetadata();
+ InteractionMetadata = model.InteractionMetadata.Value.ToInteractionMetadata(Discord);
if (model.Poll.IsSpecified)
Poll = model.Poll.Value.ToEntity();