commit 166ac4ea24eeb6b169040d1a333fbfd79309d661 from: jrmu date: Fri Feb 17 06:02:25 2023 UTC Cleaned up some variable naming and diagnostic messages commit - b2b6fd905726aa542457f819ce4acd7799e198cc commit + 166ac4ea24eeb6b169040d1a333fbfd79309d661 blob - dcf14b3a7a1e6dbc1c1f984d43bbcc5cad7b271f blob + fcfec55c54b5ee70d0a8bc4865067d055d38956d --- botnow +++ botnow @@ -83,9 +83,9 @@ $conf{pass} = $conf{pass} or die "ERROR: botnow.conf: # Comma-separated list of channels for requesting bouncers $conf{chans} = $conf{chans} or die "ERROR: botnow.conf: chans"; -my @activenets; -if (defined($conf{activenets})) { - @activenets = split(/\s+/, $conf{activenets}); +my @networks; +if (defined($conf{networks})) { + @networks = split(/\s+/, $conf{networks}); } # Mail from address @@ -137,7 +137,6 @@ foreach my $mod (@modules) { $init->(); } - my @bots; my @months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ); my @days = qw(Sun Mon Tue Wed Thu Fri Sat Sun); @@ -145,7 +144,7 @@ my @chans = split /[,\s]+/m, $conf{chans}; my @teamchans; if (defined($conf{teamchans})) { @teamchans = split /[,\s]+/m, $conf{teamchans}; } my $call; -my $botnick = $conf{nick}; +my $nick = $conf{nick}; my $host = $conf{host}; my $port = $conf{port}; my $pass = $conf{pass}; @@ -163,15 +162,16 @@ unveil() or die "Unable to lock unveil $!"; #rpath for reading file, wpath for writing file, cpath for creating path #flock, fattr for sqlite pledge( qw(stdio rpath wpath cpath inet dns proc exec flock fattr) ) or die "Unable to pledge: $!"; + # create sockets my $sel = IO::Select->new( ); -foreach my $network (@activenets) { +foreach my $network (@networks) { my $socket = IO::Socket::INET->new(PeerAddr=>$host, PeerPort=>$port, Proto=>'tcp', Timeout=>'300') || print "Failed to establish connection\n"; $sel->add($socket); my $bot = {("sock" => $socket), ("name" => $network)}; push(@bots, $bot); - putserv($bot, "NICK $botnick"); - putserv($bot, "USER $botnick * * :$botnick"); + putserv($bot, "NICK $nick"); + putserv($bot, "USER $nick * * :$nick"); } while(my @ready = $sel->can_read) { @@ -192,15 +192,15 @@ while(my @ready = $sel->can_read) { putserv($bot, "PONG :$1"); } elsif ($response =~ /^:irc.znc.in (.*) (.*) :(.*)\r\n$/) { my ($type, $target, $text) = ($1, $2, $3); - if ($type eq "001" && $target =~ /^$botnick.?$/ && $text eq "Welcome to ZNC") { - } elsif ($type eq "NOTICE" && $target =~ /^$botnick.?$/ && $text eq "*** To connect now, you can use /quote PASS :, or /quote PASS /: to connect to a specific network.") { - } elsif ($type eq "NOTICE" && $target =~ /^$botnick.?$/ && $text eq "*** You need to send your password. Configure your client to send a server password.") { - } elsif ($type eq "464" && $target =~ /^$botnick.?$/ && $text eq "Password required") { - putserv($bot, "PASS $botnick/$bot->{name}:$pass"); + if ($type eq "001" && $target =~ /^$nick.?$/ && $text eq "Welcome to ZNC") { + } elsif ($type eq "NOTICE" && $target =~ /^$nick.?$/ && $text eq "*** To connect now, you can use /quote PASS :, or /quote PASS /: to connect to a specific network.") { + } elsif ($type eq "NOTICE" && $target =~ /^$nick.?$/ && $text eq "*** You need to send your password. Configure your client to send a server password.") { + } elsif ($type eq "464" && $target =~ /^$nick.?$/ && $text eq "Password required") { + putserv($bot, "PASS $nick/$bot->{name}:$pass"); if ($bot->{name} =~ /^$localnet$/i) { - putserv($bot, "OPER $botnick $pass"); + putserv($bot, "OPER $nick $pass"); putserv($bot, "PRIVMSG *status :LoadMod --type=user controlpanel"); - putserv($bot, "PRIVMSG *controlpanel :get Admin $botnick"); + putserv($bot, "PRIVMSG *controlpanel :get Admin $nick"); putserv($bot, "PRIVMSG *controlpanel :get Nick cloneuser"); foreach my $chan (@teamchans) { putserv($bot, "JOIN $chan"); @@ -211,26 +211,26 @@ while(my @ready = $sel->can_read) { putserv($bot, "JOIN $chan"); } } - } elsif ($type eq "464" && $target =~ /^$botnick.?$/ && $text eq "Invalid Password") { + } elsif ($type eq "464" && $target =~ /^$nick.?$/ && $text eq "Invalid Password") { die "ERROR: Wrong Username/Password: $bot->{name}"; } else { - debug(ERRORS, "Unexpected bncnow.pl 257: type: $type, target: $target, text: $text"); + debug(ERRORS, "ERROR: Unexpected type: $type, target: $target, text: $text"); } } elsif($response =~ /^:(([^!]+)!([^@]+@[^@ ]+)) PRIVMSG ([^ ]+) :(.*)\r\n$/i) { - my ($hostmask, $nick, $host, $target, $text) = ($1, $2, $3, $4, $5); - if ($hostmask eq '*status!znc@znc.in' && $target =~ /^$botnick.?$/) { + my ($hostmask, $sendnick, $host, $target, $text) = ($1, $2, $3, $4, $5); + if ($hostmask eq '*status!znc@znc.in' && $target =~ /^$nick.?$/) { if ($text =~ /Network ([[:ascii:]]+) doesn't exist./) { - debug(ERRORS, "nonexistent: $1"); + debug(ERRORS, "ERROR: nonexistent: $1"); } elsif ($text eq "You are currently disconnected from IRC. Use 'connect' to reconnect.") { - debug(ERRORS, "disconnected: $bot->{name}"); + debug(ERRORS, "ERROR: disconnected: $bot->{name}"); } elsif ($text =~ /Unable to load module (.*): Module (.*) already loaded./) { debug(ALL, "Module $1 already loaded\n"); } elsif ($text =~ /^Disconnected from IRC.*$/) { - debug(ERRORS, "$bot->{name}: $text"); + debug(ERRORS, "ERROR: $bot->{name}: $text"); } elsif ($text =~ /^|/) { - debug(ERRORS, "$bot->{name}: $text"); + debug(ERRORS, "ERROR: $bot->{name}: $text"); } else { - debug(ERRORS, "Unexpected bncnow.pl 273: $response"); + debug(ERRORS, "ERROR: Unexpected: $response"); } } elsif ($text =~ /^!([[:graph:]]+)\s*(.*)/) { my ($cmd, $text) = ($1, $2); @@ -239,14 +239,14 @@ while(my @ready = $sel->can_read) { foreach my $c (@{$call->{pub}}) { if ($cmd eq $c->{cmd}) { my $proc = $c->{proc}; - $proc->($bot, $nick, $host, $hand, $target, $text); + $proc->($bot, $sendnick, $host, $hand, $target, $text); } } } else { foreach my $c (@{$call->{msg}}) { if ($cmd eq $c->{cmd}) { my $proc = $c->{proc}; - $proc->($bot, $nick, $host, $hand, $text); + $proc->($bot, $sendnick, $host, $hand, $text); } } } @@ -255,12 +255,12 @@ while(my @ready = $sel->can_read) { if ($target =~ /^#/) { foreach my $c (@{$call->{pubm}}) { my $proc = $c->{proc}; - $proc->($bot, $nick, $host, $hand, $target, $text); + $proc->($bot, $sendnick, $host, $hand, $target, $text); } } else { foreach my $c (@{$call->{msgm}}) { my $proc = $c->{proc}; - $proc->($bot, $nick, $host, $hand, $text); + $proc->($bot, $sendnick, $host, $hand, $text); } } } @@ -268,20 +268,20 @@ while(my @ready = $sel->can_read) { } elsif($response =~ /^:([^ ]+) NOTICE ([^ ]+) :(.*)\r\n$/i) { my ($hostmask, $target, $text) = ($1, $2, $3); if ($hostmask =~ /([^!]+)!([^@]+@[^@ ]+)/) { - my ($nick, $host) = ($1, $2); + my ($sendnick, $host) = ($1, $2); my $hand = $staff; # TODO fix later foreach my $c (@{$call->{notc}}) { # if ($text eq $c->{mask}) { # TODO fix later my $proc = $c->{proc}; - $proc->($bot, $nick, $host, $hand, $text, $target); + $proc->($bot, $sendnick, $host, $hand, $text, $target); # } } - # TODO use CTCR + # CTCP replies if ($hostmask ne '*status!znc@znc.in') { if ($text =~ /^(PING|VERSION|TIME|USERINFO) (.*)$/i) { my ($key, $val) = ($1, $2); - my $id = SQLite::id("irc", "nick", $nick, $expires); + my $id = SQLite::id("irc", "nick", $sendnick, $expires); SQLite::set("irc", "id", $id, "ctcp".lc($key), $val); SQLite::set("irc", "id", $id, "localtime", time()); } @@ -293,12 +293,12 @@ while(my @ready = $sel->can_read) { } elsif($response =~ /^:([^ ]+) MODE ([^ ]+) ([^ ]+)\s*(.*)\r\n$/i) { my ($hostmask, $chan, $change, $targets) = ($1, $2, $3, $4); if ($hostmask =~ /([^!]+)!([^@]+@[^@ ]+)/) { - my ($nick, $host) = ($1, $2); + my ($sendnick, $host) = ($1, $2); my $hand = $staff; # TODO fix later foreach my $c (@{$call->{mode}}) { # TODO filter by mask my $proc = $c->{proc}; - $proc->($bot, $nick, $host, $hand, $chan, $change, $targets); + $proc->($bot, $sendnick, $host, $hand, $chan, $change, $targets); } } debug(ALL, "$hostmask MODE $chan $change $targets"); @@ -307,42 +307,42 @@ while(my @ready = $sel->can_read) { #:jrmu!jrmu@jrmu.staff.ircnow.org MODE #testing +o jrmu #Unexpected bncnow.pl 460: :irc.guava.ircnow.org MODE guava :+o } elsif($response =~ /^:(([^!]+)!([^@]+@[^@ ]+)) JOIN :?(.*)\r\n$/i) { - my ($hostmask, $nick, $host, $chan) = ($1, $2, $3, $4); + my ($hostmask, $sendnick, $host, $chan) = ($1, $2, $3, $4); my $hand = $staff; # TODO fix later foreach my $c (@{$call->{join}}) { my $proc = $c->{proc}; - $proc->($bot, $nick, $host, $hand, $chan); + $proc->($bot, $sendnick, $host, $hand, $chan); } debug(ALL, "$hostmask JOIN $chan"); #:jrmu!jrmu@jrmu.staff.ircnow.org JOIN :#testing } elsif($response =~ /^:(([^!]+)!([^@]+@[^@ ]+)) PART ([^ ]+) :(.*)\r\n$/i) { - my ($hostmask, $nick, $host, $chan, $text) = ($1, $2, $3, $4, $5); + my ($hostmask, $sendnick, $host, $chan, $text) = ($1, $2, $3, $4, $5); my $hand = $staff; # TODO fix later foreach my $c (@{$call->{part}}) { # if ($text eq $c->{mask}) { # TODO fix later my $proc = $c->{proc}; - $proc->($bot, $nick, $host, $hand, $chan, $text); + $proc->($bot, $sendnick, $host, $hand, $chan, $text); # } } debug(ALL, "$hostmask PART $chan :$text"); #:jrmu!jrmu@jrmu.staff.ircnow.org PART #testing : } elsif($response =~ /^:(([^!]+)!([^@]+@[^@ ]+)) KICK (#[^ ]+) ([^ ]+) :(.*)\r\n$/i) { - my ($hostmask, $nick, $host, $chan, $kicked, $text) = ($1, $2, $3, $4, $5, $6); + my ($hostmask, $sendnick, $host, $chan, $kicked, $text) = ($1, $2, $3, $4, $5, $6); my $hand = $staff; # TODO fix later foreach my $c (@{$call->{kick}}) { # if ($text eq $c->{mask}) { # TODO fix later my $proc = $c->{proc}; - $proc->($bot, $nick, $host, $hand, $chan, $text); + $proc->($bot, $sendnick, $host, $hand, $chan, $text); # } } debug(ALL, "$hostmask KICK $chan $kicked :$text"); #jrmu!jrmu@jrmu.users.undernet.org KICK #ircnow guava :this is a test } elsif($response =~ /^:(([^!]+)!([^@]+@[^@ ]+)) NICK :?(.*)\r\n$/i) { - my ($hostmask, $nick, $host, $text) = ($1, $2, $3, $4); + my ($hostmask, $sendnick, $host, $text) = ($1, $2, $3, $4); debug(ALL, "$hostmask NICK $text"); #:Fly0nDaWaLL|dal!psybnc@do.not.h4ck.me NICK :nec|dal } elsif($response =~ /^:(([^!]+)!([^@]+@[^@ ]+)) QUIT :(.*)\r\n$/i) { - my ($hostmask, $nick, $host, $text) = ($1, $2, $3, $4); + my ($hostmask, $sendnick, $host, $text) = ($1, $2, $3, $4); debug(ALL, "$hostmask QUIT :$text"); #:Testah!~sid268081@aa38a510 QUIT :Client closed connection } elsif($response =~ /^NOTICE AUTH :(.*)\r\n$/i) { @@ -353,7 +353,7 @@ while(my @ready = $sel->can_read) { #NOTICE AUTH: *** Checking Ident #NOTICE AUTH: *** Got ident response #NOTICE AUTH: *** Found your hostname - } elsif ($response =~ /^:([[:graph:]]+) (\d\d\d) $botnick.? :?(.*)\r?\n?\r$/i) { + } elsif ($response =~ /^:([[:graph:]]+) (\d\d\d) $nick.? :?(.*)\r?\n?\r$/i) { my ($server, $code, $text) = ($1, $2, $3); if ($code =~ /^001$/) { # Server Info debug(ERRORS, "connected: $bot->{name}"); @@ -447,11 +447,11 @@ while(my @ready = $sel->can_read) { #Unexpected bncnow.pl 454: irc.guava.ircnow.org 396 guava.guava.ircnow.org :is your displayed hostname now } elsif ($code =~ /^464$/) { # Invalid password for oper foreach my $chan (@teamchans) { - putserv($bot, "PRIVMSG $chan :$botnick oper password failed; the bot will be unable to view uncloaked IP addresses"); + putserv($bot, "PRIVMSG $chan :$nick oper password failed; the bot will be unable to view uncloaked IP addresses"); } } elsif ($code =~ /^477$/) { # Can't join channel foreach my $chan (@teamchans) { - putserv($bot, "PRIVMSG $chan :ERROR: $botnick on $server: $text"); + putserv($bot, "PRIVMSG $chan :ERROR: $nick on $server: $text"); } } elsif ($code == 716 && $text =~ /^([-_\|`a-zA-Z0-9]+) :is in \+g mode \(server-side ignore.\)/) { debug(ALL, "$text"); @@ -546,15 +546,14 @@ sub debug { sub isstaff { my( $bot, $nick ) = @_; - if( !( $bot->{name} =~ /^$localnet$/i ) ) - { + if( !( $bot->{name} =~ /^$localnet$/i ) ) { return 0; } my $lnick = lc $nick; foreach( @stafflist ) { if( $lnick eq $_ ) { return 1; - } + } } return 0; }