Reformat coms to use mysql
This commit is contained in:
parent
84c3a689ec
commit
2b71285af0
|
@ -1,34 +1,32 @@
|
|||
use crate::{Context, Error};
|
||||
use cached::proc_macro::cached;
|
||||
use mysql_async::{from_row, params, prelude::Queryable, Conn};
|
||||
use rand::seq::IteratorRandom;
|
||||
use serde_json::{
|
||||
Map,
|
||||
Value::{self, Object},
|
||||
};
|
||||
use std::fs;
|
||||
|
||||
async fn autocomplete_command<'a>(
|
||||
_ctx: Context<'_>,
|
||||
partial: &'a str,
|
||||
) -> impl Iterator<Item = String> + 'a {
|
||||
let res: Vec<String> = get_coms()
|
||||
.keys()
|
||||
.filter(move |e| e.contains(&partial))
|
||||
.map(|e| e.to_string())
|
||||
.collect();
|
||||
res.into_iter()
|
||||
async fn autocomplete_command<'a>(ctx: Context<'_>, partial: &'a str) -> Vec<String> {
|
||||
let mut conn = match ctx.data().database.get_conn().await {
|
||||
Ok(c) => c,
|
||||
Err(_) => return vec![],
|
||||
};
|
||||
|
||||
let stmt = conn.prep("SELECT sign FROM commands WHERE sign LIKE CONCAT('%', :partial, '%') AND enabled ORDER BY priority DESC, sign ASC LIMIT 25").await.unwrap();
|
||||
// let ding = con.exec(&stmt, params! {partial}).await?;
|
||||
// let iter = ding.into_iter().map(|a| a.to_string());
|
||||
let result = match conn.exec_iter(stmt, params! {partial}).await {
|
||||
Ok(blah) => blah
|
||||
.map_and_drop(|row| from_row::<String>(row))
|
||||
.await
|
||||
.unwrap_or_default(),
|
||||
Err(e) => {
|
||||
println!("Error autocomplete coms {}", e);
|
||||
vec!["Error getting commands".to_owned()]
|
||||
}
|
||||
};
|
||||
result
|
||||
}
|
||||
|
||||
#[cached(time = 600)]
|
||||
fn get_coms() -> Map<String, Value> {
|
||||
let path = "./data/commands.json";
|
||||
let data = fs::read_to_string(path).expect("Unable to read file");
|
||||
let res: serde_json::Value = serde_json::from_str(&data).expect("Unable to parse");
|
||||
if let Object(things) = res {
|
||||
return things;
|
||||
} else {
|
||||
return Map::<String, Value>::new();
|
||||
}
|
||||
pub async fn get_command(sign: &str, con: &mut Conn) -> Result<Option<String>, mysql_async::Error> {
|
||||
let a: Option<String> = con.exec_first(r"SELECT response FROM commands WHERE sign = :sign and enabled order by priority desc limit 1", (sign,)).await?;
|
||||
Ok(a)
|
||||
}
|
||||
|
||||
// F1TV links throughout the seasons
|
||||
|
@ -39,15 +37,15 @@ pub async fn coms(
|
|||
#[autocomplete = "autocomplete_command"]
|
||||
command: String,
|
||||
) -> Result<(), Error> {
|
||||
match get_coms().get(&command) {
|
||||
let conn: &mut Conn = &mut ctx.data().database.get_conn().await?;
|
||||
match get_command(&command, conn).await? {
|
||||
None => {
|
||||
ctx.say(format!("Command `{}` not found", command)).await?;
|
||||
}
|
||||
Some(com) => {
|
||||
ctx.say(sky(com.as_str().unwrap())).await?;
|
||||
ctx.say(sky(&com)).await?;
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue