diff --git a/Cargo.lock b/Cargo.lock index 28c9562..877822c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6,6 +6,15 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" +[[package]] +name = "aho-corasick" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +dependencies = [ + "memchr", +] + [[package]] name = "ansi_term" version = "0.11.0" @@ -71,6 +80,21 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +[[package]] +name = "bit-set" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + [[package]] name = "bitflags" version = "1.2.1" @@ -195,6 +219,16 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "fancy-regex" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe09872bd11351a75f22b24c3769fc863e8212d926d6db46b94ad710d14cc5cc" +dependencies = [ + "bit-set", + "regex", +] + [[package]] name = "flate2" version = "1.0.20" @@ -532,9 +566,9 @@ checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" [[package]] name = "memchr" -version = "2.3.4" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" +checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" [[package]] name = "mime" @@ -810,6 +844,23 @@ dependencies = [ "bitflags", ] +[[package]] +name = "regex" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce5f1ceb7f74abbce32601642fcf8e8508a8a8991e0621c7d750295b9095702b" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" + [[package]] name = "reqwest" version = "0.11.0" @@ -1460,6 +1511,7 @@ name = "widertom" version = "0.1.0" dependencies = [ "async-trait", + "fancy-regex", "lazy_static", "serenity", "tokio", diff --git a/Cargo.toml b/Cargo.toml index 768d9ce..3c34693 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ uwuify = "^0.2" async-trait = "0.1.50" lazy_static = "1.4.0" toml = "0.5.8" +fancy-regex = "0.5.0" [dependencies.serenity] version = "0.10.2" diff --git a/config.toml b/config.toml index d77aef4..dd32cf4 100644 --- a/config.toml +++ b/config.toml @@ -8,4 +8,10 @@ emotes = [ ["nils", 816429379654516796], ["tom", 811324632082415626], ["thomas", 803607136000802827], +] + +# if a message is a trigger (equals, not contains) then respond with the answer +responses = [ + ["tom", "<:tom:811324632082415626>"], + ["hui", "PRAISE hUI, THE ALMIGHTY OR PERISH AS FOOLS!!!"], ] \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index af06764..d5e7794 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -7,6 +7,7 @@ use serenity::framework::standard::{macros::hook}; use serenity::model::channel::{Message, ReactionType}; use serenity::model::id::EmojiId; use toml::Value; +use fancy_regex::Regex; lazy_static! { static ref REACTION_EMOTES: HashMap = { @@ -24,13 +25,39 @@ lazy_static! { } m }; + + static ref RESPONSES: HashMap = { + let err = "Invalid config file"; + let mut m = HashMap::new(); + + let config = fs::read_to_string("config.toml").expect("Config file not found. Add 'config.toml' to this directory"); + let value = config.parse::().expect(err); + let emotes = value.get("responses").expect(err); + + for v in emotes.as_array().expect(err) { + let trigger = v[0].as_str().expect(err).to_string(); + let response = v[1].as_str().expect(err).to_string(); + m.insert(trigger, response); + } + m + }; } #[hook] pub async fn normal_message(ctx: &Context, msg: &Message) { - if msg.content.to_lowercase() == "tom" { - reply(" <:tom:811324632082415626>", &msg, &ctx).await; + lazy_static! { + static ref TOM_REGEX: Regex = Regex::new(r"(?<=^|\D)(\d{6})(?=\D|$)").unwrap(); + } + + if let Some(m) = TOM_REGEX.find(&msg.content).unwrap() { + reply(&*format!("", m.as_str()), &msg, &ctx).await; + } + + for (trigger, answer) in RESPONSES.iter() { + if msg.content.to_lowercase() == *trigger { + reply(answer, &msg, &ctx).await; + } } for (name, id) in REACTION_EMOTES.iter() { diff --git a/src/main.rs b/src/main.rs index d37fba5..099ec16 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,8 +7,7 @@ use serenity::{ prelude::*, }; use serenity::client::Context; -use serenity::framework::standard::{Args, CommandGroup, CommandResult, help_commands, HelpOptions, macros::{command, group, help}, -}; +use serenity::framework::standard::{Args, CommandGroup, CommandResult, help_commands, HelpOptions, macros::{command, group, help}}; use serenity::framework::StandardFramework; use serenity::http::Http; use serenity::model::id::UserId;