]> git.vpit.fr Git - perl/scripts/xchat.git/blobdiff - opers.pl
Make sure local_context() runs the code only when the context was found
[perl/scripts/xchat.git] / opers.pl
index 66c9c0b17974b39253a3c03c8b2e7c0e93eb39b5..f8d178d59e3d870318c0943976bf487fdc01036b 100755 (executable)
--- a/opers.pl
+++ b/opers.pl
@@ -7,7 +7,7 @@ use Xchat qw<:all>;
 
 use lib get_info 'xchatdir';
 use Xchat::XPI;
-use Xchat::XPI::Utils qw<save_context>;
+use Xchat::XPI::Utils qw<irc_lc save_context>;
 
 our $VERSION = '0.03';
 
@@ -20,10 +20,10 @@ 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';
@@ -63,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;
 };
@@ -71,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};
  }
 
@@ -101,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';
  }