From 97961925ba4f37fb6f63e3d914241d6d4d8d84a2 Mon Sep 17 00:00:00 2001 From: Michael Andreen Date: Mon, 17 Aug 2009 18:27:13 +0200 Subject: [PATCH] Added the Delling specific code --- Delling.pm | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/Delling.pm b/Delling.pm index 26e9784..362e7aa 100644 --- a/Delling.pm +++ b/Delling.pm @@ -26,9 +26,6 @@ use POE::Session; use NDIRC::Misc; use ND::DB; -my $DBH = DB(); -my $TICK = $DBH->selectrow_array('SELECT tick()'); - sub irc_public { my ($sender, $heap, $who, $where, $msg) = @_[SENDER, HEAP, ARG0 .. ARG2]; my ($nick,$username,$address) = ( split /[!@]/, $who ); @@ -37,6 +34,9 @@ sub irc_public { my $irc = $sender->get_heap(); #$irc->yield(privmsg => $channel, "Authed? " . $irc->is_nick_authed($nick)); + my $dbh = DB(); + my $seen = $dbh->prepare_cached(q{UPDATE users SET laston = NOW() WHERE hostmask = ?}); + $seen->execute($address); if ($msg =~ /^(\S+): (.+)$/ && $heap->{disp}->has_command('anon',$channel)){ my $_ = $1; @@ -46,7 +46,7 @@ sub irc_public { } } - if (parseCommand($msg,$irc,$nick,$address,$channel,$heap->{disp},DB())){ + if (parseCommand($msg,$irc,$nick,$address,$channel,$heap->{disp},$dbh)){ #Command parsed and run successfully } } @@ -57,8 +57,14 @@ sub irc_msg { my ($nick,$username,$address) = ( split /[!@]/, $who ); my $irc = $sender->get_heap(); - if (parseCommand($msg,$irc,$nick,$address,'pm',$heap->{disp},DB())){ + my $dbh = DB(); + my $seen = $dbh->prepare_cached(q{UPDATE users SET laston = NOW() WHERE hostmask = ?}); + $seen->execute($address); + + if (parseCommand($msg,$irc,$nick,$address,'pm',$heap->{disp},$dbh)){ #Command parsed and run successfully + }else{ + $irc->yield(notice => $nick, "unknown command"); } } @@ -67,8 +73,11 @@ sub irc_join { my ($nick,$username,$address) = ( split /[!@]/, $who ); my $irc = $sender->get_heap(); + my $dbh = DB(); + my $seen = $dbh->prepare_cached(q{UPDATE users SET laston = NOW() WHERE hostmask = ?}); + $seen->execute($address); + if($heap->{disp}->has_command('voice',$channel)){ - my $dbh = DB(); my $flags = $dbh->prepare_cached(q{ SELECT DISTINCT flag FROM users u @@ -90,8 +99,27 @@ WHERE u.hostmask = $1 AND channel = $2 AND flag IN ('o','v'); sub refresh { my ($kernel,$heap) = @_[KERNEL,HEAP]; - print 'Time: ' . time() . ' Lag: ' . $heap->{connector}->lag() . "\n"; $kernel->delay( refresh => 60 ); + print 'Time: ' . time() . ' Lag: ' . $heap->{connector}->lag() . "\n"; + + my $dbh = DB(); + my $scans = $dbh->prepare(q{SELECT s.scan_id + ,array_agg(sr.nick) AS nick + ,array_agg(sr.id) AS id + FROM scan_requests sr + JOIN scans s USING (pid,type) + WHERE sr.time > NOW() - '30 min'::INTERVAL + AND s.tick >= sr.tick AND NOT sr.sent + GROUP BY scan_id + }); + my $sentscan = $dbh->prepare(q{UPDATE scan_requests + SET sent = TRUE WHERE id = ANY($1) + }); + $scans->execute; + while (my $scan = $scans->fetchrow_hashref){ + $heap->{irc}->yield(notice => $scan->{nick}, "http://game.planetarion.com/showscan.pl?scan_id=$scan->{scan_id}"); + $sentscan->execute($scan->{id}); + } return; } -- 2.39.2