summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatarDoug Freed <dwfreed@mtu.edu>2016-02-09 00:07:25 -0700
committerLibravatarDoug Freed <dwfreed@mtu.edu>2016-02-09 00:07:25 -0700
commite3bc4466116494dc8c008b9dde0c729ee5b72003 (patch)
treef168f0dab212fb7d9aa4e2dd5cc13d26f82ae125
parent6a81945a4e53319c27fa3b3e72f7ddc7c36d5d95 (diff)
downloadantispammeta-e3bc4466116494dc8c008b9dde0c729ee5b72003.tar.bz2
antispammeta-e3bc4466116494dc8c008b9dde0c729ee5b72003.tar.xz
antispammeta-e3bc4466116494dc8c008b9dde0c729ee5b72003.tar.zst
Stash an account to nick mapping
-rw-r--r--lib/ASM/Event.pm13
-rw-r--r--lib/ASM/Util.pm3
-rwxr-xr-xmeta.pl1
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;
diff --git a/meta.pl b/meta.pl
index 1d79973..9a4cf2f 100755
--- a/meta.pl
+++ b/meta.pl
@@ -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;