]> ruin.nu Git - NDIRC.git/blobdiff - Delling.pm
Initial Discord support
[NDIRC.git] / Delling.pm
index f19bf2a366271e06525641a03ffbe6115be75874..eb9c929ee9cc98095d6e5c2998ffd6238288323c 100644 (file)
@@ -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,7 +114,7 @@ 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 > 12 && not defined $user->{pid}){
@@ -220,19 +210,46 @@ 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};
+       my $author_id = $author->{id};
+       say localtime(time) . "$channel_id $author_name $author_id";
+       return if $author->{'id'} eq $self->discord_id; # Ignore my own messages
+
+       my $channel = "#testarlite";
+
+       my ($p,$command,$args) = ($msg =~ /^([.!~])(\S+)(?: (.+))?/);
+
+       say localtime(time) . " - $msg";
+
+       return 0 unless $self->disp->has_command($command,$channel);
+
+
+       my $c = NDIRC::DiscordContext->new({
+                       discord_id => $author_id,
+                       channel_id => $channel_id,
+                       channel => $channel,
+                       disp => $self->disp,
+                       model => DB(),
+                       discord => $self->discord,
+               });
+
+       return $self->disp->run_command($c,$command,$args);
+
+};
+
 1;