From 0a4f8009a48bda3e453659ba947aff766ee0b857 Mon Sep 17 00:00:00 2001 From: dms Date: Sat, 28 Apr 2001 14:04:44 +0000 Subject: [PATCH] hookMode: change chan to nick. if deopped by chanserv, check it dont change channel limits during netsplit. git-svn-id: https://svn.code.sf.net/p/infobot/code/trunk/blootbot@466 c11ca15a-4712-0410-83d8-924469b57eb5 --- src/IRC/IrcHelpers.pl | 18 +++++++++++++++--- src/IRC/IrcHooks.pl | 15 +++++++++------ src/IRC/Schedulers.pl | 5 +++++ 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/IRC/IrcHelpers.pl b/src/IRC/IrcHelpers.pl index 9d654f9..9e4c1cd 100644 --- a/src/IRC/IrcHelpers.pl +++ b/src/IRC/IrcHelpers.pl @@ -13,12 +13,14 @@ if (&IsParam("useStrict")) { use strict; } ####################################################################### ##### -# Usage: &hookMode($chan, $modes, @targets); +# Usage: &hookMode($nick, $modes, @targets); sub hookMode { - my ($chan, $modes, @targets) = @_; + my ($nick, $modes, @targets) = @_; my $parity = 0; - $chan = lc $chan; # !!!. + if ($chan =~ tr/A-Z/a-z/) { + &VERB("hookMode: cased $chan.",2); + } my $mode; foreach $mode (split(//, $modes)) { @@ -43,6 +45,11 @@ sub hookMode { # modes w/ target affecting nick => cache it. if ($mode =~ /[bov]/) { + if ($mode eq "o" and $nick eq "ChanServ" and $target =~ /^\Q$ident$\E/i) { + &DEBUG("hookmode: chanserv deopped us! asking"); + &chanServCheck($chan); + } + $channels{$chan}{$mode}{$target}++ if $parity; delete $channels{$chan}{$mode}{$target} if !$parity; } @@ -254,6 +261,11 @@ sub chanLimitVerify { my($chan) = @_; my $l = $channels{$chan}{'l'}; + if (scalar keys %netsplitservers) { + &WARN("clV: netsplit active (1); skipping. (netsplit => $netsplit)"); + return; + } + # only change it if it's not set. if (defined $l and &IsChanConf("chanlimitcheck")) { my $plus = &getChanConfDefault("chanlimitcheckPlus", 5, $chan); diff --git a/src/IRC/IrcHooks.pl b/src/IRC/IrcHooks.pl index feac0db..facce29 100644 --- a/src/IRC/IrcHooks.pl +++ b/src/IRC/IrcHooks.pl @@ -548,9 +548,9 @@ sub on_kick { sub on_mode { my ($self, $event) = @_; my ($user, $host) = split(/\@/, $event->userhost); - my @args = $event->args(); - my $nick = $event->nick(); - my $chan = ($event->to)[0]; + my @args = $event->args(); + my $nick = $event->nick(); + $chan = ($event->to)[0]; $args[0] =~ s/\s$//; @@ -558,16 +558,17 @@ sub on_mode { &status(">>> mode $b_yellow\[$ob$b@args$b_yellow\]$ob by $b_cyan$nick$ob"); } else { # MODE &status(">>> mode/$b_blue$chan$ob $b_yellow\[$ob$b@args$b_yellow\]$ob by $b_cyan$nick$ob"); - &hookMode($chan, @args); + &hookMode($nick, @args); } } sub on_modeis { my ($self, $event) = @_; my $nick = $event->nick(); - my ($myself,$chan,@args) = $event->args(); + my ($myself, undef,@args) = $event->args(); + $chan = ($event->args())[1]; - &hookMode(lc $chan, @args); # CASING. + &hookMode($nick, @args); } sub on_msg { @@ -959,6 +960,7 @@ sub on_crversion { } elsif ($ver =~ /epic/i) { $ver{epic}{$nick} = $ver; } elsif ($ver =~ /mirc/i) { + &DEBUG("verstats: mirc: $nick => '$ver'."); $ver{mirc}{$nick} = $ver; } elsif ($ver =~ /ircle/i) { $ver{ircle}{$nick} = $ver; @@ -973,6 +975,7 @@ sub on_crversion { } elsif ($ver =~ /xircon/i) { $ver{xircon}{$nick} = $ver; } else { + &DEBUG("verstats: other: $nick => '$ver'."); $ver{other}{$nick} = $ver; } } diff --git a/src/IRC/Schedulers.pl b/src/IRC/Schedulers.pl index 0412f85..d82c9eb 100644 --- a/src/IRC/Schedulers.pl +++ b/src/IRC/Schedulers.pl @@ -352,6 +352,11 @@ sub chanlimitCheck { delete $sched{"chanlimitCheck"}{RUNNING}; } + if (scalar keys %netsplitservers) { + &WARN("clC: netsplit active (2); skipping. (netsplit => $netsplit)"); + return; + } + foreach $chan ( &ChanConfList("chanlimitcheck") ) { next unless (&validChan($chan)); -- 2.39.2