#!/usr/bin/perl
# Carlos Francisco Ferry, a.k.a zOrK - carlos@gnu.cl
# Crawli BOT - released under the GPL.
require 'lib/Net-IRC-0.75/IRC.pm';
use strict;
use Switch;
use warnings;
use Cwd;
my $cwd = getcwd;
my $fileconf = $cwd . "/crawli.conf";
my $botnick;
my $username;
my $server;
my $port;
my $ircname;
my $allow_cuptime;
my $cversionmsg;
sub check_conf {
if (!defined($cversionmsg) ) { die "$fileconf is not configured correctly. " };
if (!defined($port)) { $port = "6667"; print "port isn't defined, setting it to $port\n"; }
if (!defined($username)) { $username = $ENV{'USER'}; print "username isn't defined, setting it to $username\n"; }
if (!defined($botnick)) { $botnick = $ENV{'USER'}; print "botnick isn't defined, setting it to $botnick\n"; }
if (!defined($ircname)) { $ircname = `uname -a`; print "ircname isn't defined, setting it to $ircname\n"; }
if (!defined($server)) { $server = "mqnet.irc.cl"; print "server isn't defined, setting it to $server\n"; }
}
sub load_conf {
my $var_conf;
my $var_data;
my $mode;
open (FILE, $fileconf) or die "Dying, Can't open $fileconf : $!";
my @data=<FILE>;
close (FILE);
print "Reading conf..\n";
foreach my $conf_line (@data) {
next if $conf_line =~ /^\#/;
next if $conf_line !~ /^set /;
$conf_line =~ s/^set //g;
chomp($conf_line);
($var_conf,$var_data) = split(/: /,$conf_line);
switch ($var_conf) {
case 'botnick' {
$botnick = $var_data;
}
case 'server' {
$server = $var_data;
}
case 'port' {
$port = $var_data;
}
case 'ircname' {
$ircname = $var_data;
}
case 'username' {
$username = $var_data;
}
case 'ctcp_version_msg' {
$cversionmsg = $var_data;
}
case 'allow_cuptime' {
$allow_cuptime = $var_data;
}
}
}
}
sub uptime {
my $uptime = `uptime`;
return $uptime;
}
sub on_connect {
my $self = shift;
print "Connected to $server:$port\n";
$self->join("#Linuxers");
$self->privmsg('zOrK','hola');
}
sub on_cversion {
my ($self, $event) = @_;
my $rnick = $event->nick;
$self->ctcp_reply($rnick, $cversionmsg);
}
sub on_cuptime {
my $uptime = uptime();
my ($self, $event) = @_;
my $rnick = $event->nick;
$self->ctcp_reply($rnick, $uptime);
}
sub start {
print "Trying to connect to $server:$port as $botnick!$username:$ircname\n";
my $irc = new Net::IRC;
my $con = $irc->newconn(Nick => $botnick,
Server => $server,
Port => $port,
Username => $username,
Ircname => $ircname);
$con->add_global_handler('376', \&on_connect);
$con->add_handler('cversion', \&on_cversion);
if (defined($allow_cuptime) && $allow_cuptime eq '1') { $con->add_handler('cuptime', \&on_cuptime); }
$irc->start;
}
&load_conf();
&check_conf();
&start();