Commit Diff


commit - e9ae263711555c8ad2f1dd9d39721ca918cd445e
commit + 50695633bea43723e3ed47e5610b0ea43ed77dd6
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;