just made a huge fucking mess
added SelectMenu for embeds removed interactions (for now) stupid macros need to organize this shit asap
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
use crate::commands::macros::*;
|
||||
use core::time::Duration;
|
||||
use serenity::{
|
||||
collector::component_interaction_collector::ComponentInteractionCollectorBuilder,
|
||||
@@ -5,7 +6,7 @@ use serenity::{
|
||||
futures::StreamExt,
|
||||
model::{
|
||||
channel::ReactionType,
|
||||
interactions::{ButtonStyle, InteractionData},
|
||||
interactions::{message_component::ButtonStyle, InteractionResponseType},
|
||||
prelude::*,
|
||||
},
|
||||
prelude::*,
|
||||
@@ -193,43 +194,27 @@ macro_rules! make_embed {
|
||||
$e = $e.field(
|
||||
format!("{}. {}", idx, name),
|
||||
format!(" by <@{}>", owner_id),
|
||||
true,
|
||||
false,
|
||||
);
|
||||
}
|
||||
$e
|
||||
}};
|
||||
}
|
||||
|
||||
macro_rules! make_terminal_components {
|
||||
($c: expr, $terminal: expr ) => {{
|
||||
$c.create_action_row(|ar| {
|
||||
ar.create_button(|b| {
|
||||
b.style(ButtonStyle::Primary)
|
||||
.label("Prev")
|
||||
.emoji(ReactionType::Unicode("\u{2B05}".to_string()))
|
||||
.custom_id("prev")
|
||||
.disabled($terminal == "first")
|
||||
})
|
||||
.create_button(|b| {
|
||||
b.style(ButtonStyle::Primary)
|
||||
.label("Next")
|
||||
.emoji(ReactionType::Unicode("\u{27A1}".to_string()))
|
||||
.custom_id("next")
|
||||
.disabled($terminal == "last")
|
||||
})
|
||||
.create_button(|b| {
|
||||
b.style(ButtonStyle::Danger)
|
||||
.label("Delete")
|
||||
.emoji(ReactionType::Unicode("\u{1F5D1}".to_string()))
|
||||
.custom_id("delete")
|
||||
})
|
||||
})
|
||||
}};
|
||||
}
|
||||
|
||||
#[command]
|
||||
#[aliases("clist")]
|
||||
pub async fn clist(ctx: &Context, msg: &Message, _: Args) -> CommandResult {
|
||||
#[aliases("cls")]
|
||||
pub async fn clist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
|
||||
let size = if args.len() > 0 {
|
||||
args.single::<usize>()?
|
||||
} else {
|
||||
5usize
|
||||
};
|
||||
|
||||
if size > 15 {
|
||||
msg.reply(ctx, "Please input a number less than 15").await?;
|
||||
()
|
||||
}
|
||||
|
||||
let data_read = ctx.data.read().await;
|
||||
let db = data_read
|
||||
.get::<crate::Database>()
|
||||
@@ -245,14 +230,14 @@ pub async fn clist(ctx: &Context, msg: &Message, _: Args) -> CommandResult {
|
||||
msg.reply(ctx, "No words stored").await?;
|
||||
return Ok(());
|
||||
}
|
||||
let groups: Vec<&[Row]> = rows.chunks(5).collect();
|
||||
let groups: Vec<&[Row]> = rows.chunks(size).collect();
|
||||
let mut cur = 1;
|
||||
|
||||
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"))
|
||||
.components(|c| make_terminal_components!(c, "first", groups.len()))
|
||||
})
|
||||
.await?;
|
||||
let mut collector = ComponentInteractionCollectorBuilder::new(&ctx)
|
||||
@@ -261,56 +246,104 @@ pub async fn clist(ctx: &Context, msg: &Message, _: Args) -> CommandResult {
|
||||
.message_id(message.id)
|
||||
.await;
|
||||
while let Some(interaction) = collector.next().await {
|
||||
if let InteractionData::MessageComponent(component) = interaction.data.as_ref().unwrap() {
|
||||
match component.custom_id.as_ref() {
|
||||
"next" => {
|
||||
if cur != groups.len() {
|
||||
cur += 1;
|
||||
let _ = interaction
|
||||
.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"
|
||||
}
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
.await;
|
||||
}
|
||||
match interaction.data.custom_id.as_ref() {
|
||||
"next" => {
|
||||
if cur != groups.len() {
|
||||
cur += 1;
|
||||
let _ = interaction
|
||||
.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()
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
.await;
|
||||
}
|
||||
"prev" => {
|
||||
if cur != 1 {
|
||||
cur -= 1;
|
||||
let _ = interaction
|
||||
.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" }
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
.await;
|
||||
}
|
||||
}
|
||||
"delete" => {
|
||||
message.delete(ctx).await?;
|
||||
msg.delete(ctx).await?;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
"prev" => {
|
||||
if cur != 1 {
|
||||
cur -= 1;
|
||||
let _ = interaction
|
||||
.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()
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
.await;
|
||||
}
|
||||
}
|
||||
"first" => {
|
||||
cur = 1;
|
||||
let _ = interaction
|
||||
.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())
|
||||
})
|
||||
})
|
||||
})
|
||||
.await;
|
||||
}
|
||||
"last" => {
|
||||
cur = groups.len();
|
||||
let _ = interaction
|
||||
.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())
|
||||
})
|
||||
})
|
||||
})
|
||||
.await;
|
||||
}
|
||||
"delete" => {
|
||||
message.delete(ctx).await?;
|
||||
msg.delete(ctx).await?;
|
||||
}
|
||||
"range" => {
|
||||
cur = interaction.data.values[0].parse().unwrap();
|
||||
let _ = interaction
|
||||
.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()
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
.await;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
|
57
src/commands/macros.rs
Normal file
57
src/commands/macros.rs
Normal file
@@ -0,0 +1,57 @@
|
||||
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,3 +2,4 @@ pub mod count;
|
||||
pub mod general;
|
||||
pub mod minigames;
|
||||
pub mod tags;
|
||||
pub mod macros;
|
||||
|
@@ -1,3 +1,4 @@
|
||||
use crate::commands::macros::*;
|
||||
use core::time::Duration;
|
||||
use serenity::{
|
||||
collector::component_interaction_collector::ComponentInteractionCollectorBuilder,
|
||||
@@ -5,7 +6,7 @@ use serenity::{
|
||||
futures::StreamExt,
|
||||
model::{
|
||||
channel::ReactionType,
|
||||
interactions::{ButtonStyle, InteractionData},
|
||||
interactions::{message_component::ButtonStyle, InteractionResponseType},
|
||||
prelude::*,
|
||||
},
|
||||
prelude::*,
|
||||
@@ -233,43 +234,27 @@ macro_rules! make_embed {
|
||||
$e = $e.field(
|
||||
format!("{}. {}", idx, name),
|
||||
format!(" by <@{}>", owner_id),
|
||||
true,
|
||||
false,
|
||||
);
|
||||
}
|
||||
$e
|
||||
}};
|
||||
}
|
||||
|
||||
macro_rules! make_terminal_components {
|
||||
($c: expr, $terminal: expr ) => {{
|
||||
$c.create_action_row(|ar| {
|
||||
ar.create_button(|b| {
|
||||
b.style(ButtonStyle::Primary)
|
||||
.label("Prev")
|
||||
.emoji(ReactionType::Unicode("\u{2B05}".to_string()))
|
||||
.custom_id("prev")
|
||||
.disabled($terminal == "first")
|
||||
})
|
||||
.create_button(|b| {
|
||||
b.style(ButtonStyle::Primary)
|
||||
.label("Next")
|
||||
.emoji(ReactionType::Unicode("\u{27A1}".to_string()))
|
||||
.custom_id("next")
|
||||
.disabled($terminal == "last")
|
||||
})
|
||||
.create_button(|b| {
|
||||
b.style(ButtonStyle::Danger)
|
||||
.label("Delete")
|
||||
.emoji(ReactionType::Unicode("\u{1F5D1}".to_string()))
|
||||
.custom_id("delete")
|
||||
})
|
||||
})
|
||||
}};
|
||||
}
|
||||
|
||||
#[command]
|
||||
#[aliases("tls")]
|
||||
pub async fn tlist(ctx: &Context, msg: &Message, _: Args) -> CommandResult {
|
||||
pub async fn tlist(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
|
||||
let size = if args.len() > 0 {
|
||||
args.single::<usize>()?
|
||||
} else {
|
||||
5usize
|
||||
};
|
||||
|
||||
if size > 15 {
|
||||
msg.reply(ctx, "Please input a number less than 15").await?;
|
||||
()
|
||||
}
|
||||
|
||||
let data_read = ctx.data.read().await;
|
||||
let db = data_read
|
||||
.get::<crate::Database>()
|
||||
@@ -285,14 +270,14 @@ pub async fn tlist(ctx: &Context, msg: &Message, _: Args) -> CommandResult {
|
||||
msg.reply(ctx, "No tags stored").await?;
|
||||
return Ok(());
|
||||
}
|
||||
let groups: Vec<&[Row]> = rows.chunks(5).collect();
|
||||
let groups: Vec<&[Row]> = rows.chunks(size).collect();
|
||||
let mut cur = 1;
|
||||
|
||||
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"))
|
||||
.components(|c| make_terminal_components!(c, "first", groups.len()))
|
||||
})
|
||||
.await?;
|
||||
let mut collector = ComponentInteractionCollectorBuilder::new(&ctx)
|
||||
@@ -300,57 +285,107 @@ pub async fn tlist(ctx: &Context, msg: &Message, _: Args) -> CommandResult {
|
||||
.author_id(msg.author.id)
|
||||
.message_id(message.id)
|
||||
.await;
|
||||
|
||||
while let Some(interaction) = collector.next().await {
|
||||
if let InteractionData::MessageComponent(component) = interaction.data.as_ref().unwrap() {
|
||||
match component.custom_id.as_ref() {
|
||||
"next" => {
|
||||
if cur != groups.len() {
|
||||
cur += 1;
|
||||
let _ = interaction
|
||||
.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"
|
||||
}
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
.await;
|
||||
}
|
||||
let custom_id = interaction.data.custom_id.as_ref();
|
||||
match custom_id {
|
||||
"next" => {
|
||||
if cur != groups.len() {
|
||||
cur += 1;
|
||||
let _ = interaction
|
||||
.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()
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
.await;
|
||||
}
|
||||
"prev" => {
|
||||
if cur != 1 {
|
||||
cur -= 1;
|
||||
let _ = interaction
|
||||
.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" }
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
.await;
|
||||
}
|
||||
}
|
||||
"delete" => {
|
||||
message.delete(ctx).await?;
|
||||
msg.delete(ctx).await?;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
"prev" => {
|
||||
if cur != 1 {
|
||||
cur -= 1;
|
||||
let _ = interaction
|
||||
.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()
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
.await;
|
||||
}
|
||||
}
|
||||
"first" => {
|
||||
cur = 1;
|
||||
let _ = interaction
|
||||
.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())
|
||||
})
|
||||
})
|
||||
})
|
||||
.await;
|
||||
}
|
||||
"last" => {
|
||||
cur = groups.len();
|
||||
let _ = interaction
|
||||
.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())
|
||||
})
|
||||
})
|
||||
})
|
||||
.await;
|
||||
}
|
||||
"delete" => {
|
||||
message.delete(ctx).await?;
|
||||
msg.delete(ctx).await?;
|
||||
}
|
||||
"range" => {
|
||||
cur = interaction.data.values[0].parse().unwrap();
|
||||
let _ = interaction
|
||||
.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()
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
.await;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
|
Reference in New Issue
Block a user