commit 731127fc2f8eb6e363d5aed54f26050229b14c70 from: jrmu date: Wed Feb 22 23:05:07 2023 UTC Cleaned up some BNC.pm code, fixed help message commit - 38334f68ad2bb6f935513f481a8af6786797594a commit + 731127fc2f8eb6e363d5aed54f26050229b14c70 blob - ff2df436c956bc21160f1837c8f91c7df654b8a1 blob + 09c129831bc7593b34bed9ae7164f6d2638878b9 --- BNC.pm +++ BNC.pm @@ -6,8 +6,6 @@ use strict; use warnings; use OpenBSD::Pledge; use OpenBSD::Unveil; -use MIME::Base64; -use Digest::SHA qw(sha256_hex); use lib './'; require "SQLite.pm"; require "Hash.pm"; @@ -32,8 +30,6 @@ my $mailname = $conf{mailname}; # File containing IRC networks my $netpath = "networks"; my @networks; -#my $zncconfpath = $conf{zncconfpath} || "$zncdir/.znc/configs/znc.conf"; -my $znctree = { Node => "root" }; use constant { NONE => 0, @@ -42,17 +38,8 @@ use constant { ALL => 3, }; -`doas chown znc:daemon /home/znc/home/znc/.znc/configs/znc.conf`; `doas chmod g+r /home/znc/home/znc/.znc/`; -#my @zncconf = main::readarray($zncconfpath); -#$znctree; my @users; -#foreach my $line (@zncconf) { -# if ($line =~ //) { -# push(@users, $1); -# } -#} -#$znctree = parseml($znctree, @zncconf); main::cbind("pub", "-", "bnc", \&mbnc); main::cbind("msg", "-", "bnc", \&mbnc); main::cbind("msg", "-", "regex", \&mregex); @@ -92,22 +79,11 @@ sub readnetworks { } sub init { - #znc.conf file - #unveil("$zncconfpath", "r") or die "Unable to unveil $!"; - #dependencies for figlet unveil("/usr/local/bin/figlet", "rx") or die "Unable to unveil $!"; unveil("/usr/lib/libc.so.95.1", "r") or die "Unable to unveil $!"; unveil("/usr/libexec/ld.so", "r") or die "Unable to unveil $!"; unveil("/usr/bin/tail", "rx") or die "Unable to unveil $!"; unveil("$netpath", "r") or die "Unable to unveil $!"; - #znc.log file - #unveil("$znclog", "r") or die "Unable to unveil $!"; - #print treeget($znctree, "AnonIPLimit")."\n"; - #print treeget($znctree, "ServerThrottle")."\n"; - #print treeget($znctree, "ConnectDelay")."\n"; - #print "treeget\n"; - #print Dumper \treeget($znctree, "User", "Node"); - #print Dumper \treeget($znctree, "User", "Network", "Node"); @networks = readnetworks($netpath); @@ -115,67 +91,6 @@ sub init { @networks = sort @networks; } -# parseml($tree, @lines) -# tree is a reference to a hash -# returns hash ref of tree -sub parseml { - my ($tree, @lines) = @_; - #if (scalar(@lines) == 0) { return $tree; } - while (scalar(@lines) > 0) { - my $line = shift(@lines); - if ($line =~ /^\s*([^=<>\s]+)\s*=\s*([^=<>]+)\s*$/) { - my ($tag, $val) = ($1, $2); - $tree->{$tag} = $val; - } elsif ($line =~ /^\/\//) { # skip comments - } elsif ($line =~ /^\s*$/) { # skip blank lines - } elsif ($line =~ /^\s*<([^>\s\/]+)\s*([^>\/]*)>\s*$/) { - my ($tag, $val) = ($1, $2); - if (!defined($tree->{$tag})) { $tree->{$tag} = []; } - my @newlines; - while (scalar(@lines) > 0) { - my $line = shift(@lines); - if ($line =~ /^\s*<\/$tag>\s*$/) { - my $subtree = parseml({ Node => $val }, @newlines); - push(@{$tree->{$tag}}, $subtree); - return parseml($tree, @lines); - } - push(@newlines, $line); - } - } else { print "ERROR: $line\n"; } - #TODO ERRORS not defined?? -# } else { main::debug(ERRORS, "ERROR: $line"); } - } - return $tree; -} - -#Returns array of all values -#treeget($tree, "User"); -sub treeget { - my ($tree, @keys) = @_; - my $subtree; - my @rest = @keys; - my $key = shift(@rest); - $subtree = $tree->{$key}; - if (!defined($subtree)) { - return ("Undefined"); - } elsif (ref($subtree) eq 'HASH') { - return treeget($subtree, @rest); - } elsif (ref($subtree) eq 'ARRAY') { - my @array = @{$subtree}; - my @ret; - foreach my $hashref (@array) { - push(@ret, treeget($hashref, @rest)); - } - return @ret; - #my @array = @{$subtree}; - #print Dumper treeget($hashref, @rest); - #print Dumper treeget({$key => $subtree}, @rest); - #return (treeget($hashref, @rest), treeget({$key => $subtree}, @rest)); - } else { - return ($subtree); - } -} - sub mbnc { my ($bot, $nick, $host, $hand, @args) = @_; my ($chan, $text); @@ -189,7 +104,7 @@ sub mbnc { if ($text =~ /^$/) { main::putserv($bot, "PRIVMSG $nick :Type !help for new instructions"); foreach my $chan (@teamchans) { - main::putservlocalnet($bot, "PRIVMSG $chan :Help *$nick* on ".$bot->{name}); + main::putservlocalnet($bot, "PRIVMSG $chan :Help *$nick* on network ".$bot->{name}); } return; } elsif (main::isstaff($bot, $nick) && $text =~ /^delete\s+([[:ascii:]]+)/) { @@ -400,7 +315,6 @@ set Timezone cloneuser US/Pacific LoadModule cloneuser controlpanel LoadModule cloneuser chansaver EOF -#LoadModule cloneuser buffextras main::putserv($bot, "PRIVMSG *controlpanel :$msg"); foreach my $n (@networks) { my $net = $n->{name}; @@ -521,6 +435,8 @@ sub mlastseen { # sendmsg($bot, "$newnick", "Email sent"); #} +#`doas chown znc:daemon /home/znc/home/znc/.znc/configs/znc.conf`; + # if ($reply =~ /^!resend ([-_0-9a-zA-Z]+) ([-_0-9a-zA-Z]+@[-_0-9a-zA-Z]+\.[-_0-9a-zA-Z]+)$/i) { # my ($newnick, $email) = ($1, $2); # my $password = newpass(); @@ -553,5 +469,88 @@ sub mlastseen { #perform Keeps a list of commands to be executed when ZNC connects to IRC. #webadmin Web based administration module. +#my $zncconfpath = $conf{zncconfpath} || "$zncdir/.znc/configs/znc.conf"; +#my $znctree = { Node => "root" }; + #znc.conf file + #unveil("$zncconfpath", "r") or die "Unable to unveil $!"; + #dependencies for figlet + #znc.log file + #unveil("$znclog", "r") or die "Unable to unveil $!"; + #print treeget($znctree, "AnonIPLimit")."\n"; + #print treeget($znctree, "ServerThrottle")."\n"; + #print treeget($znctree, "ConnectDelay")."\n"; + #print "treeget\n"; + #print Dumper \treeget($znctree, "User", "Node"); + #print Dumper \treeget($znctree, "User", "Network", "Node"); +#my @zncconf = main::readarray($zncconfpath); +#$znctree; +#foreach my $line (@zncconf) { +# if ($line =~ //) { +# push(@users, $1); +# } +#} +#$znctree = parseml($znctree, @zncconf); + ## parseml($tree, @lines) + ## tree is a reference to a hash + ## returns hash ref of tree + #sub parseml { + # my ($tree, @lines) = @_; + # #if (scalar(@lines) == 0) { return $tree; } + # while (scalar(@lines) > 0) { + # my $line = shift(@lines); + # if ($line =~ /^\s*([^=<>\s]+)\s*=\s*([^=<>]+)\s*$/) { + # my ($tag, $val) = ($1, $2); + # $tree->{$tag} = $val; + # } elsif ($line =~ /^\/\//) { # skip comments + # } elsif ($line =~ /^\s*$/) { # skip blank lines + # } elsif ($line =~ /^\s*<([^>\s\/]+)\s*([^>\/]*)>\s*$/) { + # my ($tag, $val) = ($1, $2); + # if (!defined($tree->{$tag})) { $tree->{$tag} = []; } + # my @newlines; + # while (scalar(@lines) > 0) { + # my $line = shift(@lines); + # if ($line =~ /^\s*<\/$tag>\s*$/) { + # my $subtree = parseml({ Node => $val }, @newlines); + # push(@{$tree->{$tag}}, $subtree); + # return parseml($tree, @lines); + # } + # push(@newlines, $line); + # } + # } else { print "ERROR: $line\n"; } + # #TODO ERRORS not defined?? + ## } else { main::debug(ERRORS, "ERROR: $line"); } + # } + # return $tree; + #} + # + ##Returns array of all values + ##treeget($tree, "User"); + #sub treeget { + # my ($tree, @keys) = @_; + # my $subtree; + # my @rest = @keys; + # my $key = shift(@rest); + # $subtree = $tree->{$key}; + # if (!defined($subtree)) { + # return ("Undefined"); + # } elsif (ref($subtree) eq 'HASH') { + # return treeget($subtree, @rest); + # } elsif (ref($subtree) eq 'ARRAY') { + # my @array = @{$subtree}; + # my @ret; + # foreach my $hashref (@array) { + # push(@ret, treeget($hashref, @rest)); + # } + # return @ret; + # #my @array = @{$subtree}; + # #print Dumper treeget($hashref, @rest); + # #print Dumper treeget({$key => $subtree}, @rest); + # #return (treeget($hashref, @rest), treeget({$key => $subtree}, @rest)); + # } else { + # return ($subtree); + # } + #} + + 1; # MUST BE LAST STATEMENT IN FILE blob - 6f51bbd251c5e01b86dd3b6b666dfba65cc531ef blob + 6df39f6f4e394386d6b4ef5fb28988e72d15246c --- Help.pm +++ Help.pm @@ -56,7 +56,7 @@ EOF } main::putserv($bot, "PRIVMSG $nick :$msg"); foreach my $chan (@teamchans) { - main::putservlocalnet($bot, "PRIVMSG $chan :Help *$nick* on ".$bot->{name}); + main::putservlocalnet($bot, "PRIVMSG $chan :Help *$nick* on network ".$bot->{name}); } }