summaryrefslogtreecommitdiffstats
path: root/meta.pl
blob: f0e3593752ea4aa1a465934d923d7ea38113dacd (plain) (blame)
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
#!/usr/bin/perl -w

use lib '/home/icxcnika/AntiSpamMeta';
#use lib '/home/wheimbigner/perl/lib/perl5/site_perl/5.8.8';
use warnings;
use strict;
use Net::IRC;
use Data::Dumper;
use IO::All;
use Getopt::Long;
use POSIX qw(strftime);

@::eline=();
$::pass = '';

my @modules = qw/Xml Util Inspect Services Log Command Event Classes Actions Mysql/;

require 'modules/' . lc $_ . '.pl' foreach @modules;

sub rePlug
{
  my ($conn) = @_;
  foreach (@modules) {
    eval $_ . '::killsub();';
    warn $@ if $@;
    eval 'undef &' . $_ . '::killsub;';
    warn $@ if $@;
    delete $INC{'modules/' . lc $_ . '.pl'};
    require 'modules/' . lc $_ . '.pl';
  }
  registerHandlers($conn); # this is necessary in case event.pl has changed
                           # because handlers are registered via pointers
}

sub init {
  my ( $conn, $host );
  my $debug = 0;
  my $irc = new Net::IRC;
  $::cset = '';
  GetOptions( 'debug|d!'   => \$debug,
              'pass|p:s'   => \$::pass,
              'config|c:s' => \$::cset
            );
  readXML();
  $::pass = $::settings->{pass} if $::pass eq '';
  $host = ${$::settings->{server}}[rand @{$::settings->{server}}];
  print "Connecting to $host\n";
  $irc->debug($debug);
  sql_connect();
  $conn = $irc->newconn( Server => $host,
                         Port => $::settings->{port} || '6667',
                         Nick => $::settings->{nick},
                         Ircname => $::settings->{realname},
                         Username => $::settings->{username},
                         Password => $::pass,
			 Pacing => 1 );
  $conn->debug($debug);
  registerHandlers($conn);
  @::eline=io('exempt.txt')->getlines;
  chomp @::eline;
  $irc->start();
}

sub registerHandlers {
  my ($conn) = @_;
  print "Installing handler routines...\n";
  $conn->add_default_handler(\&blah);
  $conn->add_handler('bannedfromchan', \&on_bannedfromchan);
  $conn->add_handler('mode', \&on_mode);
  $conn->add_handler('join', \&on_join);
  $conn->add_handler('part', \&on_part);
  $conn->add_handler('quit', \&on_quit);
  $conn->add_handler('nick', \&on_nick);
  $conn->add_handler('notice', \&on_notice);
  $conn->add_handler('caction', \&on_public);
  $conn->add_handler('msg', \&on_msg);
  $conn->add_handler('namreply', \&on_names);
  $conn->add_handler('endofnames', \&on_names);
  $conn->add_handler('public', \&on_public);
  $conn->add_handler('376', \&on_connect);
  $conn->add_handler('topic', \&irc_topic);
  $conn->add_handler('topicinfo', \&irc_topic);
  $conn->add_handler('nicknameinuse', \&on_errnickinuse);
  $conn->add_handler('kick', \&on_kick);
  $conn->add_handler('cping', \&on_ctcp);
  $conn->add_handler('cversion', \&on_ctcp);
  $conn->add_handler('csource', \&on_ctcp);
  $conn->add_handler('ctime', \&on_ctcp);
  $conn->add_handler('cdcc', \&on_ctcp);
  $conn->add_handler('cuserinfo', \&on_ctcp);
  $conn->add_handler('cclientinfo', \&on_ctcp);
  $conn->add_handler('cfinger', \&on_ctcp);
  $conn->add_handler('320', \&whois_identified);
  $conn->add_handler('318', \&whois_end);
  $conn->add_handler('311', \&whois_user);
  $conn->add_handler('352', \&on_whoreply);
}

init();