#!/usr/bin/perl BEGIN { local $_ = $0; s#\\#/#g; # those ass backwards \'s annoy me m#.*/#; push @INC, $& . "lib"; } $|++; use strict; use warnings; use Carp qw(croak); use Socket; use IRC::Sock; use IRC::Parser; use IRC::Debug; use IRC::Sock::Select; $\ = "\n"; our $DIE = 0; my $i = 0; my @IRC; push @IRC, IRC::Sock->spawn(Host => 'irc.whereiswaldo.org:6667'), IRC::Sock->spawn(Host => 'evul.wa.us.severed.org:7002'), IRC::Sock->spawn(Host => 'irc.icq.com:6667'); # IRC::Sock->spawn(Host => 'hotspeed.dal.net:6667'); my $Stack = IRC::Sock::Select->new(@IRC); my $Current = "bleh"; my $Debugger = IRC::Debug->toggle(\${IRC[2]}, \$Current, 1); my $Parser = IRC::Parser->new; for my $fd (@IRC) { print $fd "NICK ubu\nUSER bob \"\" \"\" :unf\n" } my %auth; my $DIE = 0; main:for(;!$DIE;) { my @ready; while(@ready = $Stack->select(0.1)) { # print "\n-- " . @{$ready[0]} . " sock(s) ready\n"; for my $IRC (@{$ready[0]}) { next if exists $auth{$IRC}; print $IRC "NICK ubu\nUSER bob \"\" \"\" :unf\n"; $auth{$IRC} = 1; } for my $IRC (@{$ready[0]}) { my @all = my($origin, $command, $target, $args, $text) = $Parser->break($IRC->read); next if $origin == 1; $Current = $_; my($nick, $host) = split /!/, $origin if defined $origin; print "---\n"; my @tmp = qw(origin command target args text); for(@all) { my $t = shift(@tmp); print $t . "\t=\t" . $_ if defined } if($command eq 'PING') { print $IRC "PONG :$text"; print "PING? PONG!" } print $IRC "JOIN #Debug,#drugs" if $command eq '005'; if (defined $nick) { if ($command eq 'PRIVMSG' && $text =~ /^oi$/) { print $IRC "PRIVMSG $target :oi"; warn "Test, testing.. 1, 2, 3..."; } scalar grep {$nick eq $_} qw(aneuryzm hatred phy) or next; if ($text =~ /^\.die\s*(.*)/) { $DIE = 1; print $IRC "QUIT :" . $1; last main; } elsif ($text =~ /^\.raw\s*(.*)/i) { print $IRC $1 } elsif ($text =~ /^\.eval\s*(.*)/i) { print $IRC "PRIVMSG $target :Perl/IRC::IO Evaluated to $nick: " . (eval $1 || $@ || qq(No Result)) } elsif ($text =~ /^\.msg\s*(.*?)\s(.*)/i) { print $IRC "PRIVMSG $1 :$2" } elsif ($text =~ /^\.notc\s*(.*?)\s(.*)/i) { print $IRC "NOTICE $1 :$2" } } } } } __END__ IRC_READ: while(<$IRC>) { print; # my($origin, $command, $target, $args, $text) = $IRC->break($_); my $broken = $IRC->break($_); print $broken->[0] . "\n"; if($IRC->{command} eq 'PING') { print "PING? PONG!\n"; send(IRC, "PONG :" . $IRC->{text} . "\n", 0); } if($IRC->{command} eq '376') { send(IRC, "JOIN #severed\n", 0); } print "ORIGIN='" . $IRC->{origin} . "'\n", "COMMAND='". $IRC->{command} . "'\n", "TARGET='" . $IRC->{target} . "'\n", "ARGUMENTS='" . $IRC->{other} . "'\n", "TEXT='" . $IRC->{text} . "'\n\n"; }