summaryrefslogtreecommitdiffstats
path: root/modules/event.pl
diff options
context:
space:
mode:
Diffstat (limited to 'modules/event.pl')
-rw-r--r--modules/event.pl78
1 files changed, 70 insertions, 8 deletions
diff --git a/modules/event.pl b/modules/event.pl
index 1e1f7a6..51f191d 100644
--- a/modules/event.pl
+++ b/modules/event.pl
@@ -21,6 +21,12 @@ sub maxlen {
return $lb;
}
+sub alarmdeath
+{
+ die "SIG ALARM!!!\n";
+}
+$SIG{ALRM} = \&alarmdeath;
+
sub new
{
my $module = shift;
@@ -58,14 +64,44 @@ sub new
$conn->add_handler('354', \&on_whoxreply);
$conn->add_handler('account', \&on_account);
$conn->add_handler('ping', \&on_ping);
+ $conn->add_handler('banlist', \&on_banlist);
+ $conn->add_handler('dcc_open', \&dcc_open);
+ $conn->add_handler('chat', \&on_dchat);
bless($self);
return $self;
}
+sub on_dchat
+{
+ my ($conn, $event) = @_;
+ print Dumper($event);
+ if ((lc $event->{nick} eq 'afterdeath') && ($event->{args}->[0] ne '')) {
+ my $msg = $event->{args}->[0];
+ if ($msg =~ /^SPY (.*)/) {
+ my $chan = $1;
+ $::spy{lc $chan} = $event->{to}[0];
+ } elsif ($msg =~ /^STOPSPY (.*)/) {
+ delete $::spy{lc $1};
+ } elsif ($msg =~ /^RETRIEVE (\S+)/) {
+ my $chan = lc $1;
+ my $out = $event->{to}[0];
+ my @time = ($::settings->{log}->{zone} eq 'local') ? localtime : gmtime;
+ print $out "Retriving " . "$::settings->{log}->{dir}${chan}/${chan}" . strftime($::settings->{log}->{filefmt}, @time) . "\n";
+ open(FHX, "$::settings->{log}->{dir}${chan}/${chan}" . strftime($::settings->{log}->{filefmt}, @time));
+ while (<FHX>) {
+ print $out $_;
+ }
+ close FHX;
+ }
+ #lols we gots a chat message! :D
+ }
+}
+
sub on_ping
{
my ($conn, $event) = @_;
$conn->sl("PONG " . $event->{args}->[0]);
+ alarm 200;
return unless $::debugx{pingpong};
print strftime("%F %T ", gmtime) . "Ping? Pong!\n";
print Dumper($event);
@@ -88,6 +124,7 @@ sub on_join {
my $nick = lc $event->{nick};
my $chan = lc $event->{to}->[0];
my $rate;
+ alarm 200;
if ( lc $conn->{_nick} eq lc $nick) {
$::sc{$chan} = {};
mkdir($::settings->{log}->{dir} . $chan);
@@ -107,13 +144,13 @@ sub on_join {
} else {
$::sn{$nick} = {};
$::sn{$nick}->{mship} = [ $chan ];
- $::sn{$nick}->{dnsbl} = 0;
- $::sn{$nick}->{netsplit} = 0;
- $::sn{$nick}->{gecos} = $event->{args}->[1];
- $::sn{$nick}->{user} = $event->{user};
- $::sn{$nick}->{host} = $event->{host};
- $::sn{$nick}->{account} = lc $event->{args}->[0];
- }
+ }
+ $::sn{$nick}->{dnsbl} = 0;
+ $::sn{$nick}->{netsplit} = 0;
+ $::sn{$nick}->{gecos} = $event->{args}->[1];
+ $::sn{$nick}->{user} = $event->{user};
+ $::sn{$nick}->{host} = $event->{host};
+ $::sn{$nick}->{account} = lc $event->{args}->[0];
$::inspector->inspect( $conn, $event ) unless $::netsplit;
$::db->logg($event);
$::log->logg( $event );
@@ -157,6 +194,7 @@ sub on_msg
sub on_public
{
my ($conn, $event) = @_;
+ alarm 200;
$::inspector->inspect( $conn, $event );
$::log->logg( $event );
$::db->logg( $event );
@@ -355,7 +393,26 @@ sub on_mode
sub on_ctcp
{
my ($conn, $event) = @_;
- $::inspector->inspect($conn, $event);
+ my $acct = lc $::sn{lc $event->{nick}}->{account};
+ if (($event->{type} eq 'cdcc') &&
+ (defined($::users->{person}->{$acct})) &&
+ (defined($::users->{person}->{$acct}->{flags})) &&
+ (grep {$_ eq 'c'} split('', $::users->{person}->{$acct}->{flags}))) {
+ print Dumper($event);
+ my @spit = split(/ /, $event->{args}->[0]);
+ if (($spit[0] eq 'CHAT') && ($spit[1] eq 'CHAT')) {
+ $::chat = Net::IRC::DCC::CHAT->new($conn, 0, lc $event->{nick}, $spit[2], $spit[3]);
+ }
+ } else {
+ $::inspector->inspect($conn, $event);
+ }
+}
+
+sub dcc_open
+{
+ my ($conn, $event) = @_;
+# print Dumper($event);
+ $::dsock{lc $event->{nick}} = $event->{args}->[1];
}
sub on_ctcp_source
@@ -392,6 +449,11 @@ sub on_whoxreply
$::sc{$chan}{users}{$nick}{voice} = $voice;
}
+sub on_banlist
+{
+ my ($conn, $event) = @_;
+}
+
sub on_bannedfromchan {
my ($conn, $event) = @_;
$conn->privmsg('ChanServ', "unban $event->{args}->[1]");