X-Git-Url: http://git.vpit.fr/?p=perl%2Fscripts%2Fxchat.git;a=blobdiff_plain;f=opers.pl;h=f8d178d59e3d870318c0943976bf487fdc01036b;hp=87a01c42d1b7c5e8bfa5e3d4b0b7ae011f9bda9c;hb=HEAD;hpb=1653942ef55abd3f4aefff434f4452b641b3ce76 diff --git a/opers.pl b/opers.pl index 87a01c4..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,8 +46,6 @@ hook_server '352', sub { print_op $nick, $host; } - set_context $oldctxt; - return EAT_NONE; }; @@ -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'; }