diff --git a/src/commands/info_cmds.rs b/src/commands/info_cmds.rs index 110e318..331a70d 100644 --- a/src/commands/info_cmds.rs +++ b/src/commands/info_cmds.rs @@ -5,16 +5,14 @@ use serenity::{client::Context, model::channel::Message}; use chrono::offset::Utc; use crate::{ + command_help, consts::{DEFAULT_PREFIX, HELP_STRINGS}, get_ctx_data, language_manager::LanguageManager, models::{GuildData, UserData}, - SQLPool, THEME_COLOR, + THEME_COLOR, }; -use levenshtein::levenshtein; - -use inflector::Inflector; use std::sync::Arc; use std::time::{SystemTime, UNIX_EPOCH}; @@ -98,43 +96,24 @@ async fn help(ctx: &Context, msg: &Message, args: String) { let (pool, lm) = get_ctx_data(&ctx).await; - let language = UserData::language_of(&msg.author, &pool).await; - let prefix = GuildData::prefix_from_id(msg.guild_id, &pool).await; + let language = UserData::language_of(&msg.author, &pool); + let prefix = GuildData::prefix_from_id(msg.guild_id, &pool); if !args.is_empty() { - let closest_match = HELP_STRINGS + let matched = HELP_STRINGS .iter() - .map(|h| (levenshtein(h.split_at(5).1, &args), h)) - .filter(|(dist, _)| dist < &3) - .min_by(|(dist_a, _), (dist_b, _)| dist_a.cmp(dist_b)) - .map(|(_, string)| string); + .filter(|h| h.split_at(5).1 == args) + .next(); - if let Some(help_str) = closest_match { - let desc = lm.get(&language, help_str); + if let Some(help_str) = matched { let command_name = help_str.split_at(5).1; - let _ = msg - .channel_id - .send_message(ctx, |m| { - m.embed(move |e| { - e.title(format!("{} Help", command_name.to_title_case())) - .description(desc.replace("{prefix}", &prefix)) - .footer(|f| { - f.text(concat!( - env!("CARGO_PKG_NAME"), - " ver ", - env!("CARGO_PKG_VERSION") - )) - }) - .color(*THEME_COLOR) - }) - }) - .await; + command_help(ctx, msg, lm, &prefix.await, &language.await, command_name).await } else { - default_help(ctx, msg, lm, &prefix, &language).await; + default_help(ctx, msg, lm, &prefix.await, &language.await).await; } } else { - default_help(ctx, msg, lm, &prefix, &language).await; + default_help(ctx, msg, lm, &prefix.await, &language.await).await; } } @@ -142,16 +121,15 @@ async fn help(ctx: &Context, msg: &Message, args: String) { async fn info(ctx: &Context, msg: &Message, _args: String) { let (pool, lm) = get_ctx_data(&ctx).await; - let language = UserData::language_of(&msg.author, &pool).await; - let guild_data = GuildData::from_guild(msg.guild(&ctx).await.unwrap(), &pool) - .await - .unwrap(); + let language = UserData::language_of(&msg.author, &pool); + let prefix = GuildData::prefix_from_id(msg.guild_id, &pool); + let current_user = ctx.cache.current_user(); let desc = lm - .get(&language, "info") - .replacen("{user}", &ctx.cache.current_user().await.name, 1) + .get(&language.await, "info") + .replacen("{user}", ¤t_user.await.name, 1) .replace("{default_prefix}", &*DEFAULT_PREFIX) - .replace("{prefix}", &guild_data.prefix); + .replace("{prefix}", &prefix.await); let _ = msg .channel_id diff --git a/src/commands/moderation_cmds.rs b/src/commands/moderation_cmds.rs index fd6dcad..1a75012 100644 --- a/src/commands/moderation_cmds.rs +++ b/src/commands/moderation_cmds.rs @@ -18,9 +18,8 @@ use crate::{ consts::{REGEX_ALIAS, REGEX_CHANNEL, REGEX_COMMANDS, REGEX_ROLE, THEME_COLOR}, framework::SendIterator, get_ctx_data, - language_manager::LanguageManager, models::{ChannelData, GuildData, UserData}, - FrameworkCtx, SQLPool, + FrameworkCtx, }; use std::{collections::HashMap, iter, time::Duration}; diff --git a/src/commands/reminder_cmds.rs b/src/commands/reminder_cmds.rs index 622ecd0..9d91e53 100644 --- a/src/commands/reminder_cmds.rs +++ b/src/commands/reminder_cmds.rs @@ -24,10 +24,8 @@ use crate::{ }, framework::SendIterator, get_ctx_data, - language_manager::LanguageManager, models::{ChannelData, GuildData, Timer, UserData}, time_parser::TimeParser, - SQLPool, }; use chrono::{offset::TimeZone, NaiveDateTime}; diff --git a/src/commands/todo_cmds.rs b/src/commands/todo_cmds.rs index 783a000..5fe1aab 100644 --- a/src/commands/todo_cmds.rs +++ b/src/commands/todo_cmds.rs @@ -15,12 +15,10 @@ use crate::{ consts::THEME_COLOR, get_ctx_data, models::{GuildData, UserData}, - SQLPool, }; use sqlx::MySqlPool; use std::convert::TryFrom; -use crate::language_manager::LanguageManager; use async_trait::async_trait; #[derive(Debug)] diff --git a/src/main.rs b/src/main.rs index f79463b..77c2e25 100644 --- a/src/main.rs +++ b/src/main.rs @@ -39,6 +39,7 @@ use crate::{ use serenity::futures::TryFutureExt; +use inflector::Inflector; use log::info; struct SQLPool; @@ -343,3 +344,33 @@ pub async fn get_ctx_data(ctx: &&Context) -> (MySqlPool, Arc) { (pool, lm) } + +async fn command_help( + ctx: &Context, + msg: &Message, + lm: Arc, + prefix: &str, + language: &str, + command_name: &str, +) { + let _ = msg + .channel_id + .send_message(ctx, |m| { + m.embed(move |e| { + e.title(format!("{} Help", command_name.to_title_case())) + .description( + lm.get(&language, &format!("help/{}", command_name)) + .replace("{prefix}", &prefix), + ) + .footer(|f| { + f.text(concat!( + env!("CARGO_PKG_NAME"), + " ver ", + env!("CARGO_PKG_VERSION") + )) + }) + .color(*THEME_COLOR) + }) + }) + .await; +}