Started State::IRC, and moved chanusers to it.
This commit is contained in:
1 parent
ab2d404f20
commit
f2deae219d
6 files changed
+81
-64
No files matched your search
@@ -0,0 +1,49 @@
|
||||
# lib/State/IRC.pm - IRC state data.
|
||||
# Copyright (C) 2010-2011 Xelhua Development Group, et al.
|
||||
# This program is free software; rights to this code are stated in doc/LICENSE.
|
||||
package State::IRC;
|
||||
use strict;
|
||||
use warnings;
|
||||
use API::Std qw(hook_add);
|
||||
our (%chanusers);
|
||||
|
||||
# Create on_namesreply hook.
|
||||
hook_add('on_namesreply', 'state.irc.names', sub {
|
||||
my ($svr, $chan, @data) = @_;
|
||||
|
||||
# Delete the old chanusers hash if it exists.
|
||||
if (defined $chanusers{$svr}{$chan}) { delete $chanusers{$svr}{$chan} }
|
||||
# Iterate through each user.
|
||||
for (1..$#data) {
|
||||
my $fi = 0;
|
||||
PFITER: foreach my $spfx (keys %{ $Proto::IRC::csprefix{$svr} }) {
|
||||
# Check if the user has status in the channel.
|
||||
if (substr($data[$_], 0, 1) eq $Proto::IRC::csprefix{$svr}{$spfx}) {
|
||||
# He/she does. Lets set that.
|
||||
if (defined $chanusers{$svr}{$chan}{lc $data[$_]}) {
|
||||
# If the user has multiple statuses.
|
||||
$chanusers{$svr}{$chan}{lc substr $data[$_], 1} = $chanusers{$svr}{$chan}{lc $data[$_]}.$spfx;
|
||||
delete $chanusers{$svr}{$chan}{lc $data[$_]};
|
||||
}
|
||||
else {
|
||||
# Or not.
|
||||
$chanusers{$svr}{$chan}{lc substr $data[$_], 1} = $spfx;
|
||||
}
|
||||
$fi = 1;
|
||||
$data[$_] = substr $data[$_], 1;
|
||||
}
|
||||
}
|
||||
# Check if there's still a prefix.
|
||||
foreach my $spfx (keys %{$Proto::IRC::csprefix{$svr}}) {
|
||||
if (substr($data[$_], 0, 1) eq $Proto::IRC::csprefix{$svr}{$spfx}) { goto 'PFITER' }
|
||||
}
|
||||
# They had status, so go to the next user.
|
||||
next if $fi;
|
||||
# They didn't, set them as a normal user.
|
||||
if (!defined $chanusers{$svr}{$chan}{lc $data[$_]}) {
|
||||
$chanusers{$svr}{$chan}{lc $data[$_]} = 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
});
|
||||
Reference in new issue
Block a user