X-Git-Url: http://git.vpit.fr/?p=perl%2Fscripts%2Fxchat.git;a=blobdiff_plain;f=opers.pl;h=f8d178d59e3d870318c0943976bf487fdc01036b;hp=875abc9e63910213abd32ffce06082b96d62a67b;hb=HEAD;hpb=1a7e1b0385a3fc38a3ae0926d05dd1a14dac17fe diff --git a/opers.pl b/opers.pl index 875abc9..f8d178d 100755 --- a/opers.pl +++ b/opers.pl @@ -7,6 +7,7 @@ use Xchat qw<:all>; use lib get_info 'xchatdir'; use Xchat::XPI; +use Xchat::XPI::Utils qw; our $VERSION = '0.03'; @@ -19,15 +20,15 @@ hook_server '352', sub { my $serv = get_info 'server'; my $nick = $_[0][7]; - return EAT_NONE if $opers{$serv}{$nick}; - $opers{$serv}{$nick} = 1; + return EAT_NONE if $opers{$serv}{irc_lc($nick)}; + $opers{$serv}{irc_lc($nick)} = $nick; - my $host = $_[0][4] . '@' . $_[0][5]; + my $host = $_[0][4] . '@' . strip_code $_[0][5]; my %chans; push @{$chans{$_->{type}}}, $_ for grep $_->{server} eq $serv, get_list 'channels'; - my $oldctxt = get_context; + my $guard = save_context; my $onachan; for (@{$chans{2}}) { @@ -45,15 +46,13 @@ hook_server '352', sub { print_op $nick, $host; } - set_context $oldctxt; - return EAT_NONE; }; hook_print 'Disconnected', sub { - my %servers = map { $_->{server} => 1 } - grep { $_->{flags} & 9 and not($_->{flags} & 2) } - get_list 'channels'; + my %servers; + $servers{$_->{server}} = 1 for grep +($_->{flags} & 0b1011) == 0b1001, + get_list 'channels'; delete @opers{grep !$servers{$_}, keys %opers}; @@ -64,7 +63,7 @@ hook_server 'QUIT', sub { my ($nick) = $_[0][0] =~ /^:([^!]+)!/; my $serv = get_info 'server'; - delete $opers{$serv}{$nick}; + delete $opers{$serv}{irc_lc($nick)}; return EAT_NONE; }; @@ -72,9 +71,11 @@ hook_server 'QUIT', sub { sub nick_cb { my ($old, $new) = @{$_[0]}; + $old = irc_lc $old; + my $ops = $opers{get_info 'server'}; if ($ops and $ops->{$old}) { - $ops->{$new} = 1; + $ops->{irc_lc($new)} = $new; delete $ops->{$old}; } @@ -102,11 +103,11 @@ hook_command 'OPSCAN', sub { my ($name, @ops); if ($isnet) { $name = 'network'; - @ops = keys %{$opers{$serv}}; + @ops = values %{$opers{$serv}}; } else { $name = 'channel'; @ops = map $_->{nick}, - grep $opers{$serv}{$_->{nick}}, + grep $opers{$serv}{irc_lc($_->{nick})}, get_list 'users'; }