Commit Diff


commit - b73dcbe95ef4d2048dab4178e615b15aa06a8564
commit + 96ff42658bb89d7c05e6e98ba27cc4686ac5bdc1
blob - 0a0ad3f8c31dee2f560c53b6645fcda172f77382
blob + 62f987a8ba9826ff3d05ba8bfb4f3a15ab6dec25
--- mata_bot.pl
+++ mata_bot.pl
@@ -164,13 +164,24 @@ sub respond_mention {
 # returns 1 if bot shouldn't remember last message for s///, 0 otherwise
 sub respond {
 	my ($sock, $sender_nick, $message) = @_;
-	if ($subbuffer{$sender_nick} && $message =~ m,\b{wb}s/([^\000\r\n/]*)/([^\000\r\n/]*)/?,) {
+	if ($subbuffer{$sender_nick} && $message =~ m,\b{wb}s/([^/]+)/([^/]*)(?:/([gi]*))?,) {
 		# chat s///
-		my $toreplace = $1;
-		my $replacement = $2;
-		my $match;
-		eval { $match = $subbuffer{$sender_nick} =~ s/$toreplace/$replacement/ };
-		if (not $@ and $match) {
+		my $retext = $1;
+		my $repl = $2;
+		my $mods = $3 // '';
+		my $regex;
+		my $imod = $mods =~ /i/ ? 'i' : '';
+		eval {
+			$regex = qr/(?$imod:$retext)/ 
+		};
+		return 1 if $@;
+		my $ismatch;
+		if ($mods =~ /g/) {
+			$ismatch = $subbuffer{$sender_nick} =~ s/$regex/$repl/g;
+		} else {
+			$ismatch = $subbuffer{$sender_nick} =~ s/$regex/$repl/;
+		}
+		if ($ismatch) {
 			msg($sock, "${sender_nick} meant to say: $subbuffer{$sender_nick}");
 		}
 		return 1;