From 079efa5095a736640ecbda768548f2da50e8289a Mon Sep 17 00:00:00 2001 From: videogame hacker Date: Mon, 13 Sep 2021 20:10:22 +0100 Subject: [PATCH] Improve quality of Discord formatted output --- src/message_ast/convert_discord.rs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/message_ast/convert_discord.rs b/src/message_ast/convert_discord.rs index 9a75805..12be84e 100644 --- a/src/message_ast/convert_discord.rs +++ b/src/message_ast/convert_discord.rs @@ -48,7 +48,16 @@ pub fn format_discord(message_content: &[MessageComponent]) -> String { .map(|component| match component { MessageComponent::Plain(text) => text.to_string(), // TODO: Escape - MessageComponent::Link { target, .. } => target.to_string(), // TODO: Link text + MessageComponent::Link { target, text } => { + let formatted_text = format_discord(text); + + // TODO: Maybe tolerate a missing http(s) URL scheme? + if &formatted_text == target { + formatted_text + } else { + format!("{} ({})", formatted_text, target) + } + } MessageComponent::Italic(inner) => format!("*{}*", format_discord(inner)), MessageComponent::Bold(inner) => format!("**{}**", format_discord(inner)), @@ -69,7 +78,10 @@ pub fn format_discord(message_content: &[MessageComponent]) -> String { MessageComponent::Spoiler { content, .. } => format!("||{}||", format_discord(content)), // TODO: Spoiler reason MessageComponent::HardBreak => "\n".to_string(), - MessageComponent::BlockQuote(inner) => format!("> {}", format_discord(inner)), + MessageComponent::BlockQuote(inner) => format_discord(inner) + .lines() + .map(|l| format!("> {}\n", l)) + .collect(), }) .collect() }