mata_bot

some cheeky bot for #unix_surrealism
git clone https://git.pastanoggin.com/mata_bot.git
Log | Files | Refs | README | LICENSE

commit 96ff42658bb89d7c05e6e98ba27cc4686ac5bdc1
parent b73dcbe95ef4d2048dab4178e615b15aa06a8564
Author: noodle <noodle@pastanoggin.com>
Date:   Wed, 18 Jun 2025 19:29:05 +0300

Merge branch 'regex_modifiers'

Diffstat:
Mmata_bot.pl | 23+++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/mata_bot.pl b/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;