Pagination fixes
This commit is contained in:
parent
0000312bae
commit
90be789c6b
|
|
@ -7,6 +7,7 @@ use crate::{ManifoldCommand, ManifoldContext};
|
||||||
use crate::models::weather::{Weather, WeatherForecastRequestResponse};
|
use crate::models::weather::{Weather, WeatherForecastRequestResponse};
|
||||||
use crate::models::user::UserInfo;
|
use crate::models::user::UserInfo;
|
||||||
use crate::error::ManifoldResult;
|
use crate::error::ManifoldResult;
|
||||||
|
use crate::helpers::paginate;
|
||||||
|
|
||||||
#[poise::command(slash_command, prefix_command, aliases("w"))]
|
#[poise::command(slash_command, prefix_command, aliases("w"))]
|
||||||
async fn weather(ctx: ManifoldContext<'_>, #[rest] #[description="Location to look up weather for"] location: Option<String>) -> ManifoldResult<()> {
|
async fn weather(ctx: ManifoldContext<'_>, #[rest] #[description="Location to look up weather for"] location: Option<String>) -> ManifoldResult<()> {
|
||||||
|
|
@ -67,11 +68,7 @@ async fn weather(ctx: ManifoldContext<'_>, #[rest] #[description="Location to lo
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
my_message.edit(ctx, |m| {
|
paginate(ctx, my_message, pages).await?;
|
||||||
m.content("");
|
|
||||||
m.embeds.extend(pages);
|
|
||||||
m
|
|
||||||
}).await?;
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
use crate::error::ManifoldResult;
|
use crate::error::ManifoldResult;
|
||||||
use crate::ManifoldContext;
|
use crate::ManifoldContext;
|
||||||
use poise::serenity_prelude;
|
use poise::{ReplyHandle, serenity_prelude};
|
||||||
|
use poise::serenity_prelude::CreateEmbed;
|
||||||
|
|
||||||
pub async fn paginate(ctx: ManifoldContext<'_>, pages: &[&str]) -> ManifoldResult<()> {
|
pub async fn paginate(ctx: ManifoldContext<'_>, message: ReplyHandle<'_>, pages: Vec<CreateEmbed>) -> ManifoldResult<()> {
|
||||||
// Define some unique identifiers for the navigation buttons
|
// Define some unique identifiers for the navigation buttons
|
||||||
let ctx_id = ctx.id();
|
let ctx_id = ctx.id();
|
||||||
let prev_button_id = format!("{}prev", ctx.id());
|
let prev_button_id = format!("{}prev", ctx.id());
|
||||||
|
|
@ -10,16 +11,15 @@ pub async fn paginate(ctx: ManifoldContext<'_>, pages: &[&str]) -> ManifoldResul
|
||||||
|
|
||||||
// Send the embed with the first page as content
|
// Send the embed with the first page as content
|
||||||
let mut current_page = 0;
|
let mut current_page = 0;
|
||||||
ctx.send(|b| {
|
message.edit(ctx, |m| {
|
||||||
b.embed(|b| b.description(pages[current_page]))
|
m.embeds = vec![pages[current_page].to_owned()];
|
||||||
.components(|b| {
|
m.components(|b| {
|
||||||
b.create_action_row(|b| {
|
b.create_action_row(|b| {
|
||||||
b.create_button(|b| b.custom_id(&prev_button_id).emoji('◀'))
|
b.create_button(|b| b.custom_id(&prev_button_id).emoji('◀'))
|
||||||
.create_button(|b| b.custom_id(&next_button_id).emoji('▶'))
|
.create_button(|b| b.custom_id(&next_button_id).emoji('▶'))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
}).await?;
|
||||||
.await?;
|
|
||||||
|
|
||||||
// Loop through incoming interactions with the navigation buttons
|
// Loop through incoming interactions with the navigation buttons
|
||||||
while let Some(press) = serenity_prelude::CollectComponentInteraction::new(ctx)
|
while let Some(press) = serenity_prelude::CollectComponentInteraction::new(ctx)
|
||||||
|
|
@ -47,7 +47,7 @@ pub async fn paginate(ctx: ManifoldContext<'_>, pages: &[&str]) -> ManifoldResul
|
||||||
press
|
press
|
||||||
.create_interaction_response(ctx, |b| {
|
.create_interaction_response(ctx, |b| {
|
||||||
b.kind(serenity_prelude::InteractionResponseType::UpdateMessage)
|
b.kind(serenity_prelude::InteractionResponseType::UpdateMessage)
|
||||||
.interaction_response_data(|b| b.embed(|b| b.description(pages[current_page])))
|
.interaction_response_data(|b| b.set_embeds(vec![pages[current_page.clone()].to_owned()]))
|
||||||
})
|
})
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue