summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatarWilliam Heimbigner <william.heimbigner@gmail.com>2012-02-08 04:48:46 +0000
committerLibravatarWilliam Heimbigner <william.heimbigner@gmail.com>2012-02-08 04:48:46 +0000
commitbb894285dae60d829bbb470643d0c0e9a3c4b50d (patch)
treeccb6d0324d1505a1e296cb16d127e49a34fe131f
parent6ba39c3f02bdb37ab9b168e76265ad45b9c7a68c (diff)
added DCC chat capabilities, plus sigalarm to self-die. DCC chat is still very broken
-rw-r--r--config-default/users.xml3
-rwxr-xr-xmeta.pl2
-rw-r--r--modules/event.pl78
-rw-r--r--modules/log.pl9
4 files changed, 83 insertions, 9 deletions
diff --git a/config-default/users.xml b/config-default/users.xml
index b4e455b..f5b316c 100644
--- a/config-default/users.xml
+++ b/config-default/users.xml
@@ -1,5 +1,5 @@
<people>
- <person id="afterdeath" flags="hodat" />
+ <person id="afterdeath" flags="hocdat" />
<person id="cbrown1023" flags="oath" />
<person id="charitwo" flags="oath" />
<person id="dave2" flags="oath" />
@@ -15,6 +15,7 @@
<person id="mquin" flags="hota" />
<person id="nhandler" flags="oath" />
<person id="njan" flags="oath" />
+ <person id="paradox" flags="h" />
<person id="petersymonds" flags="oath" />
<person id="pricechild" flags="oath" />
<person id="richih" flags="oath" />
diff --git a/meta.pl b/meta.pl
index 312b4f4..60cb144 100755
--- a/meta.pl
+++ b/meta.pl
@@ -24,6 +24,8 @@ $::cset = '';
"dnsbl" => 0,
"pingpong" => 0
);
+%::dsock = ();
+%::spy = ();
BEGIN {
my @modules = qw/Util Xml Inspect Event Services Log Command Classes Mysql/;
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]");
diff --git a/modules/log.pl b/modules/log.pl
index 7bd69a1..581f70b 100644
--- a/modules/log.pl
+++ b/modules/log.pl
@@ -43,11 +43,20 @@ sub logg
$_ = "-$event->{nick}- $event->{args}->[0]" if $event->{type} eq 'notice';
$_ = "*** $event->{nick} sets mode: " . join(" ",@{$event->{args}}) if $event->{type} eq 'mode';
$_ = "*** $event->{nick} changes topic to \"$event->{args}->[0]\"" if $event->{type} eq 'topic';
+ my $nostamp = $_;
$_ = strftime($cfg->{timefmt}, @time) . $_ . "\n";
my $line = $_;
open(FH, $path) or die "Can't open $path: $!";
print FH $line;
close(FH);
+ if (defined($::spy{$chan})) {
+ my $spy = $::spy{$chan};
+ print $spy $chan .": " . $nostamp . "\n";
+ }
+ if (defined($::spy{lc $event->{nick}})) {
+ my $spy = $::spy{lc $event->{nick}};
+ print $spy $chan .": " . $nostamp . "\n";
+ }
# $_ >> io($path);
}
}