soundboard working pretty nicely
This commit is contained in:
parent
b4b8d16bcc
commit
87301e4212
@ -68,7 +68,7 @@ pub fn command(attr: TokenStream, input: TokenStream) -> TokenStream {
|
|||||||
_ => {
|
_ => {
|
||||||
match_options!(name, values, options, span => [
|
match_options!(name, values, options, span => [
|
||||||
aliases;
|
aliases;
|
||||||
usage;
|
group;
|
||||||
required_permissions;
|
required_permissions;
|
||||||
allow_slash
|
allow_slash
|
||||||
]);
|
]);
|
||||||
@ -79,7 +79,7 @@ pub fn command(attr: TokenStream, input: TokenStream) -> TokenStream {
|
|||||||
let Options {
|
let Options {
|
||||||
aliases,
|
aliases,
|
||||||
description,
|
description,
|
||||||
usage,
|
group,
|
||||||
examples,
|
examples,
|
||||||
required_permissions,
|
required_permissions,
|
||||||
allow_slash,
|
allow_slash,
|
||||||
@ -108,7 +108,10 @@ pub fn command(attr: TokenStream, input: TokenStream) -> TokenStream {
|
|||||||
|
|
||||||
let arg_idents = cmd_args
|
let arg_idents = cmd_args
|
||||||
.iter()
|
.iter()
|
||||||
.map(|arg| n.with_suffix(arg.name.as_str()).with_suffix(ARG))
|
.map(|arg| {
|
||||||
|
n.with_suffix(arg.name.replace(" ", "_").replace("-", "_").as_str())
|
||||||
|
.with_suffix(ARG)
|
||||||
|
})
|
||||||
.collect::<Vec<Ident>>();
|
.collect::<Vec<Ident>>();
|
||||||
|
|
||||||
let mut tokens = cmd_args
|
let mut tokens = cmd_args
|
||||||
@ -146,7 +149,7 @@ pub fn command(attr: TokenStream, input: TokenStream) -> TokenStream {
|
|||||||
fun: #name,
|
fun: #name,
|
||||||
names: &[#_name, #(#aliases),*],
|
names: &[#_name, #(#aliases),*],
|
||||||
desc: #description,
|
desc: #description,
|
||||||
usage: #usage,
|
group: #group,
|
||||||
examples: &[#(#examples),*],
|
examples: &[#(#examples),*],
|
||||||
required_permissions: #required_permissions,
|
required_permissions: #required_permissions,
|
||||||
allow_slash: #allow_slash,
|
allow_slash: #allow_slash,
|
||||||
|
@ -290,7 +290,7 @@ impl Default for Arg {
|
|||||||
pub(crate) struct Options {
|
pub(crate) struct Options {
|
||||||
pub aliases: Vec<String>,
|
pub aliases: Vec<String>,
|
||||||
pub description: String,
|
pub description: String,
|
||||||
pub usage: AsOption<String>,
|
pub group: AsOption<String>,
|
||||||
pub examples: Vec<String>,
|
pub examples: Vec<String>,
|
||||||
pub required_permissions: PermissionLevel,
|
pub required_permissions: PermissionLevel,
|
||||||
pub allow_slash: bool,
|
pub allow_slash: bool,
|
||||||
|
@ -108,11 +108,9 @@ impl CreateGenericResponse {
|
|||||||
|
|
||||||
pub fn embed<F: FnOnce(&mut CreateEmbed) -> &mut CreateEmbed>(mut self, f: F) -> Self {
|
pub fn embed<F: FnOnce(&mut CreateEmbed) -> &mut CreateEmbed>(mut self, f: F) -> Self {
|
||||||
let mut embed = CreateEmbed::default();
|
let mut embed = CreateEmbed::default();
|
||||||
|
|
||||||
f(&mut embed);
|
f(&mut embed);
|
||||||
|
|
||||||
self.embed = Some(embed);
|
self.embed = Some(embed);
|
||||||
|
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,11 +119,9 @@ impl CreateGenericResponse {
|
|||||||
f: F,
|
f: F,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let mut components = CreateComponents::default();
|
let mut components = CreateComponents::default();
|
||||||
|
|
||||||
f(&mut components);
|
f(&mut components);
|
||||||
|
|
||||||
self.components = Some(components);
|
self.components = Some(components);
|
||||||
|
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -344,12 +340,15 @@ impl Arg {
|
|||||||
|
|
||||||
pub struct Command {
|
pub struct Command {
|
||||||
pub fun: CommandFn,
|
pub fun: CommandFn,
|
||||||
|
|
||||||
pub names: &'static [&'static str],
|
pub names: &'static [&'static str],
|
||||||
|
|
||||||
pub desc: &'static str,
|
pub desc: &'static str,
|
||||||
pub usage: Option<&'static str>,
|
|
||||||
pub examples: &'static [&'static str],
|
pub examples: &'static [&'static str],
|
||||||
pub required_permissions: PermissionLevel,
|
pub group: Option<&'static str>,
|
||||||
|
|
||||||
pub allow_slash: bool,
|
pub allow_slash: bool,
|
||||||
|
pub required_permissions: PermissionLevel,
|
||||||
pub args: &'static [&'static Arg],
|
pub args: &'static [&'static Arg],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
184
src/main.rs
184
src/main.rs
@ -48,6 +48,7 @@ use dashmap::DashMap;
|
|||||||
|
|
||||||
use std::{collections::HashMap, convert::TryFrom, env, sync::Arc, time::Duration};
|
use std::{collections::HashMap, convert::TryFrom, env, sync::Arc, time::Duration};
|
||||||
|
|
||||||
|
use serenity::model::prelude::InteractionResponseType;
|
||||||
use tokio::sync::{MutexGuard, RwLock};
|
use tokio::sync::{MutexGuard, RwLock};
|
||||||
|
|
||||||
struct MySQL;
|
struct MySQL;
|
||||||
@ -1137,12 +1138,170 @@ async fn list_sounds(
|
|||||||
|
|
||||||
#[command("soundboard")]
|
#[command("soundboard")]
|
||||||
#[aliases("board")]
|
#[aliases("board")]
|
||||||
#[description("Get a menu of sounds in this server with buttons to play them")]
|
#[description("Get a menu of sounds with buttons to play them")]
|
||||||
|
#[arg(
|
||||||
|
name = "1",
|
||||||
|
description = "Query for sound button 1",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "2",
|
||||||
|
description = "Query for sound button 2",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "3",
|
||||||
|
description = "Query for sound button 3",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "4",
|
||||||
|
description = "Query for sound button 4",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "5",
|
||||||
|
description = "Query for sound button 5",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "6",
|
||||||
|
description = "Query for sound button 6",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "7",
|
||||||
|
description = "Query for sound button 7",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "8",
|
||||||
|
description = "Query for sound button 8",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "9",
|
||||||
|
description = "Query for sound button 9",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "10",
|
||||||
|
description = "Query for sound button 10",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "11",
|
||||||
|
description = "Query for sound button 11",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "12",
|
||||||
|
description = "Query for sound button 12",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "13",
|
||||||
|
description = "Query for sound button 13",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "14",
|
||||||
|
description = "Query for sound button 14",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "15",
|
||||||
|
description = "Query for sound button 15",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "16",
|
||||||
|
description = "Query for sound button 16",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "17",
|
||||||
|
description = "Query for sound button 17",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "18",
|
||||||
|
description = "Query for sound button 18",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "19",
|
||||||
|
description = "Query for sound button 19",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "20",
|
||||||
|
description = "Query for sound button 20",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "21",
|
||||||
|
description = "Query for sound button 21",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "22",
|
||||||
|
description = "Query for sound button 22",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "23",
|
||||||
|
description = "Query for sound button 23",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "24",
|
||||||
|
description = "Query for sound button 24",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
|
#[arg(
|
||||||
|
name = "25",
|
||||||
|
description = "Query for sound button 25",
|
||||||
|
kind = "String",
|
||||||
|
required = false
|
||||||
|
)]
|
||||||
async fn soundboard(
|
async fn soundboard(
|
||||||
ctx: &Context,
|
ctx: &Context,
|
||||||
invoke: &(dyn CommandInvoke + Sync + Send),
|
invoke: &(dyn CommandInvoke + Sync + Send),
|
||||||
_args: Args,
|
args: Args,
|
||||||
) -> CommandResult {
|
) -> CommandResult {
|
||||||
|
if let Some(interaction) = invoke.interaction() {
|
||||||
|
let _ = interaction
|
||||||
|
.create_interaction_response(&ctx, |r| {
|
||||||
|
r.kind(InteractionResponseType::DeferredChannelMessageWithSource)
|
||||||
|
})
|
||||||
|
.await;
|
||||||
|
}
|
||||||
|
|
||||||
let pool = ctx
|
let pool = ctx
|
||||||
.data
|
.data
|
||||||
.read()
|
.read()
|
||||||
@ -1151,13 +1310,28 @@ async fn soundboard(
|
|||||||
.cloned()
|
.cloned()
|
||||||
.expect("Could not get SQLPool from data");
|
.expect("Could not get SQLPool from data");
|
||||||
|
|
||||||
let sounds = Sound::get_guild_sounds(invoke.guild_id().unwrap(), pool).await?;
|
let mut sounds = vec![];
|
||||||
|
|
||||||
|
for n in 1..25 {
|
||||||
|
let search = Sound::search_for_sound(
|
||||||
|
args.named(&n.to_string()).unwrap_or(&"".to_string()),
|
||||||
|
invoke.guild_id().unwrap(),
|
||||||
|
invoke.author_id(),
|
||||||
|
pool.clone(),
|
||||||
|
true,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
if let Some(sound) = search.first() {
|
||||||
|
sounds.push(sound.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
invoke
|
invoke
|
||||||
.respond(
|
.followup(
|
||||||
ctx.http.clone(),
|
ctx.http.clone(),
|
||||||
CreateGenericResponse::new()
|
CreateGenericResponse::new()
|
||||||
.content("Select a sound from below:")
|
.content("**Play a sound:**")
|
||||||
.components(|c| {
|
.components(|c| {
|
||||||
for row in sounds.as_slice().chunks(5) {
|
for row in sounds.as_slice().chunks(5) {
|
||||||
let mut action_row: CreateActionRow = Default::default();
|
let mut action_row: CreateActionRow = Default::default();
|
||||||
|
@ -111,6 +111,7 @@ WHERE
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
pub struct Sound {
|
pub struct Sound {
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub id: u32,
|
pub id: u32,
|
||||||
|
Loading…
Reference in New Issue
Block a user