Add support for the "i" flag

This commit is contained in:
Yash Karandikar 2022-07-19 19:26:46 -05:00
parent c57d719a0a
commit 9e1ffc001d
Signed by untrusted user: karx
GPG Key ID: A794DA2529474BA5
2 changed files with 11 additions and 3 deletions

View File

@ -25,6 +25,7 @@ rusqlite = { version = "0.28", features = ["bundled"] }
futures-util = "0.3"
irc = { version = "0.15", default-features = false, features = ["tls-rust"] }
async-trait = "0.1"
regex = "1.6.0"
[features]
# debug IRC commands

View File

@ -1,6 +1,8 @@
use crate::bot::{Context, Trigger};
use async_trait::async_trait;
use fancy_regex::escape;
use fancy_regex::Captures;
use regex::RegexBuilder;
pub struct Sed;
@ -25,16 +27,21 @@ impl Trigger for Sed {
return Ok("No previous messages found.".into());
};
if let (Some(find), Some(replace)) = (captures.name("r"), captures.name("w")) {
// TODO: karx plz add flags
let (global, ignore_case) = captures
.name("f")
.map(|m| m.as_str())
.map(|s| (s.contains('g'), s.contains('i')))
.unwrap_or_default();
let escaped = escape(find.as_str());
let re = RegexBuilder::new(&escaped)
.case_insensitive(ignore_case)
.build()
.unwrap(); // Of course it's valid, we just escaped special chars
let result = if global {
message.replace(find.as_str(), replace.as_str())
re.replace_all(&message, replace.as_str())
} else {
message.replacen(find.as_str(), replace.as_str(), 1)
re.replace(&message, replace.as_str())
};
if foreign_author {
Ok(format!(