Browse Source

Add components to messages

pull/1923/head
quin lynch 4 years ago
parent
commit
edc0bf35ae
4 changed files with 35 additions and 3 deletions
  1. +4
    -0
      src/Discord.Net.Core/Entities/Messages/IMessage.cs
  2. +2
    -0
      src/Discord.Net.Rest/API/Common/Message.cs
  3. +15
    -2
      src/Discord.Net.Rest/Entities/Messages/RestMessage.cs
  4. +14
    -1
      src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs

+ 4
- 0
src/Discord.Net.Core/Entities/Messages/IMessage.cs View File

@@ -164,6 +164,10 @@ namespace Discord
/// </summary>
IReadOnlyDictionary<IEmote, ReactionMetadata> Reactions { get; }

/// <summary>
/// The <see cref="IMessageComponent"/>'s attached to this message
/// </summary>
IReadOnlyCollection<IMessageComponent> Components { get; }
/// <summary>
/// Adds a reaction to this message.
/// </summary>


+ 2
- 0
src/Discord.Net.Rest/API/Common/Message.cs View File

@@ -58,5 +58,7 @@ namespace Discord.API
public Optional<AllowedMentions> AllowedMentions { get; set; }
[JsonProperty("referenced_message")]
public Optional<Message> ReferencedMessage { get; set; }
[JsonProperty("components")]
public Optional<IMessageComponent[]> Components { get; set; }
}
}

+ 15
- 2
src/Discord.Net.Rest/Entities/Messages/RestMessage.cs View File

@@ -68,6 +68,9 @@ namespace Discord.Rest
/// <inheritdoc />
public MessageReference Reference { get; private set; }

/// <inheritdoc/>
public IReadOnlyCollection<ActionRowComponent> Components { get; private set; }

internal RestMessage(BaseDiscordClient discord, ulong id, IMessageChannel channel, IUser author, MessageSource source)
: base(discord, id)
{
@@ -113,7 +116,7 @@ namespace Discord.Rest
};
}

if(model.Reference.IsSpecified)
if (model.Reference.IsSpecified)
{
// Creates a new Reference from the API model
Reference = new MessageReference
@@ -124,6 +127,15 @@ namespace Discord.Rest
};
}

if (model.Components.IsSpecified)
{
Components = model.Components.Value.Select(x =>
(x as Newtonsoft.Json.Linq.JToken).ToObject<ActionRowComponent>()
).ToList();
}
else
Components = new List<ActionRowComponent>();

if (model.Reactions.IsSpecified)
{
var value = model.Reactions.Value;
@@ -168,7 +180,8 @@ namespace Discord.Rest
IReadOnlyCollection<IEmbed> IMessage.Embeds => Embeds;
/// <inheritdoc />
IReadOnlyCollection<ulong> IMessage.MentionedUserIds => MentionedUsers.Select(x => x.Id).ToImmutableArray();

/// <inheritdoc/>
IReadOnlyCollection<IMessageComponent> IMessage.Components => Components;
/// <inheritdoc />
public IReadOnlyDictionary<IEmote, ReactionMetadata> Reactions => _reactions.ToDictionary(x => x.Emote, x => new ReactionMetadata { ReactionCount = x.Count, IsMe = x.Me });



+ 14
- 1
src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs View File

@@ -58,6 +58,9 @@ namespace Discord.WebSocket
/// <inheritdoc />
public MessageReference Reference { get; private set; }

/// <inheritdoc/>
public IReadOnlyCollection<ActionRowComponent> Components { get; private set; }

/// <summary>
/// Returns all attachments included in this message.
/// </summary>
@@ -156,6 +159,15 @@ namespace Discord.WebSocket
MessageId = model.Reference.Value.MessageId
};
}

if (model.Components.IsSpecified)
{
Components = model.Components.Value.Select(x =>
(x as Newtonsoft.Json.Linq.JToken).ToObject<ActionRowComponent>()
).ToList();
}
else
Components = new List<ActionRowComponent>();
}

/// <inheritdoc />
@@ -188,7 +200,8 @@ namespace Discord.WebSocket
IReadOnlyCollection<ulong> IMessage.MentionedRoleIds => MentionedRoles.Select(x => x.Id).ToImmutableArray();
/// <inheritdoc />
IReadOnlyCollection<ulong> IMessage.MentionedUserIds => MentionedUsers.Select(x => x.Id).ToImmutableArray();

/// <inheritdoc/>
IReadOnlyCollection<IMessageComponent> IMessage.Components => Components;
internal void AddReaction(SocketReaction reaction)
{
_reactions.Add(reaction);


Loading…
Cancel
Save