Add support for replies (#455)

This commit is contained in:
Sanqui
2020-12-28 21:03:30 +01:00
committed by GitHub
parent 097a75e326
commit 07ac805677
8 changed files with 151 additions and 5 deletions

View File

@@ -18,7 +18,8 @@ namespace DiscordChatExporter.Domain.Discord.Models
ChannelNameChange,
ChannelIconChange,
ChannelPinnedMessage,
GuildMemberJoin
GuildMemberJoin,
Reply = 19
}
// https://discord.com/developers/docs/resources/channel#message-object
@@ -48,6 +49,10 @@ namespace DiscordChatExporter.Domain.Discord.Models
public IReadOnlyList<User> MentionedUsers { get; }
public MessageReference? Reference {get; }
public Message? ReferencedMessage {get; }
public Message(
Snowflake id,
MessageType type,
@@ -60,7 +65,9 @@ namespace DiscordChatExporter.Domain.Discord.Models
IReadOnlyList<Attachment> attachments,
IReadOnlyList<Embed> embeds,
IReadOnlyList<Reaction> reactions,
IReadOnlyList<User> mentionedUsers)
IReadOnlyList<User> mentionedUsers,
MessageReference? messageReference,
Message? referencedMessage)
{
Id = id;
Type = type;
@@ -74,6 +81,8 @@ namespace DiscordChatExporter.Domain.Discord.Models
Embeds = embeds;
Reactions = reactions;
MentionedUsers = mentionedUsers;
Reference = messageReference;
ReferencedMessage = referencedMessage;
}
public override string ToString() => Content;
@@ -90,6 +99,8 @@ namespace DiscordChatExporter.Domain.Discord.Models
var callEndedTimestamp = json.GetPropertyOrNull("call")?.GetPropertyOrNull("ended_timestamp")?.GetDateTimeOffset();
var type = (MessageType) json.GetProperty("type").GetInt32();
var isPinned = json.GetPropertyOrNull("pinned")?.GetBoolean() ?? false;
var messageReference = json.GetPropertyOrNull("message_reference")?.Pipe(MessageReference.Parse);
var referencedMessage = json.GetPropertyOrNull("referenced_message")?.Pipe(Message.Parse);
var content = type switch
{
@@ -132,7 +143,9 @@ namespace DiscordChatExporter.Domain.Discord.Models
attachments,
embeds,
reactions,
mentionedUsers
mentionedUsers,
messageReference,
referencedMessage
);
}
}

View File

@@ -0,0 +1,37 @@
using System.Text.Json;
using JsonExtensions.Reading;
namespace DiscordChatExporter.Domain.Discord.Models
{
// reference data sent with crossposted messages and replies
// https://discord.com/developers/docs/resources/channel#message-object-message-reference-structure
public partial class MessageReference
{
public string? MessageId { get; }
public string? ChannelId { get; }
public string? GuildId { get; }
public MessageReference(string? message_id, string? channel_id, string? guild_id)
{
MessageId = message_id;
ChannelId = channel_id;
GuildId = guild_id;
}
public override string ToString() => MessageId ?? "?";
}
public partial class MessageReference
{
public static MessageReference Parse(JsonElement json)
{
var message_id = json.GetPropertyOrNull("message_id")?.GetString();
var channel_id = json.GetPropertyOrNull("channel_id")?.GetString();
var guild_id = json.GetPropertyOrNull("guild_id")?.GetString();
return new MessageReference(message_id, channel_id, guild_id);
}
}
}