]> jfr.im git - irc/SurrealServices/srsv.git/commitdiff
FIx parse errors & bot_part_if_needed
authorerry <redacted>
Mon, 1 Aug 2011 15:25:06 +0000 (15:25 +0000)
committererry <redacted>
Mon, 1 Aug 2011 15:25:06 +0000 (15:25 +0000)
works in a real insp network!

git-svn-id: http://svn.tabris.net/repos/srsv@3552 70d4eda1-72e9-0310-a436-91e5bd24443c

branches/0.5.0/SrSv/Agent.pm
branches/0.5.0/SrSv/IRCd/Event.pm
branches/0.5.0/SrSv/IRCd/State.pm
branches/0.5.0/SrSv/Insp/Parse.pm
branches/0.5.0/SrSv/Insp/Send.pm
branches/0.5.0/SrSv/User/Notice.pm
branches/0.5.0/modules/core.pm
branches/0.5.0/modules/services.pm
branches/0.5.0/modules/serviceslibs/botserv.pm
branches/0.5.0/modules/serviceslibs/chanserv.pm

index fcf62fc0cf8f8caffe07d1572d04aab476dbfe5a..c2ae9d61b5d5f1cbd10f5ca6c58e0a9d98c02822 100644 (file)
@@ -143,7 +143,15 @@ sub set_agent_umode($$) {
 }
 sub agent_join($$) {
        my ($agent, $chan) = @_;
-       ircd::agent_dojoin($agent,$chan);
+       my $anick;
+       if (ref ($agent) eq "HASH") {
+               $anick = $agent->{NICK};
+       }
+       else { $anick = $agent; }
+       if($agents{lc $anick}) {
+               $agents{lc $anick}{CHANS}{lc $chan} = 1;
+               ircd::agent_dojoin($agent,$chan);
+       }
 }
 sub agent_sync() {
        foreach my $j (@defer_join) {
index e9d56fe6175f36826a19eb4bf80a8edc686fdaee..66d40a365c0b3d1db9e5e18636c666fe59bab28d 100644 (file)
@@ -88,9 +88,9 @@ sub callfuncs {
                QUEUE_DEPTH => SrSv::IRCd::Queue::queue_size(),
        };
        if(initial_synced && ($message->{QUEUE_DEPTH} > main_conf_highqueue) && ($last_highqueue < time()-5)) {
-               ircd::privmsg_noloop(main_conf_local, main_conf_operchan, "HIGH TRAFFIC WARNING",
+               ircd::privmsg(main_conf_local, main_conf_operchan, "HIGH TRAFFIC WARNING",
                        "Queue depth exceeded @{[main_conf_highqueue]}") if defined(main_conf_operchan);
-               ircd::privmsg_noloop(main_conf_local, main_conf_diag, "HIGH TRAFFIC WARNING",
+               ircd::privmsg(main_conf_local, main_conf_diag, "HIGH TRAFFIC WARNING",
                        "Queue depth exceeded @{[main_conf_highqueue]}");
                $last_highqueue = time();
        }
index 44d923a523c089c8aa65af83a86b4e422645c999..eb44c488670667a61783c9d890fa7ef82e9b1cc3 100644 (file)
@@ -69,7 +69,6 @@ sub calc_synced {
        SYNCED: {
                foreach my $s (keys(%servers)) {
                        my $state = get_server_state($s);
-                       print "Server:d $s  State: $state\n" if DEBUG();
                        if(!$state) {
                                $synced = 0;
                                last SYNCED;
@@ -80,6 +79,7 @@ sub calc_synced {
        }
 
        {
+               print "remote $remoteserv\n";
                my $state = get_server_state($remoteserv);
                if(!$state) {
                        $initial_synced = 0;
@@ -91,11 +91,11 @@ sub calc_synced {
 
 sub create_server($$) {
        my ($child, $parent) = @_;
-
+       print "create_server $child $parent\n";
        $servers{$child} = {
                PARENT => $parent,
                CHILDREN => [],
-               SYNCED => 0,
+               SYNCED => 1,
                NONCONFORMANT => isNonconformant($parent, $child),
        };
 
@@ -111,7 +111,7 @@ sub get_server_children($) {
 
 sub set_server_state {
        my ($server, $state) = @_;
-
+       print "set_server_state $server $state\n";
        if(defined($state)) {
                return if $juped_servers{$server};
 
@@ -163,7 +163,7 @@ sub isNonconformant(@) {
 
 sub get_server_state {
        my ($server) = @_;
-
+       print "get_server_state $server " . $servers{$server}{SYNCED} . "\n";
        return 1 if isNonconformant($server);
 
        return $servers{$server}{SYNCED};
index c9774476077e637088b86784a667199aff91f5aa..efd8fd66615544d5523269e0e4f06600400b8d5e 100644 (file)
@@ -103,6 +103,7 @@ sub parse_line($) {
 #parse_fjoin($server, $channel, $ts, $modes, @nicks, @status)
 sub parse_fjoin ($$$$$$) {
        my ($server, $channel, $ts, $modes, $idsr, $statusref) = @_;
+       print "parse_fjoin($server,$channel,$ts,$modes,$idsr,$statusref)";
        my @status = @$statusref;
        my @ids = @$idsr;
        my $i = 0;
@@ -241,7 +242,7 @@ sub UID ($) {
                print "2222222\n";
                #:965 UID 965AAAAAG 1311863295 erry arceus.pokemonlake.com IceFyre/NetAdmin/erry ~erry 216.14.116.138 1311863255 +IWhiosw   +ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz :erry
                my ($server, $uid, $stamp, $nick, $host, $vhost, $ident, $IP, $ts, $modes, $snomasks, $gecos) = ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12);
-               $modes .= $snomasks;
+               $modes .= " " . $snomasks;
                print "UID $uid " . decodeUUID($uid) . "\n";
                my $user = { NICK => $nick, ID => decodeUUID($uid) };
                return ('NICKCONN', undef, undef, WF_NICK, $user, 0, $ts, $ident, $host, $server, $stamp, $modes, $vhost, $gecos,
@@ -377,9 +378,12 @@ sub JOIN($) {
 }
 
 sub FJOIN ($) {
-       #>> 13 :97K FJOIN #erry 1307879417 +nt :o,97KAAAAAA ,97KAAAAAB
-       if ($_[0] =~ m"^(:\S+) FJOIN (\S+) (\d+) (\S+) (:?)(.*)$") {
-               my ($server, $channel, $ts, $modes, $userstring) = ($1, $2, $3, $4, $6);
+       print "FJOIN\n";
+       #>> 114 :965 FJOIN #erry 1305486096 +nt :o,00BAAAAAX qo,965AAAAAC
+       if ($_[0] =~ m"^:(\S+) FJOIN (\S+) (\d+) (\S+) :(.*)$") {
+               print "?????FJ\n";
+               my ($server, $channel, $ts, $modes, $userstring) = ($1, $2, $3, $4, $5);
+               print "userstring $userstring";         
                my @users = split (" ", $userstring);
                my (@ids, @status);
                foreach my $user (@users) {
@@ -389,9 +393,21 @@ sub FJOIN ($) {
                }
                return ('SJOIN', undef, undef, WF_CHAN, parse_fjoin($server, $channel, $ts, $modes, \@ids, \@status));
        }
+       #>> :965 FJOIN #ERRY1 1312013713 +nrst ,965AAAAAB qo,965AAAAAC
+       elsif ($_[0] =~ m"^:(\S+) FJOIN (\S+) (\d+) (\S+) (.*)$") {
+                my ($server, $channel, $ts, $modes, $userstring) = ($1, $2, $3, $4, $5);
+                my @users = split (" ", $userstring);
+                my (@ids, @status);
+                foreach my $user (@users) {
+                        my @params = split (",",$user);
+                        push (@status, $params[0]);
+                        push (@ids, decodeUUID($params[1]));
+                }
+                return ('SJOIN', undef, undef, WF_CHAN, parse_fjoin($server, $channel,$ts, $modes, \@ids, \@status));
+        }
        #>> 15 :583 FJOIN #opers 1310128904 +Pis :
        #CHANNELS CONFIGURED TO STAY OPEN WITH CHMODE +P (INSP)
-       elsif ($_[0] =~ m"^(:\S+) FJOIN (\S+) (\d+) (\S+) :$") {
+       elsif ($_[0] =~ m"^:(\S+) FJOIN (\S+) (\d+) (\S+) :$") {
                print "WHOOOOOOF";
                #FIXME - Update channel modes.
        }
@@ -437,6 +453,46 @@ sub FMODE($) {
        #:583AAAAAR FMODE #erry 1308214721 +ib test!*@* When any mode in the channel is set.
        #:583 FMODE #erry 1308214721 +b test1!*@* At server connect. Note that the rest of the channel modes are not there but rather at FJOIN. So this will only have bans and the like.
        if($_[0] =~ /^:(\S+) FMODE (#\S+) (\d+) (\S+) ?(.*)$/) {
+               my $id = $1;
+               my $chan = $2;
+               my $m = $4;
+               my $a = $5;
+               my $user;               
+               print "FMODE ID $id " . length($id);
+               if (length($id) > 3) { #UID
+                       print "FFFFFFFFFFF\n";
+                       $user = {ID => decodeUUID($id)};
+                       get_user_nick ($user);
+               }
+               else { #SID
+                       $user = $id;
+               }
+               my $name;
+               my $argz = $5;
+               my @args = split(/ /, $argz);
+               my $modes = $4;
+               print "============MODES $modes=================\n";
+               print "5: $4\n";
+               print "6: $5\n";
+               my @modes = split(//, $modes);
+               my @userargs;
+               foreach my $mode (@modes) {
+                       if($mode eq '+' or $mode eq '-') { next; }
+                       if ($mode !~ /^[vhoaq]$/) { next; }
+                       my $arg = shift (@args);
+                       next if $arg eq '';
+                       if ($arg =~ /^:(\S+)$/) {
+                               $arg = $1;
+                       }
+                       my $id = decodeUUID($arg);
+                       my $tuser = {ID=>$id};
+                       get_user_nick ($tuser);
+                       push @userargs, $tuser;                 
+               }
+               return ('MODE', undef, 1, WF_ALL, $user, $chan, $m, $a, 
+@userargs);
+       }
+       elsif($_[0] =~ /^:(\S+) FMODE (#\S+) (\d+) (\S+) :(.*)$/) {
                my $id = $1;
                my $user;               
                print "FMODE ID $id " . length($id);
@@ -467,7 +523,8 @@ sub FMODE($) {
                        get_user_nick ($tuser);
                        push @userargs, $tuser;                 
                }
-               return ('MODE', undef, 1, WF_ALL, $user, $2, $4, $5, @userargs);
+               return ('MODE', undef, 1, WF_ALL, $user, $2, $4, $5, 
+@userargs);
        }
 }
 sub MODE($) {
@@ -591,12 +648,12 @@ sub NICK($) {
 sub QUIT($) {
        if ($_[0] =~ /^:(\S+) QUIT :Killed \((\S+) \((.*)\)\)$/) {
                #:583AAAAAH QUIT :Killed (erry (die))
-               my $victim = {ID=>decodeUUID($1)};
-               get_user_nick ($victim);
-               my $murderer = {NICK=>$2};
-               get_user_id ($murderer);
-               my $reason = $3;
-               return ('KILL', 0, 1, WF_NICK, $murderer, $victim, $reason, undef);
+       #       my $victim = {ID=>decodeUUID($1)};
+       #       get_user_nick ($victim);
+       #       my $murderer = {NICK=>$2};
+       #       get_user_id ($murderer);
+       #       my $reason = $3;
+       #       return ('KILL', 0, 1, WF_NICK, $murderer, $victim, $reason, undef);
        }
        elsif ($_[0] =~ /^:(\S+) QUIT :(.*)$/) {
                my $user = {ID=>decodeUUID($1)};
@@ -613,13 +670,8 @@ sub OPERQUIT ($) {
 }
 
 sub KILL($) {
-       #All insp sends is :583AAAAAH QUIT :Killed (erry (die))
-       #_VERY_ helpful.
-       #UNLESS you kill someone who's in the services server:
        #:583AAAAAA KILL 123AAAAAA :Killed (erry (die))
        #:123AAAAAA OPERQUIT :Killed (erry (die))
-       #And yes, for (some?) opers it's OPERQUIT not QUIT
-       #Joy, JOY, JOY!
        $_[0] =~ /^:(\S+) KILL (\S+) :(.*)$/;
        my $murderer = {ID=>decodeUUID($1)};
        get_user_nick ($murderer);
index a7aa8f3a5fe80ec15bb7ffa2ac9c33ee1c10ca60..9164eb74cd2880863ce91a42c3fdb98684e85074 100644 (file)
@@ -244,8 +244,14 @@ sub parse_sjoin($$$$) {
 
 sub kick($$$$) {
        my ($src, $chan, $target, $reason) = @_;
-       $src = $main_conf{local} unless initial_synced();
-       my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
+       $src = $main_conf{numeric} unless initial_synced();
+       my $srcId;
+       if (ref($src) eq "HASH") {
+               $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
+       }
+       else {
+               $srcId = $src;
+       }
        my $targetId = ($target->{ID}?encodeUUID_($target):$target->{NICK});
        ircsend(":$srcId KICK $chan $targetId :$reason");
        callfuncs('KICK', 0, 2, [$srcId, $chan, $targetId, $reason]);
index 84b384aa24e740354da81df3418c7a62071f5ea5..d0478394e7b5f243a45482f28863b7927d1bec7d 100644 (file)
@@ -29,7 +29,10 @@ sub notice($@) {
        # FIXME: ref to 'NickServ' should call for the agent-nick in nickserv.pm,
        # but that's not available at this layer, so we'd be making
        # a blind reference to something that _might_ be undef
-       ircd::notice($user->{AGENT} || 'NickServ', $user, @_);
+       my $nsUser = {NICK => $nickserv::nsnick, ID => 
+ircd::getAgentUuid($nickserv::nsnick)};
+
+       ircd::notice($user->{AGENT} || $nsUser, $user, @_);
 }
 
 sub user_die($@) {
index 633db2f63fbf7fa5d59ae08c98bdeacd9e189895..165b43b63fed87d68318d9c481b1ca9a3806d265 100644 (file)
@@ -66,6 +66,8 @@ ircd::setmode($rsUser, main_conf_diag, '+o', $rsUser );
 
 addhandler('SEOS', undef, undef, 'core::ev_connect', 1);
 addhandler('ENDBURST', undef, undef, 'core::ev_connect', 1);
+
+
 sub ev_connect {
        add_timer('perlserv__pingtimer', 60, __PACKAGE__,
                        "core::pingtimer");
index d54455e73fa59cea7a2970ebefcc8e83166e6d43..ea90ae5be2511f2f42565f95f63f6a09e73f7dbd 100644 (file)
@@ -104,7 +104,6 @@ addhandler('KILL', undef, undef, 'nickserv::killhandle');
 
 addhandler('NICKCONN', undef, undef, 'services::ev_nickconn');
 sub ev_nickconn {
-       print "NICKCONN\n";
     nickserv::nick_create(@_[0,2..4,8,5..7,9,10,11]);
 }
 
index 2085b6749cc378ec43e711b180383322fc6cbc59..6dd58353db6ba2470f6dd042287ec9561f2544ea 100644 (file)
@@ -891,19 +891,21 @@ sub bot_join($;$) {
 }
 
 sub bot_part_if_needed($$$;$) {
-       my ($nick, $chan, $reason, $empty) = @_;
+       my ($u, $chan, $reason, $empty) = @_;
        my $cn = $chan->{CHAN};
        my $bot = get_chan_bot($chan);
-       $nick = agent($chan) unless $nick;
+       $u = agent($chan) unless $u;
+       my $nick = $u->{NICK};
        return if (lc $chanserv::enforcers{lc $cn} eq lc $nick);
-
+       print "nick $nick $bot $cn $reason $empty\n";
        if(is_agent_in_chan($nick, $cn)) {
                if(lc $bot eq lc $nick) {
                        if(cr_chk_flag($chan, CRF_BOTSTAY(), 1) or ($empty != 1 or chanserv::get_user_count($chan))) {
+                               print "count " . chanserv::get_user_count($chan);
                                return;
                        }
                }
-
+               print "????\n";
                agent_part($nick, $cn, $reason);
        }
 }
index 108af76732eb190a654786b65aba491f29c8111d..ab517a741cb6a186bfdc46dd03b321f1a7d74410 100644 (file)
@@ -2267,7 +2267,10 @@ sub cs_kick($$$;$$) {
        my $srclevel = get_best_acc($user, $chan);
 
        my ($nick, $override) = can_do($chan, ($ban ? 'BAN' : 'KICK'), $user, { ACC => $srclevel });
-       return unless $nick;
+       if (!$nick) {
+               print "NO NICK???\n";
+               return;
+       }
 
        my $src = get_user_nick($user);
        my $cn = $chan->{CHAN};
@@ -2318,6 +2321,7 @@ sub cs_kick($$$;$$) {
                if($ban) {
                        kickban($chan, $tuser, undef, $reason, 1);
                } else {
+                       print "is service? " , adminserv::is_service($user);
                        ircd::kick(agent($chan), $cn, $tuser, $reason) unless adminserv::is_service($user);
                }
        }
@@ -4592,12 +4596,14 @@ sub user_join($$) {
 sub handle_sjoin($$$$$$$) {
        my ($server, $cn, $ts, $chmodes, $chmodeparms, $userarray, $banarray, $exceptarray) = @_;
        my $chan = { CHAN => $cn };
-
+       print "handle_sjoin\n";
+       print "USERS: " . Dumper(@$userarray); 
        if(synced()) {
                chan_mode($server, $cn, $chmodes, $chmodeparms) if $chmodes;
        } else {
                update_modes($cn, "$chmodes $chmodeparms") if $chmodes;
        }
+       print "hm?\n";
        user_join_multi($chan, $userarray) if scalar @$userarray;
 
        foreach my $ban (@$banarray) {
@@ -4609,6 +4615,7 @@ sub handle_sjoin($$$$$$$) {
 }
 
 sub user_join_multi($$) {
+       print "user_join_multi\n";
        my ($chan, $users) = @_;
        my $cn = $chan->{CHAN};
        my $seq = $ircline;
@@ -4747,6 +4754,7 @@ sub user_part_multi($$$) {
        }
 
        my $uid = get_user_id($user);
+       print "part uid $uid\n";
        my $seq = $ircline;
 
        $get_joinpart_lock->execute; $get_joinpart_lock->finish;
@@ -4832,24 +4840,13 @@ sub chan_mode($$$$@) {
                        next if $arg eq '';
                        next if is_agent($arg);
                        my $auser = shift (@userargs);
-                       if (!defined($auser)) {
-                               if ($IRCd_capabilities{INSP}) {
-                                       $auser = {ID=>$arg};
-                                       get_user_nick ($auser);
-                               }
-                               else {
-                                       $auser = { NICK => $arg };
-                                       get_user_id ($auser);
-                               }
-                       }
+                       print "Auser " , Dumper ($auser);
                        $num = 0 if $mode eq 'v';
                        $num = 1 if $mode eq 'h';
                        $num = 2 if $mode eq 'o';
                        $num = 3 if $mode eq 'a';
                        $num = 4 if $mode eq 'q';
-                       if($opguard and $sign == 1 and
-                               !can_keep_op($user, $chan, $auser, $mode)
-                       ) {
+                       if($opguard and $sign == 1 and!can_keep_op($user, $chan, $auser, $mode)) {
                                push @unargs, ["-" . $mode, $auser];
                        } else {
                                my $nid;