Moved insults and compliments into the db
+ Fmt
This commit is contained in:
parent
ac6bd108da
commit
f9776218e0
52
Cargo.lock
generated
52
Cargo.lock
generated
@ -417,9 +417,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "cxx"
|
||||
version = "1.0.86"
|
||||
version = "1.0.87"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "51d1075c37807dcf850c379432f0df05ba52cc30f279c5cfc43cc221ce7f8579"
|
||||
checksum = "b61a7545f753a88bcbe0a70de1fcc0221e10bfc752f576754fa91e663db1622e"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"cxxbridge-flags",
|
||||
@ -429,9 +429,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "cxx-build"
|
||||
version = "1.0.86"
|
||||
version = "1.0.87"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5044281f61b27bc598f2f6647d480aed48d2bf52d6eb0b627d84c0361b17aa70"
|
||||
checksum = "f464457d494b5ed6905c63b0c4704842aba319084a0a3561cdc1359536b53200"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"codespan-reporting",
|
||||
@ -444,15 +444,15 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "cxxbridge-flags"
|
||||
version = "1.0.86"
|
||||
version = "1.0.87"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "61b50bc93ba22c27b0d31128d2d130a0a6b3d267ae27ef7e4fae2167dfe8781c"
|
||||
checksum = "43c7119ce3a3701ed81aca8410b9acf6fc399d2629d057b87e2efa4e63a3aaea"
|
||||
|
||||
[[package]]
|
||||
name = "cxxbridge-macro"
|
||||
version = "1.0.86"
|
||||
version = "1.0.87"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "39e61fda7e62115119469c7b3591fd913ecca96fb766cfd3f2e2502ab7bc87a5"
|
||||
checksum = "65e07508b90551e610910fa648a1878991d367064997a596135b86df30daf07e"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@ -1763,11 +1763,11 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "reqwest"
|
||||
version = "0.11.13"
|
||||
version = "0.11.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "68cc60575865c7831548863cc02356512e3f1dc2f3f82cb837d7fc4cc8f3c97c"
|
||||
checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9"
|
||||
dependencies = [
|
||||
"base64 0.13.1",
|
||||
"base64 0.21.0",
|
||||
"bytes",
|
||||
"encoding_rs",
|
||||
"futures-core",
|
||||
@ -1800,6 +1800,7 @@ dependencies = [
|
||||
"url",
|
||||
"wasm-bindgen",
|
||||
"wasm-bindgen-futures",
|
||||
"wasm-streams",
|
||||
"web-sys",
|
||||
"webpki-roots",
|
||||
"winreg",
|
||||
@ -1938,9 +1939,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "security-framework"
|
||||
version = "2.7.0"
|
||||
version = "2.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c"
|
||||
checksum = "645926f31b250a2dca3c232496c2d898d91036e45ca0e97e0e2390c54e11be36"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"core-foundation",
|
||||
@ -1951,9 +1952,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "security-framework-sys"
|
||||
version = "2.6.1"
|
||||
version = "2.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
|
||||
checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
|
||||
dependencies = [
|
||||
"core-foundation-sys",
|
||||
"libc",
|
||||
@ -2276,9 +2277,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
|
||||
|
||||
[[package]]
|
||||
name = "symphonia-core"
|
||||
version = "0.5.1"
|
||||
version = "0.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "199a6417cd4115bac79289b64b859358ea050b7add0ceb364dc991f628c5b347"
|
||||
checksum = "6b9567e2d8a5f866b2f94f5d366d811e0c6826babcff6d37de9e1a6690d38869"
|
||||
dependencies = [
|
||||
"arrayvec",
|
||||
"bitflags",
|
||||
@ -2691,9 +2692,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "unicode-bidi"
|
||||
version = "0.3.8"
|
||||
version = "0.3.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
|
||||
checksum = "0046be40136ef78dc325e0edefccf84ccddacd0afcc1ca54103fa3c61bbdab1d"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
@ -2888,6 +2889,19 @@ version = "0.2.83"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
|
||||
|
||||
[[package]]
|
||||
name = "wasm-streams"
|
||||
version = "0.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078"
|
||||
dependencies = [
|
||||
"futures-util",
|
||||
"js-sys",
|
||||
"wasm-bindgen",
|
||||
"wasm-bindgen-futures",
|
||||
"web-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "web-sys"
|
||||
version = "0.3.60"
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
use crate::error::Error;
|
||||
use crate::imgur;
|
||||
use crate::imgur::Image;
|
||||
use crate::insult_compliment::InsultComplimentTemplate;
|
||||
use crate::inventory::InventoryManager;
|
||||
use config::{Config, File};
|
||||
use j_db::database::Database;
|
||||
@ -51,10 +50,6 @@ pub struct BotConfig {
|
||||
pub albums: Vec<AlbumConfig>,
|
||||
|
||||
pub motivation: MotivationConfig,
|
||||
|
||||
pub insults: Vec<InsultComplimentTemplate>,
|
||||
|
||||
pub compliments: Vec<InsultComplimentTemplate>,
|
||||
}
|
||||
|
||||
impl BotConfig {
|
||||
|
||||
@ -1,8 +1,7 @@
|
||||
use crate::error::Error;
|
||||
use crate::models::insult_compliment::{RandomResponseTemplate, ResponseType};
|
||||
use crate::models::random::RandomConfig;
|
||||
use crate::{command, group, GlobalData, BAD_APPLE};
|
||||
use rand::prelude::IteratorRandom;
|
||||
use rand::thread_rng;
|
||||
use reqwest::Client;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serenity::client::Context;
|
||||
@ -170,7 +169,7 @@ pub async fn list_random(ctx: &Context, msg: &Message, args: Args) -> CommandRes
|
||||
|
||||
let random = RandomConfig::get_random(&global_data.db, &random_name)?;
|
||||
|
||||
let dm_channel = msg.author.id.create_dm_channel(&ctx.http).await?;
|
||||
let dm_channel = msg.author.id.create_dm_channel(&ctx.http).await?;
|
||||
if let Some(random) = random {
|
||||
let mut msg_builder = MessageBuilder::new();
|
||||
msg_builder.push_line(format!("All possible responses for {}:", random_name));
|
||||
@ -187,7 +186,7 @@ pub async fn list_random(ctx: &Context, msg: &Message, args: Args) -> CommandRes
|
||||
}
|
||||
|
||||
if !msg_builder.0.is_empty() {
|
||||
dm_channel.say(&ctx.http, msg_builder.build()).await?;
|
||||
dm_channel.say(&ctx.http, msg_builder.build()).await?;
|
||||
}
|
||||
} else {
|
||||
msg.reply(
|
||||
@ -264,10 +263,10 @@ async fn insult(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
|
||||
let data = ctx.data.read().await;
|
||||
let global = data.get::<GlobalData>().unwrap();
|
||||
|
||||
let selection = if msg.content.as_str().starts_with("!insult") {
|
||||
&global.cfg.insults
|
||||
let pool = if msg.content.as_str().starts_with("!insult") {
|
||||
ResponseType::Insult
|
||||
} else if msg.content.as_str().starts_with("!compliment") {
|
||||
&global.cfg.compliments
|
||||
ResponseType::Compliment
|
||||
} else {
|
||||
msg.reply(&ctx, "The h*ck did you just say to me??").await?;
|
||||
return Ok(());
|
||||
@ -275,13 +274,14 @@ async fn insult(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
|
||||
|
||||
let target = args.rest();
|
||||
|
||||
let output = selection
|
||||
.iter()
|
||||
.choose(&mut thread_rng())
|
||||
.unwrap()
|
||||
.render(target)?;
|
||||
let output = RandomResponseTemplate::get_random_response(&global.db, pool, target)?;
|
||||
|
||||
msg.reply(&ctx.http, output).await?;
|
||||
if let Some(output) = output {
|
||||
msg.reply(&ctx.http, output).await?;
|
||||
} else {
|
||||
msg.reply(&ctx, format!("No {}s, mr freeman??", msg.content))
|
||||
.await?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@ -1,25 +0,0 @@
|
||||
use crate::error::Error;
|
||||
use rand::seq::SliceRandom;
|
||||
use rand::thread_rng;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::collections::HashMap;
|
||||
use tera::{Context, Tera};
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize, Clone, Default)]
|
||||
pub struct InsultComplimentTemplate {
|
||||
pub template: String,
|
||||
pub word_bank: HashMap<String, Vec<String>>,
|
||||
}
|
||||
|
||||
impl InsultComplimentTemplate {
|
||||
pub fn render(&self, target: &str) -> Result<String, Error> {
|
||||
let mut context = Context::new();
|
||||
context.insert("target", target);
|
||||
|
||||
for (key, words) in &self.word_bank {
|
||||
context.insert(key, &words.choose(&mut thread_rng()).unwrap());
|
||||
}
|
||||
|
||||
Ok(Tera::one_off(&self.template, &context, false)?)
|
||||
}
|
||||
}
|
||||
@ -2,7 +2,6 @@ mod config;
|
||||
mod discord;
|
||||
mod error;
|
||||
mod imgur;
|
||||
mod insult_compliment;
|
||||
mod inventory;
|
||||
mod models;
|
||||
mod user;
|
||||
|
||||
75
src/models/insult_compliment.rs
Normal file
75
src/models/insult_compliment.rs
Normal file
@ -0,0 +1,75 @@
|
||||
use crate::error::Error;
|
||||
use j_db::database::Database;
|
||||
use j_db::model::JdbModel;
|
||||
use rand::seq::SliceRandom;
|
||||
use rand::thread_rng;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::collections::HashMap;
|
||||
use tera::{Context, Tera};
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize, Clone, Eq, PartialEq)]
|
||||
pub enum ResponseType {
|
||||
Insult,
|
||||
Compliment,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize, Clone)]
|
||||
pub struct RandomResponseTemplate {
|
||||
id: Option<u64>,
|
||||
pub response_type: ResponseType,
|
||||
pub template: String,
|
||||
pub word_bank: HashMap<String, Vec<String>>,
|
||||
}
|
||||
|
||||
impl RandomResponseTemplate {
|
||||
pub fn render(&self, target: &str) -> Result<String, Error> {
|
||||
let mut context = Context::new();
|
||||
context.insert("target", target);
|
||||
|
||||
for (key, words) in &self.word_bank {
|
||||
context.insert(key, &words.choose(&mut thread_rng()).unwrap());
|
||||
}
|
||||
|
||||
Ok(Tera::one_off(&self.template, &context, false)?)
|
||||
}
|
||||
|
||||
pub fn get_all_responses_for_type(
|
||||
db: &Database,
|
||||
resp_type: ResponseType,
|
||||
) -> Result<Vec<Self>, Error> {
|
||||
Ok(db
|
||||
.filter(|_, random_response: &RandomResponseTemplate| {
|
||||
random_response.response_type == resp_type
|
||||
})?
|
||||
.collect())
|
||||
}
|
||||
|
||||
pub fn get_random_response(
|
||||
db: &Database,
|
||||
resp_type: ResponseType,
|
||||
target: &str,
|
||||
) -> Result<Option<String>, Error> {
|
||||
let templates = Self::get_all_responses_for_type(db, resp_type)?;
|
||||
let template = templates.choose(&mut thread_rng());
|
||||
|
||||
if let Some(template) = template {
|
||||
Ok(Some(template.render(target)?))
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl JdbModel for RandomResponseTemplate {
|
||||
fn id(&self) -> Option<u64> {
|
||||
self.id
|
||||
}
|
||||
|
||||
fn set_id(&mut self, id: u64) {
|
||||
self.id = Some(id)
|
||||
}
|
||||
|
||||
fn tree() -> String {
|
||||
"RandomResponseTemplate".to_string()
|
||||
}
|
||||
}
|
||||
@ -1 +1,2 @@
|
||||
pub mod insult_compliment;
|
||||
pub mod random;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user