mirror of
https://github.com/natsukagami/youmubot.git
synced 2025-04-19 16:58:55 +00:00
Send each emed as one message and perform save_last
This commit is contained in:
parent
7f15a4698a
commit
b4672fde4f
1 changed files with 22 additions and 15 deletions
|
@ -2,15 +2,11 @@ use std::str::FromStr;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use futures_util::stream::FuturesOrdered;
|
use futures_util::stream::FuturesOrdered;
|
||||||
use itertools::Itertools;
|
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
use pagination::paginate_from_fn;
|
use pagination::paginate_from_fn;
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
use serenity::{
|
use serenity::{
|
||||||
all::{EditMessage, EMBED_MAX_COUNT},
|
all::EditMessage, builder::CreateMessage, model::channel::Message, utils::MessageBuilder,
|
||||||
builder::CreateMessage,
|
|
||||||
model::channel::Message,
|
|
||||||
utils::MessageBuilder,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
use youmubot_prelude::*;
|
use youmubot_prelude::*;
|
||||||
|
@ -68,7 +64,7 @@ pub fn score_hook<'a>(
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter_map(|score| score.pls_ok().flatten());
|
.filter_map(|score| score.pls_ok().flatten());
|
||||||
|
|
||||||
let embed_chunks = scores
|
let embeds = scores
|
||||||
.map(|score| async move {
|
.map(|score| async move {
|
||||||
let env = {
|
let env = {
|
||||||
let data = ctx.data.read().await;
|
let data = ctx.data.read().await;
|
||||||
|
@ -78,33 +74,44 @@ pub fn score_hook<'a>(
|
||||||
.beatmaps
|
.beatmaps
|
||||||
.get_beatmap(score.beatmap_id, score.mode)
|
.get_beatmap(score.beatmap_id, score.mode)
|
||||||
.await?;
|
.await?;
|
||||||
|
let mode = score.mode;
|
||||||
let content = env.oppai.get_beatmap(score.beatmap_id).await?;
|
let content = env.oppai.get_beatmap(score.beatmap_id).await?;
|
||||||
let header = env.client.user_header(score.user_id).await?.unwrap();
|
let header = env.client.user_header(score.user_id).await?.unwrap();
|
||||||
Ok(score_embed(&score, &BeatmapWithMode(bm, score.mode), &content, header).build())
|
Ok((score, BeatmapWithMode(bm, mode), content, header))
|
||||||
as Result<_>
|
|
||||||
})
|
})
|
||||||
.collect::<FuturesOrdered<_>>()
|
.collect::<FuturesOrdered<_>>()
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
.await
|
.await
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter_map(|v| v.pls_ok())
|
.filter_map(|v: Result<_>| v.pls_ok())
|
||||||
.chunks(EMBED_MAX_COUNT)
|
|
||||||
.into_iter()
|
|
||||||
.map(|chunk| chunk.collect::<Vec<_>>())
|
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
for embeds in embed_chunks {
|
let len = embeds.len();
|
||||||
|
for (i, (s, b, c, h)) in embeds.into_iter().enumerate() {
|
||||||
msg.channel_id
|
msg.channel_id
|
||||||
.send_message(
|
.send_message(
|
||||||
&ctx,
|
&ctx,
|
||||||
CreateMessage::new()
|
CreateMessage::new()
|
||||||
.reference_message(msg)
|
.reference_message(msg)
|
||||||
.content("Here are the scores mentioned in the message!")
|
.content(if len == 1 {
|
||||||
.embeds(embeds),
|
"Here is the score mentioned in the message!".into()
|
||||||
|
} else {
|
||||||
|
format!(
|
||||||
|
"Here is the score mentioned in the message! (**{}/{}**)",
|
||||||
|
i + 1,
|
||||||
|
len
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.embed(score_embed(&s, &b, &c, h).build()),
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
.pls_ok();
|
.pls_ok();
|
||||||
|
env.last_beatmaps
|
||||||
|
.save(msg.channel_id, &b.0, b.1)
|
||||||
|
.await
|
||||||
|
.pls_ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue