commit 50695633bea43723e3ed47e5610b0ea43ed77dd6 from: noodle date: Wed Jun 18 16:28:06 2025 UTC add the /g and /i regex modifiers to the chat s/// command 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;