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:
19
Cargo.lock
generated
19
Cargo.lock
generated
@@ -123,15 +123,14 @@ dependencies = [
|
|||||||
"num-integer",
|
"num-integer",
|
||||||
"num-traits",
|
"num-traits",
|
||||||
"serde",
|
"serde",
|
||||||
"time",
|
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "command_attr"
|
name = "command_attr"
|
||||||
version = "0.3.7"
|
version = "0.3.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8a6c3666f685cb1efc0628b8c984dbad9c372d080450736c7732089c385ed81d"
|
checksum = "9e74a021f9d0b577821bf9f5b1a2be88677e95ee05713e5d44fb4236cfa1744c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -1057,9 +1056,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serenity"
|
name = "serenity"
|
||||||
version = "0.10.8"
|
version = "0.10.10"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b68c1f5dbe25b32516f3f104726a9e8e3a96cf5960a106213241738ffe108f81"
|
checksum = "dde86919535c6047e055d512641c5241320c01cb8fee54f1e5ba77c939a0ec23"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"async-tungstenite",
|
"async-tungstenite",
|
||||||
@@ -1196,16 +1195,6 @@ dependencies = [
|
|||||||
"unicode-xid",
|
"unicode-xid",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "time"
|
|
||||||
version = "0.1.43"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
"winapi",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tinyvec"
|
name = "tinyvec"
|
||||||
version = "1.2.0"
|
version = "1.2.0"
|
||||||
|
@@ -11,7 +11,7 @@ tokio-postgres = "*"
|
|||||||
rand = "*"
|
rand = "*"
|
||||||
|
|
||||||
[dependencies.serenity]
|
[dependencies.serenity]
|
||||||
version = "0.10.*"
|
version = "0.10.10"
|
||||||
features = ["cache", "framework", "standard_framework", "rustls_backend", "unstable_discord_api", "collector"]
|
features = ["cache", "framework", "standard_framework", "rustls_backend", "unstable_discord_api", "collector"]
|
||||||
|
|
||||||
[dependencies.tokio]
|
[dependencies.tokio]
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
use crate::commands::macros::*;
|
||||||
use core::time::Duration;
|
use core::time::Duration;
|
||||||
use serenity::{
|
use serenity::{
|
||||||
collector::component_interaction_collector::ComponentInteractionCollectorBuilder,
|
collector::component_interaction_collector::ComponentInteractionCollectorBuilder,
|
||||||
@@ -5,7 +6,7 @@ use serenity::{
|
|||||||
futures::StreamExt,
|
futures::StreamExt,
|
||||||
model::{
|
model::{
|
||||||
channel::ReactionType,
|
channel::ReactionType,
|
||||||
interactions::{ButtonStyle, InteractionData},
|
interactions::{message_component::ButtonStyle, InteractionResponseType},
|
||||||
prelude::*,
|
prelude::*,
|
||||||
},
|
},
|
||||||
prelude::*,
|
prelude::*,
|
||||||
@@ -193,43 +194,27 @@ macro_rules! make_embed {
|
|||||||
$e = $e.field(
|
$e = $e.field(
|
||||||
format!("{}. {}", idx, name),
|
format!("{}. {}", idx, name),
|
||||||
format!(" by <@{}>", owner_id),
|
format!(" by <@{}>", owner_id),
|
||||||
true,
|
false,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
$e
|
$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]
|
#[command]
|
||||||
#[aliases("clist")]
|
#[aliases("cls")]
|
||||||
pub async fn clist(ctx: &Context, msg: &Message, _: Args) -> CommandResult {
|
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 data_read = ctx.data.read().await;
|
||||||
let db = data_read
|
let db = data_read
|
||||||
.get::<crate::Database>()
|
.get::<crate::Database>()
|
||||||
@@ -245,14 +230,14 @@ pub async fn clist(ctx: &Context, msg: &Message, _: Args) -> CommandResult {
|
|||||||
msg.reply(ctx, "No words stored").await?;
|
msg.reply(ctx, "No words stored").await?;
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
let groups: Vec<&[Row]> = rows.chunks(5).collect();
|
let groups: Vec<&[Row]> = rows.chunks(size).collect();
|
||||||
let mut cur = 1;
|
let mut cur = 1;
|
||||||
|
|
||||||
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.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?;
|
.await?;
|
||||||
let mut collector = ComponentInteractionCollectorBuilder::new(&ctx)
|
let mut collector = ComponentInteractionCollectorBuilder::new(&ctx)
|
||||||
@@ -261,56 +246,104 @@ pub async fn clist(ctx: &Context, msg: &Message, _: Args) -> CommandResult {
|
|||||||
.message_id(message.id)
|
.message_id(message.id)
|
||||||
.await;
|
.await;
|
||||||
while let Some(interaction) = collector.next().await {
|
while let Some(interaction) = collector.next().await {
|
||||||
if let InteractionData::MessageComponent(component) = interaction.data.as_ref().unwrap() {
|
match interaction.data.custom_id.as_ref() {
|
||||||
match component.custom_id.as_ref() {
|
"next" => {
|
||||||
"next" => {
|
if cur != groups.len() {
|
||||||
if cur != groups.len() {
|
cur += 1;
|
||||||
cur += 1;
|
let _ = interaction
|
||||||
let _ = interaction
|
.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.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1]))
|
.components(|c| {
|
||||||
.components(|c| {
|
make_terminal_components!(
|
||||||
make_terminal_components!(
|
c,
|
||||||
c,
|
if cur == groups.len() { "last" } else { "mid" },
|
||||||
if cur == groups.len() {
|
groups.len()
|
||||||
"last"
|
)
|
||||||
} else {
|
})
|
||||||
"mid"
|
})
|
||||||
}
|
})
|
||||||
)
|
.await;
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
.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(())
|
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 general;
|
||||||
pub mod minigames;
|
pub mod minigames;
|
||||||
pub mod tags;
|
pub mod tags;
|
||||||
|
pub mod macros;
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
use crate::commands::macros::*;
|
||||||
use core::time::Duration;
|
use core::time::Duration;
|
||||||
use serenity::{
|
use serenity::{
|
||||||
collector::component_interaction_collector::ComponentInteractionCollectorBuilder,
|
collector::component_interaction_collector::ComponentInteractionCollectorBuilder,
|
||||||
@@ -5,7 +6,7 @@ use serenity::{
|
|||||||
futures::StreamExt,
|
futures::StreamExt,
|
||||||
model::{
|
model::{
|
||||||
channel::ReactionType,
|
channel::ReactionType,
|
||||||
interactions::{ButtonStyle, InteractionData},
|
interactions::{message_component::ButtonStyle, InteractionResponseType},
|
||||||
prelude::*,
|
prelude::*,
|
||||||
},
|
},
|
||||||
prelude::*,
|
prelude::*,
|
||||||
@@ -233,43 +234,27 @@ macro_rules! make_embed {
|
|||||||
$e = $e.field(
|
$e = $e.field(
|
||||||
format!("{}. {}", idx, name),
|
format!("{}. {}", idx, name),
|
||||||
format!(" by <@{}>", owner_id),
|
format!(" by <@{}>", owner_id),
|
||||||
true,
|
false,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
$e
|
$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]
|
#[command]
|
||||||
#[aliases("tls")]
|
#[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 data_read = ctx.data.read().await;
|
||||||
let db = data_read
|
let db = data_read
|
||||||
.get::<crate::Database>()
|
.get::<crate::Database>()
|
||||||
@@ -285,14 +270,14 @@ pub async fn tlist(ctx: &Context, msg: &Message, _: Args) -> CommandResult {
|
|||||||
msg.reply(ctx, "No tags stored").await?;
|
msg.reply(ctx, "No tags stored").await?;
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
let groups: Vec<&[Row]> = rows.chunks(5).collect();
|
let groups: Vec<&[Row]> = rows.chunks(size).collect();
|
||||||
let mut cur = 1;
|
let mut cur = 1;
|
||||||
|
|
||||||
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.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?;
|
.await?;
|
||||||
let mut collector = ComponentInteractionCollectorBuilder::new(&ctx)
|
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)
|
.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 {
|
||||||
if let InteractionData::MessageComponent(component) = interaction.data.as_ref().unwrap() {
|
let custom_id = interaction.data.custom_id.as_ref();
|
||||||
match component.custom_id.as_ref() {
|
match custom_id {
|
||||||
"next" => {
|
"next" => {
|
||||||
if cur != groups.len() {
|
if cur != groups.len() {
|
||||||
cur += 1;
|
cur += 1;
|
||||||
let _ = interaction
|
let _ = interaction
|
||||||
.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.create_embed(|mut e| make_embed!(e, cur, groups[cur - 1]))
|
||||||
.components(|c| {
|
.components(|c| {
|
||||||
make_terminal_components!(
|
make_terminal_components!(
|
||||||
c,
|
c,
|
||||||
if cur == groups.len() {
|
if cur == groups.len() { "last" } else { "mid" },
|
||||||
"last"
|
groups.len()
|
||||||
} else {
|
)
|
||||||
"mid"
|
})
|
||||||
}
|
})
|
||||||
)
|
})
|
||||||
})
|
.await;
|
||||||
})
|
|
||||||
})
|
|
||||||
.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(())
|
Ok(())
|
||||||
|
@@ -2,15 +2,7 @@ mod count;
|
|||||||
mod interactions;
|
mod interactions;
|
||||||
use serenity::{
|
use serenity::{
|
||||||
async_trait,
|
async_trait,
|
||||||
model::{
|
model::{channel::Message, event::ResumedEvent, gateway::Ready},
|
||||||
channel::Message,
|
|
||||||
event::ResumedEvent,
|
|
||||||
gateway::Ready,
|
|
||||||
interactions::{
|
|
||||||
ApplicationCommand, Interaction, InteractionData, InteractionResponseType,
|
|
||||||
InteractionType,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
prelude::*,
|
prelude::*,
|
||||||
};
|
};
|
||||||
use tracing::info;
|
use tracing::info;
|
||||||
@@ -19,12 +11,8 @@ pub struct Handler;
|
|||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl EventHandler for Handler {
|
impl EventHandler for Handler {
|
||||||
async fn ready(&self, ctx: Context, ready: Ready) {
|
async fn ready(&self, _: Context, ready: Ready) {
|
||||||
info!("{} connected bhay", ready.user.name);
|
println!("{} connected bhay", ready.user.name);
|
||||||
let _ = ApplicationCommand::create_global_application_commands(&ctx.http, |commands| {
|
|
||||||
commands.set_application_commands(interactions::general())
|
|
||||||
})
|
|
||||||
.await;
|
|
||||||
}
|
}
|
||||||
async fn resume(&self, _: Context, _: ResumedEvent) {
|
async fn resume(&self, _: Context, _: ResumedEvent) {
|
||||||
info!("how th when the");
|
info!("how th when the");
|
||||||
@@ -37,23 +25,4 @@ impl EventHandler for Handler {
|
|||||||
.clone();
|
.clone();
|
||||||
count::count(msg, db_client).await;
|
count::count(msg, db_client).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn interaction_create(&self, ctx: Context, interaction: Interaction) {
|
|
||||||
if interaction.kind == InteractionType::ApplicationCommand {
|
|
||||||
if let Some(InteractionData::ApplicationCommand(data)) = interaction.data.as_ref() {
|
|
||||||
if let Err(why) = interaction
|
|
||||||
.create_interaction_response(&ctx.http, |response| {
|
|
||||||
response
|
|
||||||
.kind(InteractionResponseType::ChannelMessageWithSource)
|
|
||||||
.interaction_response_data(|message| {
|
|
||||||
interactions::responses(data.name.to_string(), message)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
.await
|
|
||||||
{
|
|
||||||
println!("Cannot respond to slash command: {}", why);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user