mata_bot

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

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:
Mmata_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\ ]+)$/) {