commit - b73dcbe95ef4d2048dab4178e615b15aa06a8564
commit + 96ff42658bb89d7c05e6e98ba27cc4686ac5bdc1
blob - 0a0ad3f8c31dee2f560c53b6645fcda172f77382
blob + 62f987a8ba9826ff3d05ba8bfb4f3a15ab6dec25
--- mata_bot.pl
+++ mata_bot.pl
# 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;