Skip to content

Commit

Permalink
reorganise embeds - put frontmatter extras above and body below
Browse files Browse the repository at this point in the history
  • Loading branch information
hry-gh committed Nov 14, 2024
1 parent f2bfda8 commit bcd565b
Showing 1 changed file with 39 additions and 14 deletions.
53 changes: 39 additions & 14 deletions tools/od_ref_bot/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,13 @@ async fn odref(
let page = get_page(&search_for, ctx.data()).unwrap_or("Not found.");

match format_embed(page, ctx.data()) {
Some(embed) => ctx.send(poise::CreateReply::default().embed(embed)).await?,
Some(embeds) => {
let mut reply = poise::CreateReply::default();
for embed in embeds.into_iter() {
reply = reply.embed(embed)
}
ctx.send(reply).await?
}
None => {
log::debug!("Unable to locate a page for {}.", &search_for);

Expand Down Expand Up @@ -134,7 +140,7 @@ fn get_page<'a>(query: &'a String, data: &'a Data) -> Option<&'a str> {
/// Retains most Markdown, as this (mostly) renders fine in Discord embeds.
/// Scrubs all Tera shortcodes, apart from the ones we can render into direct links here.
/// Pulls some extra information from the frontmatter, and puts it in fields.
fn format_embed(page: &str, data: &Data) -> Option<serenity::CreateEmbed> {
fn format_embed(page: &str, data: &Data) -> Option<Vec<serenity::CreateEmbed>> {
let body_regex = Regex::new(r"(?s)\+\+\+(.*)\+\+\+(.*)").unwrap();

let parsed = data.path_to_parsed.get(page)?;
Expand Down Expand Up @@ -163,18 +169,33 @@ fn format_embed(page: &str, data: &Data) -> Option<serenity::CreateEmbed> {
)
};

let url = get_url(page, parsed);

let body = format_body(body, data).trim().to_string();

let mut embed = serenity::CreateEmbed::default()
.title(&title)
.url(get_url(page, parsed))
.url(&url)
.color(Colour::from_rgb(246, 114, 128))
.description(format_body(body, data));
.description(&body);

let extra = parsed.extra.as_ref();

if extra.is_none() {
return Some(embed);
if body.len() <= 0 {
return None;
}

return Some(vec![embed]);
}

let mut extra_embed = serenity::CreateEmbed::default()
.title(&title)
.color(Colour::from_rgb(246, 114, 128))
.url(&url);

embed = embed.title("").url("");

let extra = extra.unwrap();

if let Some(formats) = &extra.format {
Expand All @@ -188,7 +209,7 @@ fn format_embed(page: &str, data: &Data) -> Option<serenity::CreateEmbed> {

format_string.push_str(")```");

embed = embed.field(
extra_embed = extra_embed.field(
format!("Format {}", format.0 + 1).as_str(),
format_string,
false,
Expand All @@ -203,11 +224,11 @@ fn format_embed(page: &str, data: &Data) -> Option<serenity::CreateEmbed> {

args_string.push_str(")```");

embed = embed.field("Arguments", args_string, false);
extra_embed = extra_embed.field("Arguments", args_string, false);
}

if let Some(val) = &extra.usage {
embed = embed.field("Usage", val.as_str(), false)
extra_embed = extra_embed.field("Usage", val.as_str(), false)
};

if let Some(val) = &extra._return {
Expand All @@ -228,12 +249,12 @@ fn format_embed(page: &str, data: &Data) -> Option<serenity::CreateEmbed> {
};

if !return_string.is_empty() {
embed = embed.field("Return", return_string, false);
extra_embed = extra_embed.field("Return", return_string, false);
}
}

PageReturnOrString::String(string) => {
embed = embed.field("Return", string.as_str(), false)
extra_embed = extra_embed.field("Return", string.as_str(), false)
}
}
};
Expand All @@ -245,18 +266,22 @@ fn format_embed(page: &str, data: &Data) -> Option<serenity::CreateEmbed> {
string_val = "\"\"";
}

embed = embed.field("Default Value", string_val, true)
extra_embed = extra_embed.field("Default Value", string_val, true)
};

if let Some(val) = &extra.permitted_values {
embed = embed.field("Permitted Values", val.as_str(), true)
extra_embed = extra_embed.field("Permitted Values", val.as_str(), true)
};

if let Some(val) = &extra._type {
embed = embed.field("Type", val.as_str(), true)
extra_embed = extra_embed.field("Type", val.as_str(), true)
};

if body.len() <= 0 {
return Some(vec![extra_embed]);
};

Some(embed)
Some(vec![extra_embed, embed])
}

/// Converts the Tera-formatted markdown into more Discord compatible markdown.
Expand Down

0 comments on commit bcd565b

Please sign in to comment.