|
|
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|
|
|
|
using System.Globalization;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text.RegularExpressions;
|
|
|
|
|
using DiscordChatExporter.Core.Discord;
|
|
|
|
|
using DiscordChatExporter.Core.Utils;
|
|
|
|
|
|
|
|
|
|
namespace DiscordChatExporter.Core.Markdown.Parsing;
|
|
|
|
@ -123,31 +124,31 @@ internal static partial class MarkdownParser
|
|
|
|
|
// Capture @everyone
|
|
|
|
|
private static readonly IMatcher<MarkdownNode> EveryoneMentionNodeMatcher = new StringMatcher<MarkdownNode>(
|
|
|
|
|
"@everyone",
|
|
|
|
|
_ => new MentionNode("everyone", MentionKind.Meta)
|
|
|
|
|
_ => new MentionNode(Snowflake.Zero, MentionKind.Meta)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// Capture @here
|
|
|
|
|
private static readonly IMatcher<MarkdownNode> HereMentionNodeMatcher = new StringMatcher<MarkdownNode>(
|
|
|
|
|
"@here",
|
|
|
|
|
_ => new MentionNode("here", MentionKind.Meta)
|
|
|
|
|
_ => new MentionNode(Snowflake.Zero, MentionKind.Meta)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// Capture <@123456> or <@!123456>
|
|
|
|
|
private static readonly IMatcher<MarkdownNode> UserMentionNodeMatcher = new RegexMatcher<MarkdownNode>(
|
|
|
|
|
new Regex("<@!?(\\d+)>", DefaultRegexOptions),
|
|
|
|
|
(_, m) => new MentionNode(m.Groups[1].Value, MentionKind.User)
|
|
|
|
|
(_, m) => new MentionNode(Snowflake.Parse(m.Groups[1].Value), MentionKind.User)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// Capture <#123456>
|
|
|
|
|
private static readonly IMatcher<MarkdownNode> ChannelMentionNodeMatcher = new RegexMatcher<MarkdownNode>(
|
|
|
|
|
new Regex("<#!?(\\d+)>", DefaultRegexOptions),
|
|
|
|
|
(_, m) => new MentionNode(m.Groups[1].Value, MentionKind.Channel)
|
|
|
|
|
(_, m) => new MentionNode(Snowflake.Parse(m.Groups[1].Value), MentionKind.Channel)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// Capture <@&123456>
|
|
|
|
|
private static readonly IMatcher<MarkdownNode> RoleMentionNodeMatcher = new RegexMatcher<MarkdownNode>(
|
|
|
|
|
new Regex("<@&(\\d+)>", DefaultRegexOptions),
|
|
|
|
|
(_, m) => new MentionNode(m.Groups[1].Value, MentionKind.Role)
|
|
|
|
|
(_, m) => new MentionNode(Snowflake.Parse(m.Groups[1].Value), MentionKind.Role)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Emoji */
|
|
|
|
@ -177,7 +178,11 @@ internal static partial class MarkdownParser
|
|
|
|
|
// Capture <:lul:123456> or <a:lul:123456>
|
|
|
|
|
private static readonly IMatcher<MarkdownNode> CustomEmojiNodeMatcher = new RegexMatcher<MarkdownNode>(
|
|
|
|
|
new Regex("<(a)?:(.+?):(\\d+?)>", DefaultRegexOptions),
|
|
|
|
|
(_, m) => new EmojiNode(m.Groups[3].Value, m.Groups[2].Value, !string.IsNullOrWhiteSpace(m.Groups[1].Value))
|
|
|
|
|
(_, m) => new EmojiNode(
|
|
|
|
|
Snowflake.Parse(m.Groups[3].Value),
|
|
|
|
|
m.Groups[2].Value,
|
|
|
|
|
!string.IsNullOrWhiteSpace(m.Groups[1].Value)
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/* Links */
|
|
|
|
|