Reformat uploaded beatmap embed and send background

This commit is contained in:
Natsu Kagami 2024-06-20 01:52:39 +02:00 committed by Natsu Kagami
parent 2315f40cf1
commit e9a6e55569
2 changed files with 69 additions and 31 deletions

View file

@ -4,6 +4,7 @@ use crate::{
models::{Beatmap, Difficulty, Mode, Mods, Rank, Score, User}, models::{Beatmap, Difficulty, Mode, Mods, Rank, Score, User},
}; };
use serenity::{ use serenity::{
all::CreateAttachment,
builder::{CreateEmbed, CreateEmbedAuthor, CreateEmbedFooter}, builder::{CreateEmbed, CreateEmbedAuthor, CreateEmbedFooter},
utils::MessageBuilder, utils::MessageBuilder,
}; };
@ -63,7 +64,7 @@ pub fn beatmap_offline_embed(
b: &'_ crate::discord::oppai_cache::BeatmapContent, b: &'_ crate::discord::oppai_cache::BeatmapContent,
m: Mode, m: Mode,
mods: Mods, mods: Mods,
) -> Result<CreateEmbed> { ) -> Result<(CreateEmbed, Vec<CreateAttachment>)> {
let bm = b.content.clone(); let bm = b.content.clone();
let metadata = b.metadata.clone(); let metadata = b.metadata.clone();
let (info, pp) = b.get_possible_pp_with(m, mods)?; let (info, pp) = b.get_possible_pp_with(m, mods)?;
@ -107,8 +108,7 @@ pub fn beatmap_offline_embed(
total_length, total_length,
} }
.apply_mods(mods, info.stars); .apply_mods(mods, info.stars);
Ok( let mut embed = CreateEmbed::new()
CreateEmbed::new()
.title(beatmap_title( .title(beatmap_title(
&metadata.artist, &metadata.artist,
&metadata.title, &metadata.title,
@ -128,8 +128,17 @@ pub fn beatmap_offline_embed(
), ),
false, false,
) )
.field("Information", diff.format_info(m, mods, None), false), // .description(beatmap_description(b)) .field("Information", diff.format_info(m, mods, None), false);
) let mut attachments = Vec::new();
if let Some(bg) = &b.beatmap_background {
embed = embed.thumbnail(format!("attachment://{}", bg.filename));
attachments.push(CreateAttachment::bytes(
bg.content.clone().into_vec(),
bg.filename.clone(),
));
}
Ok((embed, attachments))
} }
// Some helper functions here // Some helper functions here

View file

@ -101,16 +101,45 @@ pub fn dot_osu_hook<'a>(
osu_embeds.extend(osz_embeds); osu_embeds.extend(osz_embeds);
if !osu_embeds.is_empty() { if !osu_embeds.is_empty() {
let embed_len = osu_embeds.len();
if embed_len == 1 {
let (embed, attachments) = osu_embeds.into_iter().next().unwrap();
msg.channel_id msg.channel_id
.send_message( .send_message(
ctx, ctx,
CreateMessage::new() CreateMessage::new()
.reference_message(msg) .reference_message(msg)
.content(format!("{} attached beatmaps found", osu_embeds.len())) .embed(embed)
.add_embeds(osu_embeds), .add_files(attachments)
.content("Attached beatmap".to_owned()),
) )
.await .await
.ok(); .pls_ok();
} else {
let osu_embeds = Arc::new(osu_embeds);
paginate_reply(
paginate_from_fn(|page, ctx, msg| {
let osu_embeds = osu_embeds.clone();
Box::pin(async move {
let (embed, attachments) = &osu_embeds[page as usize];
let mut edit = EditMessage::new()
.content(format!("Attached beatmaps ({}/{})", page + 1, embed_len))
.embed(embed.clone());
for att in attachments {
edit = edit.new_attachment(att.clone());
}
msg.edit(&ctx, edit).await?;
Ok(true)
})
})
.with_page_count(embed_len),
ctx,
msg,
std::time::Duration::from_secs(180),
)
.await
.pls_ok();
}
} }
Ok(()) Ok(())