auto responses and hentai 😳

This commit is contained in:
nora 2021-05-03 19:11:16 +02:00
parent 8c66cd8e31
commit 85f9572c5b
5 changed files with 91 additions and 6 deletions

56
Cargo.lock generated
View file

@ -6,6 +6,15 @@ version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" 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]] [[package]]
name = "ansi_term" name = "ansi_term"
version = "0.11.0" version = "0.11.0"
@ -71,6 +80,21 @@ version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" 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]] [[package]]
name = "bitflags" name = "bitflags"
version = "1.2.1" version = "1.2.1"
@ -195,6 +219,16 @@ dependencies = [
"cfg-if", "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]] [[package]]
name = "flate2" name = "flate2"
version = "1.0.20" version = "1.0.20"
@ -532,9 +566,9 @@ checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
[[package]] [[package]]
name = "memchr" name = "memchr"
version = "2.3.4" version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc"
[[package]] [[package]]
name = "mime" name = "mime"
@ -810,6 +844,23 @@ dependencies = [
"bitflags", "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]] [[package]]
name = "reqwest" name = "reqwest"
version = "0.11.0" version = "0.11.0"
@ -1460,6 +1511,7 @@ name = "widertom"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"fancy-regex",
"lazy_static", "lazy_static",
"serenity", "serenity",
"tokio", "tokio",

View file

@ -12,6 +12,7 @@ uwuify = "^0.2"
async-trait = "0.1.50" async-trait = "0.1.50"
lazy_static = "1.4.0" lazy_static = "1.4.0"
toml = "0.5.8" toml = "0.5.8"
fancy-regex = "0.5.0"
[dependencies.serenity] [dependencies.serenity]
version = "0.10.2" version = "0.10.2"

View file

@ -9,3 +9,9 @@ emotes = [
["tom", 811324632082415626], ["tom", 811324632082415626],
["thomas", 803607136000802827], ["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!!!"],
]

View file

@ -7,6 +7,7 @@ use serenity::framework::standard::{macros::hook};
use serenity::model::channel::{Message, ReactionType}; use serenity::model::channel::{Message, ReactionType};
use serenity::model::id::EmojiId; use serenity::model::id::EmojiId;
use toml::Value; use toml::Value;
use fancy_regex::Regex;
lazy_static! { lazy_static! {
static ref REACTION_EMOTES: HashMap<String, EmojiId> = { static ref REACTION_EMOTES: HashMap<String, EmojiId> = {
@ -24,13 +25,39 @@ lazy_static! {
} }
m m
}; };
static ref RESPONSES: HashMap<String, String> = {
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::<Value>().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] #[hook]
pub async fn normal_message(ctx: &Context, msg: &Message) { pub async fn normal_message(ctx: &Context, msg: &Message) {
if msg.content.to_lowercase() == "tom" { lazy_static! {
reply(" <:tom:811324632082415626>", &msg, &ctx).await; 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!("<https://nhentai.net/g/{}/>", 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() { for (name, id) in REACTION_EMOTES.iter() {

View file

@ -7,8 +7,7 @@ use serenity::{
prelude::*, prelude::*,
}; };
use serenity::client::Context; 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::framework::StandardFramework;
use serenity::http::Http; use serenity::http::Http;
use serenity::model::id::UserId; use serenity::model::id::UserId;