diff options
author | Doug Freed <dwfreed@mtu.edu> | 2016-02-09 00:07:25 -0700 |
---|---|---|
committer | Doug Freed <dwfreed@mtu.edu> | 2016-02-09 00:07:25 -0700 |
commit | e3bc4466116494dc8c008b9dde0c729ee5b72003 (patch) | |
tree | f168f0dab212fb7d9aa4e2dd5cc13d26f82ae125 | |
parent | 6a81945a4e53319c27fa3b3e72f7ddc7c36d5d95 (diff) | |
download | antispammeta-e3bc4466116494dc8c008b9dde0c729ee5b72003.tar.bz2 antispammeta-e3bc4466116494dc8c008b9dde0c729ee5b72003.tar.xz antispammeta-e3bc4466116494dc8c008b9dde0c729ee5b72003.tar.zst |
Stash an account to nick mapping
-rw-r--r-- | lib/ASM/Event.pm | 13 | ||||
-rw-r--r-- | lib/ASM/Util.pm | 3 | ||||
-rwxr-xr-x | meta.pl | 1 |
3 files changed, 15 insertions, 2 deletions
diff --git a/lib/ASM/Event.pm b/lib/ASM/Event.pm index 361965e..fe9db78 100644 --- a/lib/ASM/Event.pm +++ b/lib/ASM/Event.pm @@ -152,7 +152,10 @@ sub on_ping sub on_account { my ($conn, $event) = @_; + @{$::sa{$::sn{lc $event->{nick}}{account}}} = grep { $_ ne lc $event->{nick} } @{$::sa{$::sn{lc $event->{nick}}{account}}}; + delete $::sa{$::sn{lc $event->{nick}}{account}} unless scalar @{$::sa{$::sn{lc $event->{nick}}{account}}}; $::sn{lc $event->{nick}}{account} = lc $event->{args}->[0]; + push @{$::sa{$::sn{lc $event->{nick}}{account}}}, lc $event->{nick}; } sub on_connect { @@ -207,6 +210,7 @@ sub on_join { $::sn{$nick}->{user} = $event->{user}; $::sn{$nick}->{host} = $event->{host}; $::sn{$nick}->{account} = lc $event->{args}->[0]; + push @{$::sa{$::sn{$nick}->{account}}}, $nick; $::db->logg($event) if defined $::db; } @@ -227,6 +231,8 @@ sub on_part if ( @mship ) { $::sn{$nick}->{mship} = \@mship; } else { + @{$::sa{$::sn{$nick}{account}}} = grep { $_ ne $nick } @{$::sa{$::sn{$nick}{account}}}; + delete $::sa{$::sn{$nick}{account}} unless scalar @{$::sa{$::sn{$nick}{account}}}; delete($::sn{$nick}); } } @@ -315,6 +321,8 @@ sub on_quit $conn->schedule(2*60, sub { $::netsplit_ignore_lag = 0; }); } } + @{$::sa{$::sn{$nick}{account}}} = grep { $_ ne $nick } @{$::sa{$::sn{$nick}{account}}}; + delete $::sa{$::sn{$nick}{account}} unless scalar @{$::sa{$::sn{$nick}{account}}}; delete($::sn{$nick}); } @@ -401,6 +409,8 @@ sub on_nick { $::sn{$newnick} = $::sn{$oldnick} if ($oldnick ne $newnick); $::db->logg( $event ) if defined $::db; + @{$::sa{$::sn{$oldnick}{account}}} = grep { $_ ne $oldnick } @{$::sa{$::sn{$oldnick}{account}}}; + push @{$::sa{$::sn{$newnick}{account}}}, $newnick; delete( $::sn{$oldnick}) if ($oldnick ne $newnick); $event->{to} = \@channels; } @@ -427,6 +437,8 @@ sub on_kick { if ( @mship ) { $::sn{$nick}->{mship} = \@mship; } else { + @{$::sa{$::sn{$nick}{account}}} = grep { $_ ne $nick } @{$::sa{$::sn{$nick}{account}}}; + delete $::sa{$::sn{$nick}{account}} unless scalar @{$::sa{$::sn{$nick}{account}}}; delete($::sn{$nick}); } } @@ -763,6 +775,7 @@ sub on_whoxreply $::sn{$nick}->{user} = $user; $::sn{$nick}->{host} = $host; $::sn{$nick}->{account} = lc $account; + push @{$::sa{$account}}, $nick; if ( $realip ne '255.255.255.255' && index($realip, ':') == -1 ) # some day I dream of ASM handling IPv6 { $::sn{$nick}->{ip} = ASM::Util->dottedQuadToInt($realip); diff --git a/lib/ASM/Util.pm b/lib/ASM/Util.pm index 55c49ab..e96aebd 100644 --- a/lib/ASM/Util.pm +++ b/lib/ASM/Util.pm @@ -336,8 +336,7 @@ sub notRestricted { sub accountToNicks { my ($module, $account) = @_; $account =~ s/^\$a://; - my @ret = grep( { (lc ($account) eq lc ($::sn{$_}->{account} // '')) } keys %::sn ); - return \@ret; + return $::sa{$account}; } return 1; @@ -79,6 +79,7 @@ $::pendingsync = 0; %::watchRegged = (); $::lastline = ""; %::sn = (); %::sc = (); tie %::sc, 'Tie::CPHash'; tie %::sn, 'Tie::CPHash'; +%::sa = (); tie %::sa, 'Tie::CPHash'; $SIG{__WARN__} = sub { $Data::Dumper::Useqq=1; |