Commit Diff


commit - 2db6fade2e537f4ddb75b816dd3fb197ba8f4f8d
commit + 05d86fdaa37573e395f40904af86c8516c40456d
blob - 64b594bfae9fd5503aea1a4a2642dd5762685648
blob + 4c4483a0a26157e2aaff5c08b0c0287877ef23a5
--- ball
+++ ball
@@ -1,5 +1,5 @@
-Dead-on!
-Correct!
+Deadass!
+No cap!
 That's right!
 Yes, of course!
 Absolutely!
blob - 453b5a2aa4f8a3b9e804fbc29bf91b92a0cac7de
blob + e819a0ded1e90fb5ae20af101db12f0fce7920b3
--- mata_bot.pl
+++ mata_bot.pl
@@ -10,6 +10,7 @@ use POSIX qw(strftime);
 my $SHAREDIR = '/usr/local/share';
 my $CHUNK_LENGTH = 1024;
 my $NICK = 'mata_bot';
+my $NICK_RE = qr/mata_?bo[ity]+/i;
 my $USER = 'mata_bot_beta4';
 my $REAL = 'death to technomage!!';
 my $MOTHER = 'noodle';
@@ -153,7 +154,7 @@ sub respond_mention {
 	my ($sock, $sender_nick, $message) = @_;
 	if ($sender_nick eq $MOTHER) {
 		msg($sock, "Yes, mother? ${MATA_HAPPY}");
-	} elsif ($message =~ /^\W*${NICK}\W*$/) {
+	} elsif ($message =~ /^\b${NICK_RE}\b$/) {
 		msg($sock, "${MATA_NORM} ?");
 	} else {
 		msg($sock, "$quotes[int rand($quotes_num)] ${MATA_NORM}");
@@ -164,15 +165,27 @@ 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;
-		eval { $subbuffer{$sender_nick} =~ s/$toreplace/$replacement/ };
-		if (not $@ and $subbuffer{$sender_nick}) {
+		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;
 		}
+		return 1;
 	} elsif ($message =~ m,watch\?v=([a-zA-Z0-9_-]+),) {
 		# post youtube video titles from video ID
 		my $video_id = $1;
@@ -194,8 +207,8 @@ sub respond {
 		} else {
 			msg($sock, "failed to get title of video ${video_id} ${MATA_DEAD} (no videos matching ID $video_id!)");
 		}
-	} elsif ($message =~ m,(https?://[^\000\r\n ]+),) {
-		my $url = $1;
+	} elsif ($message =~ m,https?://[^ ]+,) {
+		my $url = $&;
 		# get in it's HEAD to check if it's text/html
 		my $response = HTTP::Tiny->new->head($url);
 		unless ($response->{success}) {
@@ -231,10 +244,11 @@ sub respond {
 		} else {
 			msg($sock, "No title found (GET ${url} ${MATA_DEAD}");
 		}
-	} elsif ($message =~ /^ *${NICK}[:, ] *([^\000\r\n ][^\000\r\n]*)$/
-		or $message =~ /^ *([^\000\r\n ][^\000\r\n]*)[, ] *${NICK}\W*$/) {
+	# TODO: this part should use [^ ] and .* instead but i'm scared of .*
+	} elsif ($message =~ /^ *${NICK_RE}[:, ] *([^\000\r\n ][^\000\r\n]*)$/
+		or $message =~ /^ *([^\000\r\n ][^\000\r\n]*)[, ] *${NICK_RE}\W*$/) {
 		respond_command($sock, $sender_nick, $1);
-	} elsif ($message =~ /\b${NICK}\b/) {
+	} elsif ($message =~ /\b${NICK_RE}\b/) {
 		respond_mention($sock, $sender_nick, $message);
 	}
 	return 0;
blob - 3848f208374685c861103b7de7a8a652057598ec
blob + 511825896c9e8f14f71bb16b3ae607724734f14c
--- matabot.8
+++ matabot.8
@@ -22,19 +22,19 @@ starts an IRC bot nicknamed
 .Sq mata_bot
 and joins the channel
 .Sq #testmatabot
-on localhost (port 6667) with with TLS turned off by default.  It's typically
-started as a daemon via an rc.d script.
+on localhost (port 6667) with with TLS turned off by default.
+It's typically started as a daemon via an rc.d script.
 .Pp
 The options are as follows:
 .Bl -tag -width Ds
 .It Fl H Ar path
 Load the hellos file from
 .Ar path
-.Po default: Pa $PREFIX/share/matabot/hellos Pc Ns .
+.Po default: Pa /usr/local/share/matabot/hellos Pc Ns .
 .It Fl b Ar path
 Load the 8ball file from
 .Ar path
-.Po default: Pa $PREFIX/share/matabot/ball Pc Ns .
+.Po default: Pa /usr/local/share/matabot/ball Pc Ns .
 .It Fl h Ar host
 Connect to
 .Ar host
@@ -53,50 +53,65 @@ Connect to
 .It Fl q Ar path
 Load the quotes file from
 .Ar path
-.Po default: Pa $PREFIX/share/matabot/quotes Pc Ns .
+.Po default: Pa /usr/local/share/matabot/quotes Pc Ns .
 .It Fl t
 Turn on TLS.
 .El
 .Sh COMMANDS
-Bot can do some tricks (non-exhaustive list. he's kinda flexible so just speak to him :3):
+Bot can do some tricks (non-exhaustive, or it won't be funny):
 .Bl -tag -width Ds
-.It ...mata_bot...
-Says something! This boy talks back!?
-.It mata_bot, What doth life? or mata_bot, What doth life?
-Answers your burning questions... (can't hear you if you don't
-.Sq \&?
-him).
-.It ...http://what.ever/idk#lol... or ...https://what.ever/idk#lol...
-Reads the website title or content-type for you.
+.It s/HaCkERS/wizards/ig
+He corrects you.
 .It ...watch?=SOMEID...
-Reads out the youtube video title for you (make sure that the char after end of
+He reads out youtube video titles for you.
+(Make sure that the character after the end of
 .Sq SOMEID
-is outside the range of valid characters for youtube video ID's okay?).
+is outside the range of valid characters for a youtube video ID, okay?).
+.It ...http://what.ever/idk#lol... or ...https://what.ever/idk#lol...
+He reads out website titles or the content-type for you.
+(Make sure the character after the end of your link is a space)
 .It mata_bot ...${number1}d${number2}...
-Rolls some ${number1} of ${number2}-sided dice. He's a dungeon master too!!
-.It mata_bot, good boy! (or boi, girl, bot)
-Praise your future master.
-.It thank you mata_bot!!
-Thank your future master.
-.It hi, mata_bot!
-Say hi to the boy
+Ask him to roll ${number1} of ${number2}-sided dice.
+He's a dungeon master too!!
 .It mata_bot: *pray*
 Stay prayed up!!
-.It wassup mata_bot?
-Ask him what he's up to.
+.It MATABOT I LOVE U!!!
+Love the boy.
+.It thank you mata_bot!!
+Thank your future master.
+.It mata_boi: Who's the good boy?? (or boi, girl, bot, etc.).
+Praise your future master.
+.It .../mata_?bo[ity]/i...
+Mention him! This boy talks back!?
 .It mata_bot, hru?
 Ask him how he's doin.
+.It wassup mata_bot?
+Ask him what he's up to.
+.It mata_bot, good boy! (or boi, girl, bot, etc.).
+Praise your future master.
+.It hi, mata_boy!
+Say hi to the boy
+.It mata_bot, What doth life?
+Ask him your burning questions...
+(He can't hear you if you don't
+.Sq \&?
+him :c).
 .El
 .Sh FILES
 .Bl -tag -width Ds
 .It Pa /etc/rc.d/matabot
 OpenBSD rc script for running matabot as a service.
 .It Pa /usr/local/share/matabot/ball
-8ball answers file. has 10 answers for positive, negative, and ambigious each
+8ball answers file.
+has 10 answers for positive, negative, and ambigious each;
 keep the ratio when adding new lines as the answer is chosen randomly from the
 file.
+.It Pa /usr/local/share/matabot/hellos
+Random greetings.
 .It Pa /usr/local/share/matabot/quotes
-Random quotes; mostly from the https://analognowhere.com comic.
+Random quotes; mostly from the
+.Lk https://analognowhere.com
+comic.
 .El
 .
 .Sh EXIT STATUS
@@ -106,15 +121,18 @@ Random quotes; mostly from the https://analognowhere.c
 Typical invocation
 .Po use these flags in your Pa /etc/rc.conf.local Pc Ns :
 .Pp
-.Dl $ matabot -tlh irc.server.tld -j #analognowhere -p 6697
+.Dl $ matabot -th irc.server.tld -j #analognowhere -p 6697
 .Pp
-Test on a local ircd (without TLS):
+Test on a local ircd with logging turned on.
+(No TLS):
 .Pp
 .Dl $ matabot -l
 .
 .Sh SEE ALSO
 .Xr perl 1 ,
-.Xr IO::Socket 3p 
+.Xr HTTP::Tiny 3p ,
+.Xr IO::Socket 3p ,
+.Xr IO::Socket::SSL 3p
 .
 .Sh STANDARDS
 .Bl -item
@@ -152,10 +170,14 @@ Test on a local ircd (without TLS):
 .An noodle Aq Mt noodle@pastanoggin.com Ns .
 .
 .Sh CAVEATS
-Noodle (noodle) is the only person in chat who can give direct commands to mata_bot (it's hard-coded. sorry).
+Noodle (noodle) is the only person in chat who can give direct commands to mata_bot.
+(It's hard-coded.
+Sorry).
 .Sh BUGS
-The bot doesn't have the ability te re-connect on network loss yet. You can
+The bot doesn't have the ability te re-connect on network loss yet.
+You can
 .Sq rcctl restart matabot
 for now.
 .Pp
-The bot cannot detach from terminal yet to become a daemon. daemon-izing is handled in the rc service script.
+The bot cannot detach from terminal yet to become a daemon.
+daemon-izing is handled in the rc service script.