commit 699af575932db751f5e8b569ade0eba9899dbe19
parent a90fe83e647b257c36e5a230a373f884ea57430b
Author: noodle <noodle@pastanoggin.com>
Date: Thu, 26 Jun 2025 15:28:45 +0300
refactor and change -l and -v description
Diffstat:
2 files changed, 24 insertions(+), 23 deletions(-)
diff --git a/mata_bot.pl b/mata_bot.pl
@@ -18,9 +18,9 @@ my $DEFAULT_CHAN = '#testmatabot';
my $DEFAULT_HOST = 'localhost';
my $DEFAULT_LOGGING = 0;
my $DEFAULT_LOGLEVEL = 'none';
-my $DEFAULT_PATH_BALL = "/usr/local/share/matabot/ball";
-my $DEFAULT_PATH_HELLOS = "/usr/local/share/matabot/hellos";
-my $DEFAULT_PATH_QUOTES = "/usr/local/share/matabot/quotes";
+my $DEFAULT_PATH_BALL = '/usr/local/share/matabot/ball';
+my $DEFAULT_PATH_HELLOS = '/usr/local/share/matabot/hellos';
+my $DEFAULT_PATH_QUOTES = '/usr/local/share/matabot/quotes';
my $DEFAULT_PORT = 6667;
my $DEFAULT_TLS = 0;
my $MATA_CUTE = '[>.<]';
@@ -52,7 +52,7 @@ sub respond_command {
my $min = $ndice;
my $max = $ndice * $nface;
my $result = $min + int rand(1 + $max - $min);
- my $roll = "d${nface}";
+ my $roll = 'd' . $nface;
$roll = $ndice . $roll if $ndice > 1;
$reply = "${sender_nick} rolled a ${roll} and got ${result}! ${MATA_HAPPY}";
} elsif ($content =~ /\b{wb}pray+\b{wb}/) {
@@ -60,7 +60,7 @@ sub respond_command {
} elsif ($content =~ /\b{wb}bru[hv]+\b{wb}/i) {
$reply = "Did i stutter? ${MATA_NORM}";
} elsif ($content =~ /\b{wb}f+(u?ck+)? *(yo)?u+\b{wb}/i) {
- $reply = "$MATA_FLIPOFF"
+ $reply = $MATA_FLIPOFF
} elsif ($content =~ /\b{wb}i+ *l+(ove+)? *(you+|y+|u+)\b{wb}/i) {
$reply = "<3 ${MATA_HAPPY}"
} elsif ($content =~ /(thanks+|thx+|thank +(yo)?u+)( *a+ *lot+)?/i) {
@@ -155,7 +155,7 @@ sub respond {
my $video_id = $1;
my $response = HTTP::Tiny->new->get("https://fuyt.lab8.cz/?s=${video_id}&o=relevance");
unless ($response->{success}) {
- $reply = "failed to get title of video ${video_id} ${MATA_DEAD} ($response->{status} $response->{reason}!)";
+ $reply = "failed to get title of youtube video ${video_id} ${MATA_DEAD} ($response->{status} $response->{reason}!)";
return $message, $reply;
}
unless (length $response->{content}) {
@@ -163,13 +163,13 @@ sub respond {
return $message, $reply;
}
my $content = $response->{content};
- if ($content =~ m,<span class="title"><a href="https://www\.youtube\.com/watch\?v=$video_id" accesskey="0">([^<]+)</a>,i) {
+ if ($content =~ m,<span class="title"><a href="https://www\.youtube\.com/watch\?v=${video_id}" accesskey="0">([^<]+)</a>,i) {
my $title = $1;
$title =~ tr/[\000\r\n]//d;
$title = trim($title);
- $reply = "YouTube: $title";
+ $reply = "YouTube: ${title}";
} else {
- $reply = "failed to get title of video ${video_id} ${MATA_DEAD} (no videos matching ID $video_id!)";
+ $reply = "failed to get title of video ${video_id} ${MATA_DEAD} (no videos matching ID ${video_id}!)";
}
} elsif ($message =~ m,https?://[^ ]+,) {
my $url = $&;
@@ -204,7 +204,7 @@ sub respond {
my $title = $1;
$title =~ tr/[\000\r\n]//d;
$title = trim($title);
- $reply = "Title: $title";
+ $reply = "Title: ${title}";
} else {
$reply = "No title found (GET ${url} ${MATA_DEAD}";
}
@@ -238,7 +238,7 @@ sub out {
my $s = IO::Select->new($sock);
$! = 0;
if ($s->can_write($SOCK_TIMEOUT)) {
- print $sock "$message\r\n";
+ print $sock $message . "\r\n";
logger($opts, 'info', '<- ' . $message);
return 1;
} else {
@@ -257,6 +257,7 @@ sub evasdrop {
my $pongtime = time;
my $s = IO::Select->new($sock);
my %subbuffer;
+
while (1) {
my $reply;
$! = 0;
@@ -307,7 +308,7 @@ sub evasdrop {
my $sender_nick = $1;
my $sender_message = $2;
($subbuffer->{$sender_nick}, $reply) = respond($lists, $subbuffer, $sender_nick, $sender_message);
- $reply = "PRIVMSG $opts->{'chan'} :" . $reply if $reply;
+ $reply = "PRIVMSG $opts->{'chan'} :${reply}" if $reply;
}
out($sock, $opts, $reply) if $reply;
} else {
@@ -351,15 +352,15 @@ sub init {
$loglevel = 'error';
}
$loglevel = 'info' if $flags{'v'};
- open (my $ball_file, "<", $ball_path) or die "couldn't open ${ball_path}: $!";
+ open (my $ball_file, '<', $ball_path) or die "couldn't open ${ball_path}: $!";
chomp(my @ball = <$ball_file>);
- close $ball_file or die "$ball_file: $!";
- open (my $hellos_file, "<", $hellos_path) or die "couldn't open ${hellos_path}: $!";
+ close $ball_file or die "${ball_file}: $!";
+ open (my $hellos_file, '<', $hellos_path) or die "couldn't open ${hellos_path}: $!";
chomp(my @hellos = <$hellos_file>);
- close $hellos_file or die "$hellos_file: $!";
- open (my $quotes_file, "<", $quotes_path) or die "couldn't open ${quotes_path}: $!";
+ close $hellos_file or die "${hellos_file}: $!";
+ open (my $quotes_file, '<', $quotes_path) or die "couldn't open ${quotes_path}: $!";
chomp(my @quotes = <$quotes_file>);
- close $quotes_file or die "$quotes_file: $!";
+ close $quotes_file or die "${quotes_file}: $!";
return {
chan => $chan,
@@ -406,13 +407,13 @@ while (1) {
}
if ($sock) {
# set user, real, and nick, then join
- out($sock, $opts, "USER $USER * * :$REAL");
- out($sock, $opts, "NICK $NICK");
+ out($sock, $opts, "USER ${USER} * * :${REAL}");
+ out($sock, $opts, "NICK ${NICK}");
out($sock, $opts, "JOIN $opts->{'chan'}");
# main loop
evasdrop($sock, $opts, $lists);
# end session and sleep a bit before reconnecting
- out($sock, $opts, "QUIT");
+ out($sock, $opts, 'QUIT');
if ($opts->{'tls'}) {
close($sock);
} else {
diff --git a/matabot.8 b/matabot.8
@@ -57,7 +57,7 @@ Load the quotes file from
.It Fl t
Turn on TLS.
.It Fl v
-Produce more verbose output.
+Produce more verbose output (logs all irc events in addition to errors).
.El
.Sh COMMANDS
Bot can do some tricks (non-exhaustive, or it won't be funny):
@@ -125,7 +125,7 @@ comic.
Typical invocation
.Po use these flags in your Pa /etc/rc.conf.local Pc Ns :
.Pp
-.Dl $ matabot -th irc.server.tld -j #analognowhere -p 6697
+.Dl $ matabot -lth irc.server.tld -j #analognowhere -p 6697
.Pp
Test on a local ircd with verbose logging turned on.
(No TLS):