Allow paginating through an embed
This commit is contained in:
parent
dac53d1506
commit
d9250ec4c0
|
@ -10,7 +10,7 @@ pub async fn high_tier(ctx: Context<'_>) -> bool {
|
|||
332337657113739265 => return true, // Testing
|
||||
_ => (),
|
||||
}
|
||||
|
||||
|
||||
match ctx.discord().cache.guild_channel(ctx.channel_id()) {
|
||||
None => return false,
|
||||
Some(chan) => match chan.parent_id {
|
||||
|
@ -133,3 +133,102 @@ pub async fn paginate_string(ctx: Context<'_>, pages: Vec<String>) -> Result<(),
|
|||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn paginate_string_embed(
|
||||
ctx: Context<'_>,
|
||||
title: String,
|
||||
pages: Vec<String>,
|
||||
) -> Result<(), Error> {
|
||||
let uuid_command = ctx.id().to_string();
|
||||
let page_count = pages.len();
|
||||
|
||||
match pages.len() {
|
||||
0 => {
|
||||
ctx.say("No data found :(").await?;
|
||||
return Ok(());
|
||||
}
|
||||
1 => {
|
||||
// ctx.say(pages.get(0).unwrap()).await?;
|
||||
ctx.send(|m| m.embed(|e| e.title("WRC schedule").description(pages.get(0).unwrap())))
|
||||
.await?;
|
||||
return Ok(());
|
||||
}
|
||||
_ => {}
|
||||
};
|
||||
|
||||
ctx.send(|m| {
|
||||
// m.content(format!(
|
||||
// "{}\n\nPage: {}/{}",
|
||||
// pages.get(0).unwrap(),
|
||||
// 1,
|
||||
// page_count
|
||||
// ))
|
||||
m.embed(|e| {
|
||||
e.title(format!("{} Page 1/{}", title, page_count))
|
||||
.description(pages.get(0).unwrap())
|
||||
})
|
||||
.components(|c| {
|
||||
c.create_action_row(|ar| {
|
||||
ar.create_button(|b| {
|
||||
b.style(serenity::ButtonStyle::Primary)
|
||||
.label("Previous page")
|
||||
.custom_id(format!("{}_previous", uuid_command))
|
||||
});
|
||||
ar.create_button(|b| {
|
||||
b.style(serenity::ButtonStyle::Primary)
|
||||
.label("Next page")
|
||||
.custom_id(format!("{}_next", uuid_command))
|
||||
});
|
||||
ar.create_button(|b| {
|
||||
b.style(serenity::ButtonStyle::Secondary)
|
||||
.label("Reset")
|
||||
.custom_id(format!("{}_close", uuid_command))
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
.await?;
|
||||
// let interaction1 = if let ReplyHandle::Application { http, interaction } = msg.unwrap(){Some(interaction)} else {None};
|
||||
// let interaction = interaction1.unwrap();
|
||||
|
||||
let mut page = 0;
|
||||
while let Some(mci) = serenity::CollectComponentInteraction::new(ctx.discord())
|
||||
// .author_id(ctx.author().id)
|
||||
.channel_id(ctx.channel_id())
|
||||
.timeout(std::time::Duration::from_secs(1200))
|
||||
// .filter(move |mci| mci.data.custom_id == uuid_command.to_string())
|
||||
.await
|
||||
{
|
||||
if !mci.data.custom_id.contains(&uuid_command) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if mci.data.custom_id.contains("_previous") {
|
||||
if page == 0 {
|
||||
page = page_count - 1;
|
||||
} else {
|
||||
page = (page - 1) % page_count;
|
||||
}
|
||||
} else if mci.data.custom_id.contains("_next") {
|
||||
page = (page + 1) % page_count;
|
||||
} else if mci.data.custom_id.contains("_close") {
|
||||
page = 0;
|
||||
}
|
||||
|
||||
let mut msg = mci.message.clone();
|
||||
msg.edit(ctx.discord(), |m| {
|
||||
m.embed(|e| {
|
||||
e.title(format!("{} Page {}/{}", title, page + 1, page_count))
|
||||
.description(pages.get(page).unwrap())
|
||||
})
|
||||
})
|
||||
.await?;
|
||||
|
||||
mci.create_interaction_response(ctx.discord(), |ir| {
|
||||
ir.kind(serenity::InteractionResponseType::DeferredUpdateMessage)
|
||||
})
|
||||
.await?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue