added case insensitivity to commands
This commit is contained in:
parent
d50390c4a5
commit
749abf7898
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -1165,7 +1165,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "reminder_rs"
|
name = "reminder_rs"
|
||||||
version = "0.1.4"
|
version = "0.1.5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"Inflector",
|
"Inflector",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "reminder_rs"
|
name = "reminder_rs"
|
||||||
version = "0.1.4"
|
version = "0.1.5"
|
||||||
authors = ["jellywx <judesouthworth@pm.me>"]
|
authors = ["jellywx <judesouthworth@pm.me>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
||||||
|
@ -34,3 +34,4 @@ __Other Variables__
|
|||||||
* `LOCAL_LANGUAGE` - default `EN`. Specifies the string set to fall back to if a string cannot be found (and to be used with new users)
|
* `LOCAL_LANGUAGE` - default `EN`. Specifies the string set to fall back to if a string cannot be found (and to be used with new users)
|
||||||
* `THEME_COLOR` - default `8fb677`. Specifies the hex value of the color to use on info message embeds
|
* `THEME_COLOR` - default `8fb677`. Specifies the hex value of the color to use on info message embeds
|
||||||
* `WEBHOOK_AVATAR` - default `None`, accepts the path to an image file to be used as the avatar when creating webhooks. **IMPORTANT: image file must be 128x128 or smaller in size**
|
* `WEBHOOK_AVATAR` - default `None`, accepts the path to an image file to be used as the avatar when creating webhooks. **IMPORTANT: image file must be 128x128 or smaller in size**
|
||||||
|
* `CASE_INSENSITIVE` - default `1`, if `1`, commands will be treated with case insensitivity (so both `$help` and `$HELP` will work)
|
||||||
|
@ -16,7 +16,7 @@ use serenity::{
|
|||||||
|
|
||||||
use log::{error, info, warn};
|
use log::{error, info, warn};
|
||||||
|
|
||||||
use regex::{Match, Regex};
|
use regex::{Match, Regex, RegexBuilder};
|
||||||
|
|
||||||
use std::{collections::HashMap, fmt};
|
use std::{collections::HashMap, fmt};
|
||||||
|
|
||||||
@ -152,16 +152,6 @@ impl fmt::Debug for Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// create event handler for bot
|
|
||||||
pub struct RegexFramework {
|
|
||||||
commands: HashMap<String, &'static Command>,
|
|
||||||
command_matcher: Regex,
|
|
||||||
dm_regex_matcher: Regex,
|
|
||||||
default_prefix: String,
|
|
||||||
client_id: u64,
|
|
||||||
ignore_bots: bool,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
pub trait SendIterator {
|
pub trait SendIterator {
|
||||||
async fn say_lines(
|
async fn say_lines(
|
||||||
@ -205,6 +195,16 @@ impl SendIterator for ChannelId {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct RegexFramework {
|
||||||
|
commands: HashMap<String, &'static Command>,
|
||||||
|
command_matcher: Regex,
|
||||||
|
dm_regex_matcher: Regex,
|
||||||
|
default_prefix: String,
|
||||||
|
client_id: u64,
|
||||||
|
ignore_bots: bool,
|
||||||
|
case_insensitive: bool,
|
||||||
|
}
|
||||||
|
|
||||||
impl RegexFramework {
|
impl RegexFramework {
|
||||||
pub fn new<T: Into<u64>>(client_id: T) -> Self {
|
pub fn new<T: Into<u64>>(client_id: T) -> Self {
|
||||||
Self {
|
Self {
|
||||||
@ -214,9 +214,16 @@ impl RegexFramework {
|
|||||||
default_prefix: "".to_string(),
|
default_prefix: "".to_string(),
|
||||||
client_id: client_id.into(),
|
client_id: client_id.into(),
|
||||||
ignore_bots: true,
|
ignore_bots: true,
|
||||||
|
case_insensitive: true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn case_insensitive(mut self, case_insensitive: bool) -> Self {
|
||||||
|
self.case_insensitive = case_insensitive;
|
||||||
|
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
pub fn default_prefix<T: ToString>(mut self, new_prefix: T) -> Self {
|
pub fn default_prefix<T: ToString>(mut self, new_prefix: T) -> Self {
|
||||||
self.default_prefix = new_prefix.to_string();
|
self.default_prefix = new_prefix.to_string();
|
||||||
|
|
||||||
@ -255,7 +262,10 @@ impl RegexFramework {
|
|||||||
.replace("COMMANDS", command_names.as_str())
|
.replace("COMMANDS", command_names.as_str())
|
||||||
.replace("ID", self.client_id.to_string().as_str());
|
.replace("ID", self.client_id.to_string().as_str());
|
||||||
|
|
||||||
self.command_matcher = Regex::new(match_string.as_str()).unwrap();
|
self.command_matcher = RegexBuilder::new(match_string.as_str())
|
||||||
|
.case_insensitive(self.case_insensitive)
|
||||||
|
.build()
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -285,7 +295,10 @@ impl RegexFramework {
|
|||||||
.replace("COMMANDS", dm_command_names.as_str())
|
.replace("COMMANDS", dm_command_names.as_str())
|
||||||
.replace("ID", self.client_id.to_string().as_str());
|
.replace("ID", self.client_id.to_string().as_str());
|
||||||
|
|
||||||
self.dm_regex_matcher = Regex::new(match_string.as_str()).unwrap();
|
self.dm_regex_matcher = RegexBuilder::new(match_string.as_str())
|
||||||
|
.case_insensitive(self.case_insensitive)
|
||||||
|
.build()
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -405,7 +418,7 @@ impl Framework for RegexFramework {
|
|||||||
|
|
||||||
let command = self
|
let command = self
|
||||||
.commands
|
.commands
|
||||||
.get(full_match.name("cmd").unwrap().as_str())
|
.get(&full_match.name("cmd").unwrap().as_str().to_lowercase())
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let channel_data = ChannelData::from_channel(
|
let channel_data = ChannelData::from_channel(
|
||||||
msg.channel(&ctx).await.unwrap(),
|
msg.channel(&ctx).await.unwrap(),
|
||||||
@ -456,7 +469,7 @@ impl Framework for RegexFramework {
|
|||||||
else if let Some(full_match) = self.dm_regex_matcher.captures(&msg.content[..]) {
|
else if let Some(full_match) = self.dm_regex_matcher.captures(&msg.content[..]) {
|
||||||
let command = self
|
let command = self
|
||||||
.commands
|
.commands
|
||||||
.get(full_match.name("cmd").unwrap().as_str())
|
.get(&full_match.name("cmd").unwrap().as_str().to_lowercase())
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let args = full_match
|
let args = full_match
|
||||||
.name("args")
|
.name("args")
|
||||||
|
@ -157,6 +157,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
|||||||
|
|
||||||
let framework = RegexFramework::new(logged_in_id)
|
let framework = RegexFramework::new(logged_in_id)
|
||||||
.default_prefix(DEFAULT_PREFIX.clone())
|
.default_prefix(DEFAULT_PREFIX.clone())
|
||||||
|
.case_insensitive(env::var("CASE_INSENSITIVE").map_or(true, |var| var == "1"))
|
||||||
.ignore_bots(env::var("IGNORE_BOTS").map_or(true, |var| var == "1"))
|
.ignore_bots(env::var("IGNORE_BOTS").map_or(true, |var| var == "1"))
|
||||||
// info commands
|
// info commands
|
||||||
.add_command("ping", &info_cmds::PING_COMMAND)
|
.add_command("ping", &info_cmds::PING_COMMAND)
|
||||||
|
Loading…
Reference in New Issue
Block a user