diff --git a/src/botv2/cmd/meme/list.rs b/src/botv2/cmd/meme/list.rs new file mode 100644 index 0000000..b421edb --- /dev/null +++ b/src/botv2/cmd/meme/list.rs @@ -0,0 +1,39 @@ +use crate::botv2::init::{Context,Error}; +use poise::{serenity_prelude::{CreateEmbed, CreateEmbedFooter, CreateMessage}, CreateReply}; +/// List available meme keywords +#[poise::command( + slash_command, + prefix_command, + category = "meme" +)] +pub async fn list(ctx: Context<'_>) -> Result<(), Error> { + let config_img = ctx.data().config_img.clone(); + let list_value: Vec<(String, String, bool)> = config_img + .keyword + .iter() + .map(|x| (x.value.clone().join(", "), String::new(), true)) + .collect(); + if list_value.is_empty() { + let builder = CreateMessage::new().content("No meme keyword found"); + if let Err(why) = ctx.channel_id().send_message(ctx.http(), builder).await { + println!("Error sending message: {:?}", why) + } + return Ok(()); + } + let embed_vec = list_value.chunks(25).map(|chunks| { + let footer = CreateEmbedFooter::new("WeeboBot"); + CreateEmbed::new() + .title("Meme List") + .fields(chunks.to_vec()) + .footer(footer) + }); + let mut reply = CreateReply::default(); + reply.embeds = embed_vec.collect(); + if let Err(why) = ctx.send(reply).await { + println!("Error sending message: {:?}", why) + } + + Ok(()) +} + +// https://github.com/serenity-rs/poise/blob/current/examples/fluent_localization/main.rs \ No newline at end of file diff --git a/src/botv2/cmd/meme/mod.rs b/src/botv2/cmd/meme/mod.rs new file mode 100644 index 0000000..651aed7 --- /dev/null +++ b/src/botv2/cmd/meme/mod.rs @@ -0,0 +1 @@ +pub mod list; \ No newline at end of file diff --git a/src/botv2/cmd/mod.rs b/src/botv2/cmd/mod.rs index 05a84c5..6ac1ed8 100644 --- a/src/botv2/cmd/mod.rs +++ b/src/botv2/cmd/mod.rs @@ -1,2 +1,3 @@ pub mod ping; -pub mod help; \ No newline at end of file +pub mod help; +pub mod meme; \ No newline at end of file diff --git a/src/botv2/init.rs b/src/botv2/init.rs index 9652eb4..2469926 100644 --- a/src/botv2/init.rs +++ b/src/botv2/init.rs @@ -1,7 +1,7 @@ use poise::serenity_prelude as serenity; use std::fs; use serenity::GatewayIntents; -use crate::botv2::cmd::{ping::ping,help::help}; +use crate::botv2::cmd::{ping::ping,help::help, meme::list::list}; use crate::{botv2::handler::event_handler, img::config_file::ConfigFile}; use crate::config::Config; use tokio::sync::oneshot; @@ -64,7 +64,7 @@ pub fn start_bot(config: Config, rx: oneshot::Receiver<()>){ let prefix = config.prefix.clone(); let framework = poise::Framework::builder() .options(poise::FrameworkOptions { - commands: vec![age(), ping(),help()], + commands: vec![age(), ping(),help(), list()], prefix_options: poise::PrefixFrameworkOptions { prefix: Some(prefix.into()), ..Default::default()