#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;
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,
}
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) {
}
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.
}
#: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);
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($) {
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)};
}
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);
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};
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);
}
}
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) {
}
sub user_join_multi($$) {
+ print "user_join_multi\n";
my ($chan, $users) = @_;
my $cn = $chan->{CHAN};
my $seq = $ircline;
}
my $uid = get_user_id($user);
+ print "part uid $uid\n";
my $seq = $ircline;
$get_joinpart_lock->execute; $get_joinpart_lock->finish;
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;