App-Alice
view release on metacpan or search on metacpan
lib/App/Alice/IRC.pm view on Meta::CPAN
utf8::decode($msg->{params}[1]);
if (my $window = $self->find_window($msg->{params}[1])) {
$self->broadcast($window->nicks_action);
}
}
sub irc_401 {
my ($self, $cl, $msg) = @_;
utf8::decode($msg->{params}[1]);
if (my $window = $self->find_window($msg->{params}[1])) {
$self->broadcast($window->format_announcement("No such nick."));
}
}
sub rename_nick {
my ($self, $nick, $new_nick) = @_;
return unless $self->includes_nick($nick);
my $info = $self->get_nick_info($nick);
$info->{nick} = $new_nick;
$self->set_nick_info($new_nick, $info);
$self->remove_nick($nick);
}
sub remove_nicks {
my ($self, @nicks) = @_;
$self->_nicks(
grep {
my $nick = $_;
first {$nick eq $_} @nicks ? 0 : 1;
} $self->nicks
);
}
sub nick_avatar {
my ($self, $nick) = @_;
my $info = $self->get_nick_info($nick);
if ($info and $info->{real}) {
if ($info->{real} =~ /([^<\s]+@[^\s>]+\.[^\s>]+)/) {
my $email = $1;
return "http://www.gravatar.com/avatar/"
. md5_hex($email) . "?s=32&r=x";
}
elsif ($info->{real} =~ /(https?:\/\/\S+(?:jpe?g|png|gif))/) {
return $1;
}
else {
return undef;
}
}
}
sub whois_table {
my ($self, $nick) = @_;
my $info = $self->get_nick_info($nick);
return "No info for user \"$nick\"" if !$info;
return "real: $info->{real}\nuser: $info->{user}\n" .
"host: $info->{IP}\nserver: $info->{server}\nchannels: " .
join " ", keys %{$info->{channels}};
}
sub update_realname {
my ($self, $realname) = @_;
my $nick = $self->nick_cached;
$self->send_srv(REALNAME => $realname);
if (my $info = $self->get_nick_info($nick)) {
$info->{real} = $realname;
}
for (grep {$_->previous_nick eq $nick} $self->windows) {
$_->reset_previous_nick;
}
}
__PACKAGE__->meta->make_immutable;
1;
( run in 0.484 second using v1.01-cache-2.11-cpan-140bd7fdf52 )