X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=Delling.pm;h=178e58b5f1459c1d912085b81659a7c93907ee12;hb=bd6624a4e56ad6968b57b76786ebd8787433ead4;hp=dc4a0b09b02dbc8049708ab02bded2272029be70;hpb=827dca1b13ddf19dce2dee7406888c676ca1fd8a;p=NDIRC.git diff --git a/Delling.pm b/Delling.pm index dc4a0b0..178e58b 100644 --- a/Delling.pm +++ b/Delling.pm @@ -28,13 +28,7 @@ extends 'NDIRC::Bot'; use POE::Session; use ND::DB; -use AI::MegaHAL; - -has hal => ( - is => 'ro', - isa => 'Object', - lazy_build => 1, -); +use NDIRC::DiscordContext; my ($tick,$stattick) = (0,0); my $last_announcement = 0; @@ -52,18 +46,14 @@ after irc_public => sub { $seen->execute($address); my $nickname = $irc->nick_name; - if ($msg =~ /^$nickname: (.*)/i){ - my $text = $self->hal->do_reply($1); - $irc->yield(privmsg => $channel, "$nick: $text"); - }elsif ($msg =~ /^(\S+): (.+)$/ && $self->disp->has_command('anon',$channel)){ - my $_ = $1; + if ($msg =~ /^(\S+): (.+)$/ && $self->disp->has_command('anon',$channel)){ + local $_ = $1; my $text = $2; unless ($irc->is_channel_member($channel,$1) || /(Constructing|Researching)/){ $msg = ".anon $_ $text"; + $self->parseCommand($msg,$irc,$nick,$address,$channel,$dbh); } - - } - if ($self->parseCommand($msg,$irc,$nick,$address,$channel,$dbh)){ + }elsif ($self->parseCommand($msg,$irc,$nick,$address,$channel,$dbh)){ #Command parsed and run successfully } }; @@ -124,10 +114,10 @@ SELECT uid,pid,hostmask,password FROM users u WHERE hostmask = ? }, undef, $address); if ($user){ - if ($user->{password} eq ''){ + unless ($user->{password}) { $irc->yield(privmsg => $disp->targets->{members}, "$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}){ + if ($tick > 12 && not defined $user->{pid}){ $irc->yield(privmsg => $disp->targets->{members}, "$nick: go to https://nd.ruin.nu/ and enter your coords."); } @@ -207,7 +197,7 @@ FROM users u 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 + JOIN ship_stats ss USING (ship) WHERE NOT dm.announced GROUP BY username,call,tick,dm.fleet,p.value }); @@ -220,19 +210,50 @@ GROUP BY username,call,tick,dm.fleet,p.value } -sub _build_hal { - my $hal = AI::MegaHAL->new('Path' => '.', 'Banner' => 0, 'Prompt' => 0, 'Wrap' => 0, 'AutoSave' => 1); - return $hal; -} - after sig_usr2 => sub { my $self = shift; - say 'Saving brain!'; - $self->hal->_cleanup; }; after _start => sub { ($tick,$stattick) = DB()->selectrow_array(q{SELECT tick(),max(tick) FROM planet_stats}); }; +after discord_message_create => sub { + my $self = shift; + my $hash = shift; + + my $author = $hash->{author}; + my $msg = $hash->{content}; + my $channel_id = $hash->{channel_id}; + my $author_name = $author->{username}.'#'.$author->{discriminator}; + my $author_id = $author->{id}; + return if $author->{'id'} eq $self->discord_id; # Ignore my own messages + + my $channel = "pm"; + if (exists $self->discord_channels->{$channel_id}) { + $channel = "#".$self->discord_channels->{$channel_id}; + } + + say localtime(time) . " - $channel_id $channel $author_name $author_id"; + + my ($p,$command,$args) = ($msg =~ /^([.!~])(\S+)(?: (.+))?/); + + + return 0 unless $self->disp->has_command($command,$channel); + + say localtime(time) . " - $msg"; + + my $c = NDIRC::DiscordContext->new({ + discord_id => $author_name, + channel_id => $channel_id, + channel => $channel, + disp => $self->disp, + model => DB(), + discord => $self->discord, + }); + + return $self->disp->run_command($c,$command,$args); + +}; + 1;