[ci skip] use functions instead of macros
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
name = "singh3"
|
name = "singh3"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
authors = [ "Amneesh Singh <natto@weirdnatto.in>" ]
|
authors = [ "Amneesh Singh <natto@weirdnatto.in>" ]
|
||||||
edition = "2018"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
tracing = "*"
|
tracing = "*"
|
||||||
|
@@ -55,6 +55,12 @@ jobs:
|
|||||||
passed: [configure-self]
|
passed: [configure-self]
|
||||||
- get: rust-latest-image
|
- get: rust-latest-image
|
||||||
trigger: false
|
trigger: false
|
||||||
|
- task: format
|
||||||
|
config:
|
||||||
|
run:
|
||||||
|
path: cargo
|
||||||
|
args: ["fmt"]
|
||||||
|
dir: singh3-bin
|
||||||
- task: build
|
- task: build
|
||||||
image: rust-latest-image
|
image: rust-latest-image
|
||||||
config:
|
config:
|
||||||
|
@@ -30,7 +30,7 @@
|
|||||||
nativeBuildInputs = with pkgs; [
|
nativeBuildInputs = with pkgs; [
|
||||||
rust-bin.nightly.latest.default
|
rust-bin.nightly.latest.default
|
||||||
];
|
];
|
||||||
cargoSha256 = "sha256-0Apd8a9IdQJ8Mj5Xvm1/wM0PSc7PgciIptmz/KGx8XM=";
|
cargoSha256 = "sha256-04yTexSkFpa3KQKVvfi7NM1j4V7m08kHDqw98bxXT5M=";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@@ -1,14 +1,11 @@
|
|||||||
use crate::commands::macros::*;
|
use crate::lib::components::make_terminal_components;
|
||||||
use core::time::Duration;
|
use core::time::Duration;
|
||||||
use serenity::{
|
use serenity::{
|
||||||
|
builder::CreateEmbed,
|
||||||
collector::component_interaction_collector::ComponentInteractionCollectorBuilder,
|
collector::component_interaction_collector::ComponentInteractionCollectorBuilder,
|
||||||
framework::standard::{macros::command, Args, CommandResult},
|
framework::standard::{macros::command, Args, CommandResult},
|
||||||
futures::StreamExt,
|
futures::StreamExt,
|
||||||
model::{
|
model::{interactions::InteractionResponseType, prelude::*},
|
||||||
channel::ReactionType,
|
|
||||||
interactions::{message_component::ButtonStyle, InteractionResponseType},
|
|
||||||
prelude::*,
|
|
||||||
},
|
|
||||||
prelude::*,
|
prelude::*,
|
||||||
utils::Colour,
|
utils::Colour,
|
||||||
};
|
};
|
||||||
@@ -182,23 +179,21 @@ pub async fn cedit(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! make_embed {
|
fn make_list_embed(cur: usize, group: &[Row]) -> CreateEmbed {
|
||||||
($e: expr, $cur: expr, $group: expr) => {{
|
let mut e = CreateEmbed::default();
|
||||||
$e = $e
|
e.title(format!("List of words: Page {}", cur))
|
||||||
.title(format!("List of words: Page {}", $cur))
|
.color(Colour::TEAL);
|
||||||
.color(Colour::TEAL);
|
for row in group {
|
||||||
for row in $group {
|
let idx: i64 = row.get(0);
|
||||||
let idx: i64 = row.get(0);
|
let name: String = row.get(1);
|
||||||
let name: String = row.get(1);
|
let owner_id: String = row.get(2);
|
||||||
let owner_id: String = row.get(2);
|
e.field(
|
||||||
$e = $e.field(
|
format!("{}. {}", idx, name),
|
||||||
format!("{}. {}", idx, name),
|
format!(" by <@{}>", owner_id),
|
||||||
format!(" by <@{}>", owner_id),
|
false,
|
||||||
false,
|
);
|
||||||
);
|
}
|
||||||
}
|
e
|
||||||
$e
|
|
||||||
}};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[command]
|
#[command]
|
||||||
@@ -236,15 +231,17 @@ pub async fn clist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul
|
|||||||
let message = msg
|
let message = msg
|
||||||
.channel_id
|
.channel_id
|
||||||
.send_message(ctx, |m| {
|
.send_message(ctx, |m| {
|
||||||
m.embed(|mut e| make_embed!(e, cur, groups[cur - 1]))
|
m.set_embed(make_list_embed(cur, groups[cur - 1]))
|
||||||
.components(|c| make_terminal_components!(c, "first", groups.len()))
|
.set_components(make_terminal_components("first", groups.len()))
|
||||||
})
|
})
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let mut collector = ComponentInteractionCollectorBuilder::new(&ctx)
|
let mut collector = ComponentInteractionCollectorBuilder::new(&ctx)
|
||||||
.timeout(Duration::from_secs(90))
|
.timeout(Duration::from_secs(90))
|
||||||
.author_id(msg.author.id)
|
.author_id(msg.author.id)
|
||||||
.message_id(message.id)
|
.message_id(message.id)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
while let Some(interaction) = collector.next().await {
|
while let Some(interaction) = collector.next().await {
|
||||||
match interaction.data.custom_id.as_ref() {
|
match interaction.data.custom_id.as_ref() {
|
||||||
"next" => {
|
"next" => {
|
||||||
@@ -254,14 +251,11 @@ pub async fn clist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul
|
|||||||
.create_interaction_response(&ctx, |r| {
|
.create_interaction_response(&ctx, |r| {
|
||||||
r.kind(InteractionResponseType::UpdateMessage)
|
r.kind(InteractionResponseType::UpdateMessage)
|
||||||
.interaction_response_data(|m| {
|
.interaction_response_data(|m| {
|
||||||
m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1]))
|
m.add_embed(make_list_embed(cur, groups[cur - 1]))
|
||||||
.components(|c| {
|
.set_components(make_terminal_components(
|
||||||
make_terminal_components!(
|
if cur == groups.len() { "last" } else { "mid" },
|
||||||
c,
|
groups.len(),
|
||||||
if cur == groups.len() { "last" } else { "mid" },
|
))
|
||||||
groups.len()
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.await;
|
.await;
|
||||||
@@ -274,14 +268,11 @@ pub async fn clist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul
|
|||||||
.create_interaction_response(&ctx, |r| {
|
.create_interaction_response(&ctx, |r| {
|
||||||
r.kind(InteractionResponseType::UpdateMessage)
|
r.kind(InteractionResponseType::UpdateMessage)
|
||||||
.interaction_response_data(|m| {
|
.interaction_response_data(|m| {
|
||||||
m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1]))
|
m.add_embed(make_list_embed(cur, groups[cur - 1]))
|
||||||
.components(|c| {
|
.set_components(make_terminal_components(
|
||||||
make_terminal_components!(
|
if cur == 1 { "first" } else { "mid" },
|
||||||
c,
|
groups.len(),
|
||||||
if cur == 1 { "first" } else { "mid" },
|
))
|
||||||
groups.len()
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.await;
|
.await;
|
||||||
@@ -293,10 +284,8 @@ pub async fn clist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul
|
|||||||
.create_interaction_response(&ctx, |r| {
|
.create_interaction_response(&ctx, |r| {
|
||||||
r.kind(InteractionResponseType::UpdateMessage)
|
r.kind(InteractionResponseType::UpdateMessage)
|
||||||
.interaction_response_data(|m| {
|
.interaction_response_data(|m| {
|
||||||
m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1]))
|
m.add_embed(make_list_embed(cur, groups[cur - 1]))
|
||||||
.components(|c| {
|
.set_components(make_terminal_components("first", groups.len()))
|
||||||
make_terminal_components!(c, "first", groups.len())
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.await;
|
.await;
|
||||||
@@ -307,10 +296,8 @@ pub async fn clist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul
|
|||||||
.create_interaction_response(&ctx, |r| {
|
.create_interaction_response(&ctx, |r| {
|
||||||
r.kind(InteractionResponseType::UpdateMessage)
|
r.kind(InteractionResponseType::UpdateMessage)
|
||||||
.interaction_response_data(|m| {
|
.interaction_response_data(|m| {
|
||||||
m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1]))
|
m.add_embed(make_list_embed(cur, groups[cur - 1]))
|
||||||
.components(|c| {
|
.set_components(make_terminal_components("last", groups.len()))
|
||||||
make_terminal_components!(c, "last", groups.len())
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.await;
|
.await;
|
||||||
@@ -325,20 +312,17 @@ pub async fn clist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul
|
|||||||
.create_interaction_response(&ctx, |r| {
|
.create_interaction_response(&ctx, |r| {
|
||||||
r.kind(InteractionResponseType::UpdateMessage)
|
r.kind(InteractionResponseType::UpdateMessage)
|
||||||
.interaction_response_data(|m| {
|
.interaction_response_data(|m| {
|
||||||
m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1]))
|
m.add_embed(make_list_embed(cur, groups[cur - 1]))
|
||||||
.components(|c| {
|
.set_components(make_terminal_components(
|
||||||
make_terminal_components!(
|
if cur == 1 {
|
||||||
c,
|
"first"
|
||||||
if cur == 1 {
|
} else if cur == groups.len() {
|
||||||
"first"
|
"last"
|
||||||
} else if cur == groups.len() {
|
} else {
|
||||||
"last"
|
"mid"
|
||||||
} else {
|
},
|
||||||
"mid"
|
groups.len(),
|
||||||
},
|
))
|
||||||
groups.len()
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.await;
|
.await;
|
||||||
|
@@ -1,9 +1,6 @@
|
|||||||
use serenity::prelude::*;
|
use serenity::framework::standard::{macros::command, CommandResult};
|
||||||
use serenity::model::prelude::*;
|
use serenity::model::prelude::*;
|
||||||
use serenity::framework::standard::{
|
use serenity::prelude::*;
|
||||||
CommandResult,
|
|
||||||
macros::command
|
|
||||||
};
|
|
||||||
|
|
||||||
#[command]
|
#[command]
|
||||||
pub async fn ping(ctx: &Context, msg: &Message) -> CommandResult {
|
pub async fn ping(ctx: &Context, msg: &Message) -> CommandResult {
|
||||||
|
@@ -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;
|
|
@@ -2,4 +2,3 @@ pub mod count;
|
|||||||
pub mod general;
|
pub mod general;
|
||||||
pub mod minigames;
|
pub mod minigames;
|
||||||
pub mod tags;
|
pub mod tags;
|
||||||
pub mod macros;
|
|
||||||
|
@@ -1,14 +1,11 @@
|
|||||||
use crate::commands::macros::*;
|
use crate::lib::components::make_terminal_components;
|
||||||
use core::time::Duration;
|
use core::time::Duration;
|
||||||
use serenity::{
|
use serenity::{
|
||||||
|
builder::CreateEmbed,
|
||||||
collector::component_interaction_collector::ComponentInteractionCollectorBuilder,
|
collector::component_interaction_collector::ComponentInteractionCollectorBuilder,
|
||||||
framework::standard::{macros::command, Args, CommandResult},
|
framework::standard::{macros::command, Args, CommandResult},
|
||||||
futures::StreamExt,
|
futures::StreamExt,
|
||||||
model::{
|
model::{interactions::InteractionResponseType, prelude::*},
|
||||||
channel::ReactionType,
|
|
||||||
interactions::{message_component::ButtonStyle, InteractionResponseType},
|
|
||||||
prelude::*,
|
|
||||||
},
|
|
||||||
prelude::*,
|
prelude::*,
|
||||||
utils::Colour,
|
utils::Colour,
|
||||||
};
|
};
|
||||||
@@ -222,23 +219,21 @@ pub async fn tedit(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! make_embed {
|
fn make_list_embed(cur: usize, group: &[Row]) -> CreateEmbed {
|
||||||
($e: expr, $cur: expr, $group: expr) => {{
|
let mut e = CreateEmbed::default();
|
||||||
$e = $e
|
e.title(format!("List of tags: Page {}", cur))
|
||||||
.title(format!("List of tags: Page {}", $cur))
|
.color(Colour::FABLED_PINK);
|
||||||
.color(Colour::FABLED_PINK);
|
for row in group {
|
||||||
for row in $group {
|
let idx: i64 = row.get(0);
|
||||||
let idx: i64 = row.get(0);
|
let name: String = row.get(1);
|
||||||
let name: String = row.get(1);
|
let owner_id: String = row.get(2);
|
||||||
let owner_id: String = row.get(2);
|
e.field(
|
||||||
$e = $e.field(
|
format!("{}. {}", idx, name),
|
||||||
format!("{}. {}", idx, name),
|
format!(" by <@{}>", owner_id),
|
||||||
format!(" by <@{}>", owner_id),
|
false,
|
||||||
false,
|
);
|
||||||
);
|
}
|
||||||
}
|
e
|
||||||
$e
|
|
||||||
}};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[command]
|
#[command]
|
||||||
@@ -276,10 +271,11 @@ pub async fn tlist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul
|
|||||||
let message = msg
|
let message = msg
|
||||||
.channel_id
|
.channel_id
|
||||||
.send_message(ctx, |m| {
|
.send_message(ctx, |m| {
|
||||||
m.embed(|mut e| make_embed!(e, cur, groups[cur - 1]))
|
m.set_embed(make_list_embed(cur, groups[cur - 1]))
|
||||||
.components(|c| make_terminal_components!(c, "first", groups.len()))
|
.set_components(make_terminal_components("first", groups.len()))
|
||||||
})
|
})
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let mut collector = ComponentInteractionCollectorBuilder::new(&ctx)
|
let mut collector = ComponentInteractionCollectorBuilder::new(&ctx)
|
||||||
.timeout(Duration::from_secs(90))
|
.timeout(Duration::from_secs(90))
|
||||||
.author_id(msg.author.id)
|
.author_id(msg.author.id)
|
||||||
@@ -287,8 +283,7 @@ pub async fn tlist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul
|
|||||||
.await;
|
.await;
|
||||||
|
|
||||||
while let Some(interaction) = collector.next().await {
|
while let Some(interaction) = collector.next().await {
|
||||||
let custom_id = interaction.data.custom_id.as_ref();
|
match interaction.data.custom_id.as_ref() {
|
||||||
match custom_id {
|
|
||||||
"next" => {
|
"next" => {
|
||||||
if cur != groups.len() {
|
if cur != groups.len() {
|
||||||
cur += 1;
|
cur += 1;
|
||||||
@@ -296,14 +291,11 @@ pub async fn tlist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul
|
|||||||
.create_interaction_response(&ctx, |r| {
|
.create_interaction_response(&ctx, |r| {
|
||||||
r.kind(InteractionResponseType::UpdateMessage)
|
r.kind(InteractionResponseType::UpdateMessage)
|
||||||
.interaction_response_data(|m| {
|
.interaction_response_data(|m| {
|
||||||
m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1]))
|
m.add_embed(make_list_embed(cur, groups[cur - 1]))
|
||||||
.components(|c| {
|
.set_components(make_terminal_components(
|
||||||
make_terminal_components!(
|
if cur == groups.len() { "last" } else { "mid" },
|
||||||
c,
|
groups.len(),
|
||||||
if cur == groups.len() { "last" } else { "mid" },
|
))
|
||||||
groups.len()
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.await;
|
.await;
|
||||||
@@ -316,14 +308,11 @@ pub async fn tlist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul
|
|||||||
.create_interaction_response(&ctx, |r| {
|
.create_interaction_response(&ctx, |r| {
|
||||||
r.kind(InteractionResponseType::UpdateMessage)
|
r.kind(InteractionResponseType::UpdateMessage)
|
||||||
.interaction_response_data(|m| {
|
.interaction_response_data(|m| {
|
||||||
m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1]))
|
m.add_embed(make_list_embed(cur, groups[cur - 1]))
|
||||||
.components(|c| {
|
.set_components(make_terminal_components(
|
||||||
make_terminal_components!(
|
if cur == 1 { "first" } else { "mid" },
|
||||||
c,
|
groups.len(),
|
||||||
if cur == 1 { "first" } else { "mid" },
|
))
|
||||||
groups.len()
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.await;
|
.await;
|
||||||
@@ -335,10 +324,8 @@ pub async fn tlist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul
|
|||||||
.create_interaction_response(&ctx, |r| {
|
.create_interaction_response(&ctx, |r| {
|
||||||
r.kind(InteractionResponseType::UpdateMessage)
|
r.kind(InteractionResponseType::UpdateMessage)
|
||||||
.interaction_response_data(|m| {
|
.interaction_response_data(|m| {
|
||||||
m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1]))
|
m.add_embed(make_list_embed(cur, groups[cur - 1]))
|
||||||
.components(|c| {
|
.set_components(make_terminal_components("first", groups.len()))
|
||||||
make_terminal_components!(c, "first", groups.len())
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.await;
|
.await;
|
||||||
@@ -349,10 +336,8 @@ pub async fn tlist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul
|
|||||||
.create_interaction_response(&ctx, |r| {
|
.create_interaction_response(&ctx, |r| {
|
||||||
r.kind(InteractionResponseType::UpdateMessage)
|
r.kind(InteractionResponseType::UpdateMessage)
|
||||||
.interaction_response_data(|m| {
|
.interaction_response_data(|m| {
|
||||||
m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1]))
|
m.add_embed(make_list_embed(cur, groups[cur - 1]))
|
||||||
.components(|c| {
|
.set_components(make_terminal_components("last", groups.len()))
|
||||||
make_terminal_components!(c, "last", groups.len())
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.await;
|
.await;
|
||||||
@@ -367,20 +352,17 @@ pub async fn tlist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResul
|
|||||||
.create_interaction_response(&ctx, |r| {
|
.create_interaction_response(&ctx, |r| {
|
||||||
r.kind(InteractionResponseType::UpdateMessage)
|
r.kind(InteractionResponseType::UpdateMessage)
|
||||||
.interaction_response_data(|m| {
|
.interaction_response_data(|m| {
|
||||||
m.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1]))
|
m.add_embed(make_list_embed(cur, groups[cur - 1]))
|
||||||
.components(|c| {
|
.set_components(make_terminal_components(
|
||||||
make_terminal_components!(
|
if cur == 1 {
|
||||||
c,
|
"first"
|
||||||
if cur == 1 {
|
} else if cur == groups.len() {
|
||||||
"first"
|
"last"
|
||||||
} else if cur == groups.len() {
|
} else {
|
||||||
"last"
|
"mid"
|
||||||
} else {
|
},
|
||||||
"mid"
|
groups.len(),
|
||||||
},
|
))
|
||||||
groups.len()
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.await;
|
.await;
|
||||||
|
60
src/lib/components.rs
Normal file
60
src/lib/components.rs
Normal file
@@ -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
|
||||||
|
}
|
1
src/lib/mod.rs
Normal file
1
src/lib/mod.rs
Normal file
@@ -0,0 +1 @@
|
|||||||
|
pub mod components;
|
@@ -1,5 +1,6 @@
|
|||||||
mod commands;
|
mod commands;
|
||||||
mod handler;
|
mod handler;
|
||||||
|
mod lib;
|
||||||
use commands::count::*;
|
use commands::count::*;
|
||||||
use commands::general::*;
|
use commands::general::*;
|
||||||
use commands::minigames::*;
|
use commands::minigames::*;
|
||||||
|
Reference in New Issue
Block a user