From d20326a8466d44e624efdffb0455f66e3eaac7b3 Mon Sep 17 00:00:00 2001 From: natto1784 Date: Tue, 15 Feb 2022 20:49:50 +0530 Subject: [PATCH] [ci skip] use functions instead of macros --- Cargo.toml | 2 +- ci/pipeline.yml | 6 +++ flake.nix | 2 +- src/commands/count.rs | 110 +++++++++++++++++---------------------- src/commands/general.rs | 7 +-- src/commands/macros.rs | 57 -------------------- src/commands/mod.rs | 1 - src/commands/tags.rs | 112 +++++++++++++++++----------------------- src/lib/components.rs | 60 +++++++++++++++++++++ src/lib/mod.rs | 1 + src/main.rs | 1 + 11 files changed, 166 insertions(+), 193 deletions(-) delete mode 100644 src/commands/macros.rs create mode 100644 src/lib/components.rs create mode 100644 src/lib/mod.rs diff --git a/Cargo.toml b/Cargo.toml index 69a52cd..ddc6bc4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "singh3" version = "0.1.0" authors = [ "Amneesh Singh " ] -edition = "2018" +edition = "2021" [dependencies] tracing = "*" diff --git a/ci/pipeline.yml b/ci/pipeline.yml index 3497920..c36989f 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -55,6 +55,12 @@ jobs: passed: [configure-self] - get: rust-latest-image trigger: false + - task: format + config: + run: + path: cargo + args: ["fmt"] + dir: singh3-bin - task: build image: rust-latest-image config: diff --git a/flake.nix b/flake.nix index 1f2e1cd..3163bd6 100644 --- a/flake.nix +++ b/flake.nix @@ -30,7 +30,7 @@ nativeBuildInputs = with pkgs; [ rust-bin.nightly.latest.default ]; - cargoSha256 = "sha256-0Apd8a9IdQJ8Mj5Xvm1/wM0PSc7PgciIptmz/KGx8XM="; + cargoSha256 = "sha256-04yTexSkFpa3KQKVvfi7NM1j4V7m08kHDqw98bxXT5M="; }; } ); diff --git a/src/commands/count.rs b/src/commands/count.rs index 119e5cc..2318457 100644 --- a/src/commands/count.rs +++ b/src/commands/count.rs @@ -1,14 +1,11 @@ -use crate::commands::macros::*; +use crate::lib::components::make_terminal_components; use core::time::Duration; use serenity::{ + builder::CreateEmbed, collector::component_interaction_collector::ComponentInteractionCollectorBuilder, framework::standard::{macros::command, Args, CommandResult}, futures::StreamExt, - model::{ - channel::ReactionType, - interactions::{message_component::ButtonStyle, InteractionResponseType}, - prelude::*, - }, + model::{interactions::InteractionResponseType, prelude::*}, prelude::*, utils::Colour, }; @@ -182,23 +179,21 @@ pub async fn cedit(ctx: &Context, msg: &Message, args: Args) -> CommandResult { Ok(()) } -macro_rules! make_embed { - ($e: expr, $cur: expr, $group: expr) => {{ - $e = $e - .title(format!("List of words: Page {}", $cur)) - .color(Colour::TEAL); - for row in $group { - let idx: i64 = row.get(0); - let name: String = row.get(1); - let owner_id: String = row.get(2); - $e = $e.field( - format!("{}. {}", idx, name), - format!(" by <@{}>", owner_id), - false, - ); - } - $e - }}; +fn make_list_embed(cur: usize, group: &[Row]) -> CreateEmbed { + let mut e = CreateEmbed::default(); + e.title(format!("List of words: Page {}", cur)) + .color(Colour::TEAL); + for row in group { + let idx: i64 = row.get(0); + let name: String = row.get(1); + let owner_id: String = row.get(2); + e.field( + format!("{}. {}", idx, name), + format!(" by <@{}>", owner_id), + false, + ); + } + e } #[command] @@ -236,15 +231,17 @@ pub async fn clist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul let message = msg .channel_id .send_message(ctx, |m| { - m.embed(|mut e| make_embed!(e, cur, groups[cur - 1])) - .components(|c| make_terminal_components!(c, "first", groups.len())) + m.set_embed(make_list_embed(cur, groups[cur - 1])) + .set_components(make_terminal_components("first", groups.len())) }) .await?; + let mut collector = ComponentInteractionCollectorBuilder::new(&ctx) .timeout(Duration::from_secs(90)) .author_id(msg.author.id) .message_id(message.id) .await; + while let Some(interaction) = collector.next().await { match interaction.data.custom_id.as_ref() { "next" => { @@ -254,14 +251,11 @@ pub async fn clist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul .create_interaction_response(&ctx, |r| { r.kind(InteractionResponseType::UpdateMessage) .interaction_response_data(|m| { - m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1])) - .components(|c| { - make_terminal_components!( - c, - if cur == groups.len() { "last" } else { "mid" }, - groups.len() - ) - }) + m.add_embed(make_list_embed(cur, groups[cur - 1])) + .set_components(make_terminal_components( + if cur == groups.len() { "last" } else { "mid" }, + groups.len(), + )) }) }) .await; @@ -274,14 +268,11 @@ pub async fn clist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul .create_interaction_response(&ctx, |r| { r.kind(InteractionResponseType::UpdateMessage) .interaction_response_data(|m| { - m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1])) - .components(|c| { - make_terminal_components!( - c, - if cur == 1 { "first" } else { "mid" }, - groups.len() - ) - }) + m.add_embed(make_list_embed(cur, groups[cur - 1])) + .set_components(make_terminal_components( + if cur == 1 { "first" } else { "mid" }, + groups.len(), + )) }) }) .await; @@ -293,10 +284,8 @@ pub async fn clist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul .create_interaction_response(&ctx, |r| { r.kind(InteractionResponseType::UpdateMessage) .interaction_response_data(|m| { - m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1])) - .components(|c| { - make_terminal_components!(c, "first", groups.len()) - }) + m.add_embed(make_list_embed(cur, groups[cur - 1])) + .set_components(make_terminal_components("first", groups.len())) }) }) .await; @@ -307,10 +296,8 @@ pub async fn clist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul .create_interaction_response(&ctx, |r| { r.kind(InteractionResponseType::UpdateMessage) .interaction_response_data(|m| { - m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1])) - .components(|c| { - make_terminal_components!(c, "last", groups.len()) - }) + m.add_embed(make_list_embed(cur, groups[cur - 1])) + .set_components(make_terminal_components("last", groups.len())) }) }) .await; @@ -325,20 +312,17 @@ pub async fn clist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul .create_interaction_response(&ctx, |r| { r.kind(InteractionResponseType::UpdateMessage) .interaction_response_data(|m| { - m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1])) - .components(|c| { - make_terminal_components!( - c, - if cur == 1 { - "first" - } else if cur == groups.len() { - "last" - } else { - "mid" - }, - groups.len() - ) - }) + m.add_embed(make_list_embed(cur, groups[cur - 1])) + .set_components(make_terminal_components( + if cur == 1 { + "first" + } else if cur == groups.len() { + "last" + } else { + "mid" + }, + groups.len(), + )) }) }) .await; diff --git a/src/commands/general.rs b/src/commands/general.rs index 34044e2..c2b956d 100644 --- a/src/commands/general.rs +++ b/src/commands/general.rs @@ -1,9 +1,6 @@ -use serenity::prelude::*; +use serenity::framework::standard::{macros::command, CommandResult}; use serenity::model::prelude::*; -use serenity::framework::standard::{ - CommandResult, - macros::command -}; +use serenity::prelude::*; #[command] pub async fn ping(ctx: &Context, msg: &Message) -> CommandResult { diff --git a/src/commands/macros.rs b/src/commands/macros.rs deleted file mode 100644 index c38d724..0000000 --- a/src/commands/macros.rs +++ /dev/null @@ -1,57 +0,0 @@ -macro_rules! make_range_select_menu { - ($sm:expr, $f: expr, $l: expr) => {{ - $sm.custom_id("range") - .placeholder("Page No") - .options(|mut os| { - for x in $f..=$l { - os = os.create_option(|o| o.label(x).value(x)); - } - - os - }) - }}; -} - -macro_rules! make_terminal_components { - ($c: expr, $terminal: expr, $pages: expr ) => {{ - $c.create_action_row(|ar| { - ar.create_button(|b| { - b.style(ButtonStyle::Primary) - .label("First") - .emoji(ReactionType::Unicode("\u{23EA}".to_string())) - .custom_id("first") - .disabled($terminal == "first") - }) - .create_button(|b| { - b.style(ButtonStyle::Primary) - .label("Prev") - .emoji(ReactionType::Unicode("\u{25C0}".to_string())) - .custom_id("prev") - .disabled($terminal == "first") - }) - .create_button(|b| { - b.style(ButtonStyle::Primary) - .label("Next") - .emoji(ReactionType::Unicode("\u{25B6}".to_string())) - .custom_id("next") - .disabled($terminal == "last") - }) - .create_button(|b| { - b.style(ButtonStyle::Primary) - .label("Last") - .emoji(ReactionType::Unicode("\u{23E9}".to_string())) - .custom_id("last") - .disabled($terminal == "last") - }) - .create_button(|b| { - b.style(ButtonStyle::Danger) - .label("Delete") - .emoji(ReactionType::Unicode("\u{1F5D1}".to_string())) - .custom_id("delete") - }) - }) - .create_action_row(|ar| ar.create_select_menu(|sm| make_range_select_menu!(sm, 1, $pages))) - }}; -} -pub(crate) use make_range_select_menu; -pub(crate) use make_terminal_components; diff --git a/src/commands/mod.rs b/src/commands/mod.rs index dd85fa4..754b8fe 100644 --- a/src/commands/mod.rs +++ b/src/commands/mod.rs @@ -2,4 +2,3 @@ pub mod count; pub mod general; pub mod minigames; pub mod tags; -pub mod macros; diff --git a/src/commands/tags.rs b/src/commands/tags.rs index 6f61826..74463d9 100644 --- a/src/commands/tags.rs +++ b/src/commands/tags.rs @@ -1,14 +1,11 @@ -use crate::commands::macros::*; +use crate::lib::components::make_terminal_components; use core::time::Duration; use serenity::{ + builder::CreateEmbed, collector::component_interaction_collector::ComponentInteractionCollectorBuilder, framework::standard::{macros::command, Args, CommandResult}, futures::StreamExt, - model::{ - channel::ReactionType, - interactions::{message_component::ButtonStyle, InteractionResponseType}, - prelude::*, - }, + model::{interactions::InteractionResponseType, prelude::*}, prelude::*, utils::Colour, }; @@ -222,23 +219,21 @@ pub async fn tedit(ctx: &Context, msg: &Message, args: Args) -> CommandResult { Ok(()) } -macro_rules! make_embed { - ($e: expr, $cur: expr, $group: expr) => {{ - $e = $e - .title(format!("List of tags: Page {}", $cur)) - .color(Colour::FABLED_PINK); - for row in $group { - let idx: i64 = row.get(0); - let name: String = row.get(1); - let owner_id: String = row.get(2); - $e = $e.field( - format!("{}. {}", idx, name), - format!(" by <@{}>", owner_id), - false, - ); - } - $e - }}; +fn make_list_embed(cur: usize, group: &[Row]) -> CreateEmbed { + let mut e = CreateEmbed::default(); + e.title(format!("List of tags: Page {}", cur)) + .color(Colour::FABLED_PINK); + for row in group { + let idx: i64 = row.get(0); + let name: String = row.get(1); + let owner_id: String = row.get(2); + e.field( + format!("{}. {}", idx, name), + format!(" by <@{}>", owner_id), + false, + ); + } + e } #[command] @@ -276,10 +271,11 @@ pub async fn tlist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul let message = msg .channel_id .send_message(ctx, |m| { - m.embed(|mut e| make_embed!(e, cur, groups[cur - 1])) - .components(|c| make_terminal_components!(c, "first", groups.len())) + m.set_embed(make_list_embed(cur, groups[cur - 1])) + .set_components(make_terminal_components("first", groups.len())) }) .await?; + let mut collector = ComponentInteractionCollectorBuilder::new(&ctx) .timeout(Duration::from_secs(90)) .author_id(msg.author.id) @@ -287,8 +283,7 @@ pub async fn tlist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul .await; while let Some(interaction) = collector.next().await { - let custom_id = interaction.data.custom_id.as_ref(); - match custom_id { + match interaction.data.custom_id.as_ref() { "next" => { if cur != groups.len() { cur += 1; @@ -296,14 +291,11 @@ pub async fn tlist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul .create_interaction_response(&ctx, |r| { r.kind(InteractionResponseType::UpdateMessage) .interaction_response_data(|m| { - m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1])) - .components(|c| { - make_terminal_components!( - c, - if cur == groups.len() { "last" } else { "mid" }, - groups.len() - ) - }) + m.add_embed(make_list_embed(cur, groups[cur - 1])) + .set_components(make_terminal_components( + if cur == groups.len() { "last" } else { "mid" }, + groups.len(), + )) }) }) .await; @@ -316,14 +308,11 @@ pub async fn tlist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul .create_interaction_response(&ctx, |r| { r.kind(InteractionResponseType::UpdateMessage) .interaction_response_data(|m| { - m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1])) - .components(|c| { - make_terminal_components!( - c, - if cur == 1 { "first" } else { "mid" }, - groups.len() - ) - }) + m.add_embed(make_list_embed(cur, groups[cur - 1])) + .set_components(make_terminal_components( + if cur == 1 { "first" } else { "mid" }, + groups.len(), + )) }) }) .await; @@ -335,10 +324,8 @@ pub async fn tlist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul .create_interaction_response(&ctx, |r| { r.kind(InteractionResponseType::UpdateMessage) .interaction_response_data(|m| { - m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1])) - .components(|c| { - make_terminal_components!(c, "first", groups.len()) - }) + m.add_embed(make_list_embed(cur, groups[cur - 1])) + .set_components(make_terminal_components("first", groups.len())) }) }) .await; @@ -349,10 +336,8 @@ pub async fn tlist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul .create_interaction_response(&ctx, |r| { r.kind(InteractionResponseType::UpdateMessage) .interaction_response_data(|m| { - m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1])) - .components(|c| { - make_terminal_components!(c, "last", groups.len()) - }) + m.add_embed(make_list_embed(cur, groups[cur - 1])) + .set_components(make_terminal_components("last", groups.len())) }) }) .await; @@ -367,20 +352,17 @@ pub async fn tlist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul .create_interaction_response(&ctx, |r| { r.kind(InteractionResponseType::UpdateMessage) .interaction_response_data(|m| { - m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1])) - .components(|c| { - make_terminal_components!( - c, - if cur == 1 { - "first" - } else if cur == groups.len() { - "last" - } else { - "mid" - }, - groups.len() - ) - }) + m.add_embed(make_list_embed(cur, groups[cur - 1])) + .set_components(make_terminal_components( + if cur == 1 { + "first" + } else if cur == groups.len() { + "last" + } else { + "mid" + }, + groups.len(), + )) }) }) .await; diff --git a/src/lib/components.rs b/src/lib/components.rs new file mode 100644 index 0000000..88b3a86 --- /dev/null +++ b/src/lib/components.rs @@ -0,0 +1,60 @@ +use serenity::{ + builder::{CreateComponents, CreateSelectMenu}, + model::{channel::ReactionType, interactions::message_component::ButtonStyle}, +}; + +pub fn make_range_select_menu(first: usize, last: usize) -> CreateSelectMenu { + let mut sm = CreateSelectMenu::default(); + sm.custom_id("range") + .placeholder("Page No") + .options(|mut os| { + for x in first..=last { + os = os.create_option(|o| o.label(x).value(x)); + } + + os + }); + sm +} + +pub fn make_terminal_components(terminal: &str, pages: usize) -> CreateComponents { + let mut c = CreateComponents::default(); + c.create_action_row(|ar| { + ar.create_button(|b| { + b.style(ButtonStyle::Primary) + .label("First") + .emoji(ReactionType::Unicode("\u{23EA}".to_string())) + .custom_id("first") + .disabled(terminal == "first") + }) + .create_button(|b| { + b.style(ButtonStyle::Primary) + .label("Prev") + .emoji(ReactionType::Unicode("\u{25C0}".to_string())) + .custom_id("prev") + .disabled(terminal == "first") + }) + .create_button(|b| { + b.style(ButtonStyle::Primary) + .label("Next") + .emoji(ReactionType::Unicode("\u{25B6}".to_string())) + .custom_id("next") + .disabled(terminal == "last") + }) + .create_button(|b| { + b.style(ButtonStyle::Primary) + .label("Last") + .emoji(ReactionType::Unicode("\u{23E9}".to_string())) + .custom_id("last") + .disabled(terminal == "last") + }) + .create_button(|b| { + b.style(ButtonStyle::Danger) + .label("Delete") + .emoji(ReactionType::Unicode("\u{1F5D1}".to_string())) + .custom_id("delete") + }) + }) + .create_action_row(|ar| ar.add_select_menu(make_range_select_menu(1, pages))); + c +} diff --git a/src/lib/mod.rs b/src/lib/mod.rs new file mode 100644 index 0000000..f188f2c --- /dev/null +++ b/src/lib/mod.rs @@ -0,0 +1 @@ +pub mod components; diff --git a/src/main.rs b/src/main.rs index 410e722..2833b53 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,6 @@ mod commands; mod handler; +mod lib; use commands::count::*; use commands::general::*; use commands::minigames::*;