/usr/share/perl5/POE/Component/IRC/Plugin/NickServID.pm is in libpoe-component-irc-perl 6.83+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | package POE::Component::IRC::Plugin::NickServID;
BEGIN {
$POE::Component::IRC::Plugin::NickServID::AUTHORITY = 'cpan:HINRIK';
}
{
$POE::Component::IRC::Plugin::NickServID::VERSION = '6.83';
}
use strict;
use warnings FATAL => 'all';
use Carp;
use IRC::Utils qw( uc_irc parse_user );
use POE::Component::IRC::Plugin qw( :ALL );
sub new {
my ($package) = shift;
croak "$package requires an even number of arguments" if @_ & 1;
my %self = @_;
die "$package requires a Password" if !defined $self{Password};
return bless \%self, $package;
}
sub PCI_register {
my ($self, $irc) = @_;
$self->{nick} = $irc->{nick};
$self->{irc} = $irc;
$irc->plugin_register($self, 'SERVER', qw(isupport nick notice));
return 1;
}
sub PCI_unregister {
return 1;
}
# we identify after S_isupport so that pocoirc has a chance to turn on
# CAPAB IDENTIFY-MSG (if the server supports it) before the AutoJoin
# plugin joins channels
sub S_isupport {
my ($self, $irc) = splice @_, 0, 2;
$irc->yield(nickserv => "IDENTIFY $self->{Password}");
return PCI_EAT_NONE;
}
sub S_nick {
my ($self, $irc) = splice @_, 0, 2;
my $mapping = $irc->isupport('CASEMAPPING');
my $new_nick = uc_irc( ${ $_[1] }, $mapping );
if ( $new_nick eq uc_irc($self->{nick}, $mapping) ) {
$irc->yield(nickserv => "IDENTIFY $self->{Password}");
}
return PCI_EAT_NONE;
}
sub S_notice {
my ($self, $irc) = splice @_, 0, 2;
my $sender = parse_user(${ $_[0] });
my $recipient = parse_user(${ $_[1] }->[0]);
my $msg = ${ $_[2] };
return PCI_EAT_NONE if $recipient ne $irc->nick_name();
return PCI_EAT_NONE if $sender !~ /^nickserv$/i;
return PCI_EAT_NONE if $msg !~ /now (?:identified|recognized)/;
$irc->send_event_next('irc_identified');
return PCI_EAT_NONE;
}
# ERR_NICKNAMEINUSE
sub S_433 {
my ($self, $irc) = splice @_, 0, 2;
my $offending = ${ $_[2] }->[0];
my $reason = ${ $_[2] }->[1];
if ($irc->nick_name() eq $offending && $reason eq "Nickname is registered to someone else") {
$irc->yield(nickserv => "IDENTIFY $self->{Password}");
}
return PCI_EAT_NONE;
}
1;
=encoding utf8
=head1 NAME
POE::Component::IRC::Plugin::NickServID - A PoCo-IRC plugin which identifies with NickServ when needed
=head1 SYNOPSIS
use POE::Component::IRC::Plugin::NickServID;
$irc->plugin_add( 'NickServID', POE::Component::IRC::Plugin::NickServID->new(
Password => 'opensesame'
));
=head1 DESCRIPTION
POE::Component::IRC::Plugin::NickServID is a L<POE::Component::IRC|POE::Component::IRC>
plugin. It identifies with NickServ on connect and when you change your nick,
if your nickname matches the supplied password.
B<Note>: If you have a cloak and you don't want to be seen without it, make sure
you don't join channels until after you've identified yourself. If you use the
L<AutoJoin plugin|POE::Component::IRC::Plugin::AutoJoin>, it will be taken
care of for you.
=head1 METHODS
=head2 C<new>
Arguments:
'Password', the NickServ password.
Returns a plugin object suitable for feeding to
L<POE::Component::IRC|POE::Component::IRC>'s plugin_add() method.
=head1 OUTPUT EVENTS
=head2 C<irc_identified>
This event will be sent when you have identified with NickServ. No arguments
are passed with it.
=head1 AUTHOR
Hinrik E<Ouml>rn SigurE<eth>sson, hinrik.sig@gmail.com
=cut
|