X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=Eos.pm;fp=Eos.pm;h=6a6c96ebd0622bebfd9218a150eb056e1d138c42;hb=4c40fd39668614135ae9370092b5d17355bad15c;hp=0000000000000000000000000000000000000000;hpb=97961925ba4f37fb6f63e3d914241d6d4d8d84a2;p=NDIRC.git diff --git a/Eos.pm b/Eos.pm new file mode 100644 index 0000000..6a6c96e --- /dev/null +++ b/Eos.pm @@ -0,0 +1,160 @@ +#************************************************************************** +# Copyright (C) 2006 by Michael Andreen * +# * +# This program is free software; you can redistribute it and/or modify * +# it under the terms of the GNU General Public License as published by * +# the Free Software Foundation; either version 2 of the License, or * +# (at your option) any later version. * +# * +# This program is distributed in the hope that it will be useful, * +# but WITHOUT ANY WARRANTY; without even the implied warranty of * +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +# GNU General Public License for more details. * +# * +# You should have received a copy of the GNU General Public License * +# along with this program; if not, write to the * +# Free Software Foundation, Inc., * +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * +#**************************************************************************/ +package NDIRC::Eos; + +use strict; +use warnings; +use feature ':5.10'; + +use POE::Session; +use NDIRC::Misc; +use ND::DB; + +my ($tick,$stattick) = DB()->selectrow_array(q{SELECT tick(),max(tick) FROM planet_stats}); +my $last_announcement = 0; + +sub irc_public { + my ($sender, $heap, $who, $where, $msg) = @_[SENDER, HEAP, ARG0 .. ARG2]; + my ($nick,$username,$address) = ( split /[!@]/, $who ); + my $channel = $where->[0]; + + my $irc = $sender->get_heap(); + + if ($msg =~ /^(\S+): (.+)$/ && $heap->{disp}->has_command('anon',$channel)){ + my $_ = $1; + my $text = $2; + unless ($irc->is_channel_member($channel,$1) || /(Constructing|Researching)/){ + $msg = ".anon $_ $text"; + } + + } + if (parseCommand($msg,$irc,$nick,$address,$channel,$heap->{disp},DB())){ + #Command parsed and run successfully + } +} + + +sub irc_msg { + my ($sender, $heap, $who, $where, $msg) = @_[SENDER, HEAP, ARG0 .. ARG2]; + my ($nick,$username,$address) = ( split /[!@]/, $who ); + my $irc = $sender->get_heap(); + + if (parseCommand($msg,$irc,$nick,$address,'pm',$heap->{disp},DB())){ + #Command parsed and run successfully + }else{ + $irc->yield(privmsg => $ND::defchan, chr(3)."04 $nick >> $msg"); + parseCommand(".report_incs $msg",$irc,$nick,' BATCH ','pm',$heap->{disp},DB()); + } +} + +sub irc_join { + my ($sender, $heap, $who, $channel) = @_[SENDER, HEAP, ARG0 .. ARG1]; + my ($nick,$username,$address) = ( split /[!@]/, $who ); + my $irc = $sender->get_heap(); + + my $dbh = DB(); + + if ($channel =~ /^$ND::memchan$/i){ + if (time - $last_announcement < 1){ + $last_announcement = time; + return; + } + my $user = $dbh->selectrow_hashref(q{ +SELECT uid,pid,hostmask,password + ,(SELECT max(time) FROM forum_thread_visits WHERE uid = u.uid) AS last_forum_visit +FROM users u WHERE hostmask = ? + }, undef, $address); + if ($user){ + if ($user->{password} eq ''){ + $irc->yield(privmsg => $ND::memchan, "$nick: Get a new random password with /msg delling !getpass . If you don't know your username, then you can get it with .points"); + } + if ($tick > 36 && not defined $user->{pid}){ + $irc->yield(privmsg => $ND::memchan, "$nick: go to https://nd.ruin.nu/ and enter your coords."); + } + + if (not defined $user->{last_forum_visit}){ + $irc->yield(privmsg => $ND::memchan, "$nick: Go read the forum! https://nd.ruin.nu/forum"); + }else { + my $unread = $dbh->selectrow_hashref(q{SELECT * FROM unread_posts($1)},undef,$user->{uid}); + if ($unread && $unread->{new}){ + $irc->yield(notice => $nick, "$unread->{new} posts since your last forum visit ($unread->{unread} unread posts in total) https://nd.ruin.nu/forum/allUnread"); + } + } + } + if (time - $last_announcement < 2){ + $last_announcement = time; + return; + } + $last_announcement = time; + } +} + +sub refresh { + my ($kernel,$heap) = @_[KERNEL,HEAP]; + $kernel->delay( refresh => 60 ); + print 'Time: ' . time() . ' Lag: ' . $heap->{connector}->lag() . "\n"; + + my $irc = $heap->{irc}; + my $dbh = DB(); + + my @row = $dbh->selectrow_array(q{SELECT tick(), max(tick) FROM planet_stats}); + if ($tick != $row[0]){ + $tick = $row[0]; + $irc->yield(privmsg => $ND::defchan, "New tick: $tick"); + } + if (defined $row[1] && $stattick != $row[1]){ + $stattick = $row[1]; + $irc->yield(privmsg => $ND::memchan, "New tick: $stattick"); + } + my $ircreqs = $dbh->prepare(q{SELECT id,username,message,channel FROM irc_requests NATURAL JOIN users WHERE not sent}); + my $upircreq = $dbh->prepare(q{UPDATE irc_requests SET sent = TRUE WHERE id = ?}); + $ircreqs->execute; + while (my $req = $ircreqs->fetchrow_hashref){ + if ($req->{channel} eq 'def'){ + $irc->yield(privmsg => $ND::defchan, chr(3)."04 ## $req->{username} via webbie ## >> $req->{message}"); + parseCommand(".report_incs $req->{message}",$irc,$req->{username},' BATCH ','pm',$heap->{disp},$dbh); + }elsif($req->{channel} eq 'scan'){ + $irc->yield(privmsg => $ND::scanchan, "<$req->{username} via webbie> $req->{message}"); + }elsif($req->{channel} eq 'members'){ + $irc->yield(privmsg => $ND::memchan, "<$req->{username} via webbie> $req->{message}"); + } + $upircreq->execute($req->{id}); + } + my $defmissions = $dbh->prepare(q{ +SELECT username,call,tick,dm.fleet,p.value + ,100 * SUM(fs.amount * (metal + crystal + eonium) / 100) / p.value AS value +FROM users u + JOIN current_planet_stats p USING (pid) + JOIN launch_confirmations USING (uid) + JOIN fleets f USING (fid) + JOIN fleet_ships fs USING (fid) + JOIN defense_missions dm ON f.fid = dm.fleet + JOIN ship_stats ss ON fs.ship = ss.name +WHERE NOT dm.announced +GROUP BY username,call,tick,dm.fleet,p.value + }); + my $updefmis = $dbh->prepare(q{UPDATE defense_missions SET announced = TRUE WHERE fleet = ?}); + $defmissions->execute(); + while (my $mission = $defmissions->fetchrow_hashref){ + $irc->yield(privmsg => $ND::defchan, chr(3)."06 $mission->{username} sent def to call $mission->{call}, $mission->{value}% of value (tick $mission->{tick}) https://nd.ruin.nu/calls/edit/$mission->{call}"); + $updefmis->execute($mission->{fleet}); + } +} + +1;