commit - b19b7985c6eda97bf830d63afc2d72817f14e097
commit + ed5e8478f61205d34eceb440d3fb549d8f2a8850
blob - a12a117b7d3b92a0db75f1693b1afbfbc0e8309a
blob + b6b4e6edebb6899c688e17fae7dbcb838eb78e0a
--- lib/IRCNOW/IO/IRC.pm
+++ lib/IRCNOW/IO/IRC.pm
package IRCNOW::IO::IRC;
use strict;
use warnings;
-
+use lib qw(./lib);
use IRCNOW::IO qw(:DEBUG);
use Exporter 'import';
our $localnet;
our @stafflist;
+sub new {
+ my $class = shift;
+ my $options = {@_};
+ my $self = {
+ bots => [],
+ call => {},
+ stafflist => [],
+ networks => [],
+ };
+ # verify we have all required params
+ my @required = qw(networks localnet nick host port pass);
+ for my $param (@required) {
+ die "Required param '$param' missing in IRCNOW::IO::IRC::new()"
+ unless exists $options->{$param};
+ $self->{$param} = $options->{$param};
+ }
+ my @optional = qw{stafflist};
+ for my $param (@optional) {
+ $self->{$param} = $options->{$param};
+ }
+
+ bless $self, $class;
+
+ # Create the sockets
+ $self->{sockets} = createSockets();
+
+ return $self;
+}
+
+
+sub createSockets {
+ my $self=shift;
+ # create sockets
+ my $sel = IO::Select->new( );
+ foreach my $network (@{$self->{networks}}) {
+ my $socket = IO::Socket::INET->new(
+ PeerAddr => $self->{host},
+ PeerPort => $self->{port},
+ Proto => 'tcp',
+ Timeout => '300'
+ ) || debug(ERRORS, qq"Failed to establish connection $self->{host}:$self->{port}\n");
+ $sel->add($socket);
+ my $bot = {("sock" => $socket), ("name" => $network)};
+ push(@{$self->{bots}}, $bot);
+ $self->putserv($bot, qq"NICK $self->{nick}");
+ $self->putserv($bot, qq"USER $self->{nick} * * :$self->{nick}");
+ }
+ return $sel;
+}
+
+
sub putserv {
+ my $self = shift;
+ # Verify we were called in object mode or return $self to the param list
+ if (not UNIVERSAL::isa($self, 'IRCNOW::IO::IRC')) {
+ unshift @_, $self;
+ }
my( $bot, $text )=@_;
my $socket = $bot->{sock};
if ($text =~ /^([^:]+):([[:ascii:]]*)$/m) {
}
sub putservlocalnet {
+ my $self = shift;
+ # Verify we were called in object mode or return $self to the param list
+ if (not UNIVERSAL::isa($self, 'IRCNOW::IO::IRC')) {
+ unshift @_, $self;
+ $self = {
+ localnet => $localnet,
+ };
+ }
+
my( $bot, $text )=@_;
my $botlocalnet;
foreach my $b (@bots) {
- if($b->{name} =~ /^$localnet$/i) {
+ if($b->{name} =~ /^$self->{localnet}$/i) {
$botlocalnet = $b;
last;
}
}
sub whois {
+ my $self = shift;
+ # Verify we were called in object mode or return $self to the param list
+ if (not UNIVERSAL::isa($self, 'IRCNOW::IO::IRC')) {
+ unshift @_, $self;
+ }
+
my( $socket, $target )=@_;
print $socket "WHOIS $target $target\r\n";
}
sub ctcp {
+ my $self = shift;
+ # Verify we were called in object mode or return $self to the param list
+ if (not UNIVERSAL::isa($self, 'IRCNOW::IO::IRC')) {
+ unshift @_, $self;
+ }
+
my( $socket, $target )=@_;
# print $socket "PRIVMSG $target :".chr(01)."CLIENTINFO".chr(01)."\r\n";
# print $socket "PRIVMSG $target :".chr(01)."FINGER".chr(01)."\r\n";
}
sub cbind {
+ my $self = shift;
+ # Verify we were called in object mode or return $self to the param list
+ if (not UNIVERSAL::isa($self, 'IRCNOW::IO::IRC')) {
+ unshift @_, $self;
+ }
+
my ($type, $flags, $cmd, $proc) = @_;
if ($type eq "pub") {
push(@{$call->{pub}}, {cmd => $cmd, proc => $proc});
}
sub isstaff {
+ my $self = shift;
+ # Verify we were called in object mode or return $self to the param list
+ if (not UNIVERSAL::isa($self, 'IRCNOW::IO::IRC')) {
+ unshift @_, $self;
+ $self = {
+ localnet => $localnet,
+ stafflist => \@stafflist,
+ };
+ }
+
my( $bot, $nick ) = @_;
+ my $localnet = $self->{localnet};
if( !( $bot->{name} =~ /^$localnet$/i ) ) {
debug(ALL,qq{isstaff--> $bot->{name} not $localnet});
return 0;
}
- foreach( @stafflist ) {
+ foreach( @{$self->{stafflist}} ) {
if( $nick eq $_ ) {
debug(ALL,qq{isstaff--> $nick not in \@stafflist});
return 1;