unsetting greet sound. search function extracted for reuse
This commit is contained in:
parent
b14da8aad3
commit
62fe4a20a5
158
src/main.rs
158
src/main.rs
@ -86,7 +86,7 @@ lazy_static! {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[group]
|
#[group]
|
||||||
#[commands(info, help, list_sounds, change_public, search_sounds)]
|
#[commands(info, help, list_sounds, change_public, search_sounds, set_greet_sound)]
|
||||||
struct AllUsers;
|
struct AllUsers;
|
||||||
|
|
||||||
#[group]
|
#[group]
|
||||||
@ -291,6 +291,55 @@ SELECT *
|
|||||||
Ok(path_name)
|
Ok(path_name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn count_user_sounds(user_id: u64, db_pool: MySqlPool) -> Result<u32, sqlx::error::Error> {
|
||||||
|
let c = sqlx::query!(
|
||||||
|
"
|
||||||
|
SELECT COUNT(1) as count
|
||||||
|
FROM sounds
|
||||||
|
WHERE uploader_id = ?
|
||||||
|
",
|
||||||
|
user_id
|
||||||
|
)
|
||||||
|
.fetch_one(&db_pool)
|
||||||
|
.await?.count;
|
||||||
|
|
||||||
|
Ok(c as u32)
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn count_named_user_sounds(user_id: u64, name: &String, db_pool: MySqlPool) -> Result<u32, sqlx::error::Error> {
|
||||||
|
let c = sqlx::query!(
|
||||||
|
"
|
||||||
|
SELECT COUNT(1) as count
|
||||||
|
FROM sounds
|
||||||
|
WHERE
|
||||||
|
uploader_id = ? AND
|
||||||
|
name = ?
|
||||||
|
",
|
||||||
|
user_id, name
|
||||||
|
)
|
||||||
|
.fetch_one(&db_pool)
|
||||||
|
.await?.count;
|
||||||
|
|
||||||
|
Ok(c as u32)
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn set_as_greet(&self, user_id: u64, db_pool: MySqlPool) -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
sqlx::query!(
|
||||||
|
"
|
||||||
|
UPDATE users
|
||||||
|
SET
|
||||||
|
join_sound_id = ?
|
||||||
|
WHERE
|
||||||
|
user = ?
|
||||||
|
",
|
||||||
|
self.id, user_id
|
||||||
|
)
|
||||||
|
.execute(&db_pool)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
async fn commit(&self, db_pool: MySqlPool) -> Result<(), Box<dyn std::error::Error>> {
|
async fn commit(&self, db_pool: MySqlPool) -> Result<(), Box<dyn std::error::Error>> {
|
||||||
sqlx::query!(
|
sqlx::query!(
|
||||||
"
|
"
|
||||||
@ -324,38 +373,6 @@ DELETE
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn count_user_sounds(user_id: u64, db_pool: MySqlPool) -> Result<u32, sqlx::error::Error> {
|
|
||||||
let c = sqlx::query!(
|
|
||||||
"
|
|
||||||
SELECT COUNT(1) as count
|
|
||||||
FROM sounds
|
|
||||||
WHERE uploader_id = ?
|
|
||||||
",
|
|
||||||
user_id
|
|
||||||
)
|
|
||||||
.fetch_one(&db_pool)
|
|
||||||
.await?.count;
|
|
||||||
|
|
||||||
Ok(c as u32)
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn count_named_user_sounds(user_id: u64, name: &String, db_pool: MySqlPool) -> Result<u32, sqlx::error::Error> {
|
|
||||||
let c = sqlx::query!(
|
|
||||||
"
|
|
||||||
SELECT COUNT(1) as count
|
|
||||||
FROM sounds
|
|
||||||
WHERE
|
|
||||||
uploader_id = ? AND
|
|
||||||
name = ?
|
|
||||||
",
|
|
||||||
user_id, name
|
|
||||||
)
|
|
||||||
.fetch_one(&db_pool)
|
|
||||||
.await?.count;
|
|
||||||
|
|
||||||
Ok(c as u32)
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn create_anon(name: &str, src_url: &str, server_id: u64, user_id: u64, db_pool: MySqlPool) -> Result<u64, Box<dyn std::error::Error + Send>> {
|
async fn create_anon(name: &str, src_url: &str, server_id: u64, user_id: u64, db_pool: MySqlPool) -> Result<u64, Box<dyn std::error::Error + Send>> {
|
||||||
async fn process_src(src_url: &str) -> Option<Vec<u8>> {
|
async fn process_src(src_url: &str) -> Option<Vec<u8>> {
|
||||||
let future = Command::new("ffmpeg")
|
let future = Command::new("ffmpeg")
|
||||||
@ -1002,15 +1019,7 @@ async fn delete_sound(ctx: &Context, msg: &Message, args: Args) -> CommandResult
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[command("search")]
|
async fn format_search_results(search_results: Vec<Sound>, msg: &Message, ctx: &Context) -> Result<(), Box<dyn std::error::Error>> {
|
||||||
async fn search_sounds(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
|
|
||||||
let pool = ctx.data.read().await
|
|
||||||
.get::<SQLPool>().cloned().expect("Could not get SQLPool from data");
|
|
||||||
|
|
||||||
let query = args.rest();
|
|
||||||
|
|
||||||
let search_results = Sound::search_for_sound(query, *msg.guild_id.unwrap().as_u64(), *msg.author.id.as_u64(), pool, false).await?;
|
|
||||||
|
|
||||||
let mut current_character_count = 0;
|
let mut current_character_count = 0;
|
||||||
let title = "Public sounds matching filter:";
|
let title = "Public sounds matching filter:";
|
||||||
|
|
||||||
@ -1035,3 +1044,68 @@ async fn search_sounds(ctx: &Context, msg: &Message, args: Args) -> CommandResul
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[command("search")]
|
||||||
|
async fn search_sounds(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
|
||||||
|
let pool = ctx.data.read().await
|
||||||
|
.get::<SQLPool>().cloned().expect("Could not get SQLPool from data");
|
||||||
|
|
||||||
|
let query = args.rest();
|
||||||
|
|
||||||
|
let search_results = Sound::search_for_sound(query, *msg.guild_id.unwrap().as_u64(), *msg.author.id.as_u64(), pool, false).await?;
|
||||||
|
|
||||||
|
format_search_results(search_results, msg, ctx).await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[command("greet")]
|
||||||
|
async fn set_greet_sound(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
|
||||||
|
let pool = ctx.data.read().await
|
||||||
|
.get::<SQLPool>().cloned().expect("Could not get SQLPool from data");
|
||||||
|
|
||||||
|
let query = args.rest();
|
||||||
|
let user_id = *msg.author.id.as_u64();
|
||||||
|
|
||||||
|
if query.len() == 0 {
|
||||||
|
sqlx::query!(
|
||||||
|
"
|
||||||
|
UPDATE users
|
||||||
|
SET
|
||||||
|
join_sound_id = NULL
|
||||||
|
WHERE
|
||||||
|
user = ?
|
||||||
|
",
|
||||||
|
user_id
|
||||||
|
)
|
||||||
|
.execute(&pool)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
msg.channel_id.say(&ctx, "Your greet sound has been unset.").await?;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
let sound_vec = Sound::search_for_sound(query, *msg.guild_id.unwrap().as_u64(), user_id, pool.clone(), true).await?;
|
||||||
|
|
||||||
|
match sound_vec.first() {
|
||||||
|
Some(sound) => {
|
||||||
|
sound.set_as_greet(user_id, pool).await?;
|
||||||
|
|
||||||
|
msg.channel_id.say(&ctx, format!("Greet sound has been set to {} (ID {})", sound.name, sound.id)).await?;
|
||||||
|
}
|
||||||
|
|
||||||
|
None => {
|
||||||
|
msg.channel_id.say(&ctx, "Could not find a sound by that name.").await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
#[command("popular")]
|
||||||
|
async fn show_popular_sounds(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user