commit 46ca98d72e0fc81ffc29c72899ccad7957cb7589
parent 772f93146a99b5428143b2323fb7daae8c14a182
Author: boredpasta <boredpasta@tutanota.com>
Date: Sun, 16 Mar 2025 18:35:15 +0200
add support for commandline arguments to facilitate local testing
Diffstat:
M | mata_bot.pl | | | 56 | +++++++++++++++++++++++++++++++++++++++++--------------- |
1 file changed, 41 insertions(+), 15 deletions(-)
diff --git a/mata_bot.pl b/mata_bot.pl
@@ -1,18 +1,23 @@
-use v5.38;
-use POSIX qw(strftime);
+#!/usr/bin/perl
+use v5.40;
+
+use Getopt::Std;
use IO::Socket qw(AF_INET SOCK_STREAM);
use IO::Socket::SSL;
+use POSIX qw(strftime);
-my $LOGGING = 0;
my $CHUNK_LENGTH = 1024;
-my $NETWORK = 'irc.libera.chat';
-my $PORT = '6697';
my $NICK = 'mata_bot';
my $USER = 'mata_bot_beta4';
my $REAL = 'death to technomage!!';
my $CHAN = '#unix_surrealism';
my $SULTANA = 'anelli';
+my $host = 'irc.libera.chat';
+my $logging = 0;
+my $port = '6697';
+my $tls = 1;
+
sub logger {
my $logmessage = shift;
open(my $logfile, ">>", "bot.log") or die "Can't open bot.log: $!";
@@ -21,7 +26,7 @@ sub logger {
sub out {
my ($sock, $message) = @_;
- logger($message) if ($LOGGING);
+ logger($message) if ($logging);
print $sock "$message\r\n";
}
@@ -51,14 +56,31 @@ sub respond {
}
}
+# process args
+getopts('h:lp:t', \my %opts);
+$host = $opts{'h'} if ($opts{'h'});
+$logging = 1 if ($opts{'l'});
+$port = $opts{'p'} if ($opts{'p'});
+$tls = 0 if ($opts{'t'});
+
# start the connection
-my $sock = IO::Socket::SSL->new(
- PeerHost => $NETWORK,
- PeerPort => $PORT,
- Domain => AF_INET,
- Type => SOCK_STREAM,
- proto => 'tcp',
-) || die "Can't open socket: $IO::Socket::errstr";
+my $sock;
+if ($tls) {
+ $sock = IO::Socket::SSL->new(
+ Domain => AF_INET,
+ Type => SOCK_STREAM,
+ PeerHost => $host,
+ PeerPort => $port,
+ ) || die "Can't open socket: $IO::Socket::errstr";
+} else {
+ $sock = IO::Socket->new(
+ Domain => AF_INET,
+ Type => SOCK_STREAM,
+ proto => 'tcp',
+ PeerHost => $host,
+ PeerPort => $port,
+ ) || die "Can't open socket: $IO::Socket::errstr";
+}
# set user, real, and nick, then join
out($sock, "USER $USER * * :$REAL");
@@ -71,7 +93,11 @@ my $chunk = '';
my $message = '';
while (1) {
# buffer up
- $chunk = <$sock>;
+ if ($tls) {
+ $chunk = <$sock>;
+ } else {
+ $sock->recv($chunk, $CHUNK_LENGTH);
+ }
$chunk =~ /^([^\r\n]+)(\r\n)?([^\r\n]+)?$/;
# keep reading if chunk is empty
next if (not $1);
@@ -93,7 +119,7 @@ while (1) {
}
# log message
- logger($message) if ($LOGGING);
+ logger($message) if ($logging);
# respond to message
if ($message =~ /^PING :([^\000\r\n\ ]+)$/) {