1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
# $Id: Channel.pm,v 1.3 2002/05/21 14:48:17 dgl Exp $
package IRC::Channel;
use strict;
use IRC::UniqueHash;
use IRC::Util;
use IRC::Channel::Nick;
sub new {
my $class = shift;
my $self = bless {}, $class;
%$self = @_;
$self->{_nicks} = { };
tie %{$self->{_nicks}}, 'IRC::UniqueHash';
return $self;
}
sub addnick {
my($self,$nick,%nick) = @_;
return 0 if exists $self->{_nicks}->{$nick};
$self->{_nicks}->{$nick} = IRC::Channel::Nick->new(
name => $nick,
op => defined $nick{op} ? $nick{op} : 0,
voice => defined $nick{voice} ? $nick{voice} : 0,
halfop => defined $nick{halfop} ? $nick{halfop} : 0
);
}
sub delnick {
my($self,$nick) = @_;
return 0 unless exists $self->{_nicks}->{$nick};
return delete($self->{_nicks}->{$nick});
}
sub chgnick {
my($self,$nick,$newnick) = @_;
return 0 unless exists $self->{_nicks}->{$nick};
$self->{_nicks}->{$newnick} = $self->{_nicks}->{$nick};
$self->{_nicks}->{$newnick}->{name} = $newnick;
return $self->{_nicks}->{$newnick} if lc $newnick eq lc $nick;
return delete($self->{_nicks}->{$nick});
}
sub nick {
my($self,$nick) = @_;
return 0 unless exists $self->{_nicks}->{$nick};
return $self->{_nicks}->{$nick};
}
sub nicks {
my($self) = @_;
return keys %{$self->{_nicks}};
}
sub is_nick {
my($self,$nick) = @_;
return 1 if $self->{_nicks}->{$nick};
0;
}
sub is_voice {
my($self, $nick) = @_;
return 1 if $self->{_nicks}->{$nick}->{voice};
0;
}
sub is_op {
my($self, $nick) = @_;
return 1 if $self->{_nicks}->{$nick}->{op};
0;
}
sub get_umode {
my($self, $nick) = @_;
if($self->{_nicks}->{$nick}->{op}) {
return '@';
}elsif($self->{_nicks}->{$nick}->{halfop}) {
return '%';
}elsif($self->{_nicks}->{$nick}->{voice}) {
return '+';
}else{
return ' ';
}
}
sub has_mode {
my($self,$mode) = @_;
return 1 if check_mode($self->{mode},$mode);
0;
}
1;
|