X-Git-Url: https://ruin.nu/git/?p=NDIRC.git;a=blobdiff_plain;f=Delling.pm;h=96ff5ba9ebe4ae111ab4d93ae7a81a86ef357917;hp=62a9d363b3262483650e61750b554a81819220ef;hb=8d103256e7f29d892d040ec25a38b2cb56e7f942;hpb=899a2860f3816042c168b995616fc7425732e878 diff --git a/Delling.pm b/Delling.pm index 62a9d36..96ff5ba 100644 --- a/Delling.pm +++ b/Delling.pm @@ -28,6 +28,8 @@ extends 'NDIRC::Bot'; use POE::Session; use ND::DB; +use NDIRC::DiscordContext; + my ($tick,$stattick) = (0,0); my $last_announcement = 0; @@ -45,7 +47,7 @@ after irc_public => sub { my $nickname = $irc->nick_name; if ($msg =~ /^(\S+): (.+)$/ && $self->disp->has_command('anon',$channel)){ - my $_ = $1; + local $_ = $1; my $text = $2; unless ($irc->is_channel_member($channel,$1) || /(Constructing|Researching)/){ $msg = ".anon $_ $text"; @@ -101,7 +103,7 @@ WHERE u.hostmask = $1 AND channel = $2 AND flag IN ('o','v'); $irc->yield(mode => $channel, $mode, @who) if $mode; } - if (lc $channel ~~ lc $disp->targets->{members}){ + if (lc $channel ~~ lc $self->targets->{members}){ if (time - $last_announcement < 1){ $last_announcement = time; return; @@ -113,14 +115,14 @@ FROM users u WHERE hostmask = ? }, undef, $address); if ($user){ 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"); + $irc->yield(privmsg => $self->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}){ - $irc->yield(privmsg => $disp->targets->{members}, "$nick: go to https://nd.ruin.nu/ and enter your coords."); + $irc->yield(privmsg => $self->targets->{members}, "$nick: go to https://nd.ruin.nu/ and enter your coords."); } if (not defined $user->{last_forum_visit}){ - $irc->yield(privmsg => $disp->targets->{members}, "$nick: Go read the forum! https://nd.ruin.nu/forum"); + $irc->yield(privmsg => $self->targets->{members}, "$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}){ @@ -168,21 +170,21 @@ sub refresh { my @row = $dbh->selectrow_array(q{SELECT tick(), max(tick) FROM planet_stats}); if ($tick != $row[0]){ $tick = $row[0]; - $irc->yield(privmsg => $disp->targets->{def}, "New tick: $tick"); + $self->toTarget(def => "New tick: $tick"); } if (defined $row[1] && $stattick != $row[1]){ $stattick = $row[1]; - $irc->yield(privmsg => $disp->targets->{members}, "New tick: $stattick"); + $self->toTarget(members => "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 => $disp->targets->{def}, chr(3)."04 ## $req->{username} via webbie ## >> $req->{message}"); - $self->parseCommand("~report_incs $req->{message}",$irc,$req->{username},' BATCH ',$disp->targets->{def},$dbh); - }elsif(exists $disp->targets->{$req->{channel}}){ - $irc->yield(privmsg => $disp->targets->{$req->{channel}}, "<$req->{username} via webbie> $req->{message}"); + $self->toTarget(def => chr(3)."04 ## $req->{username} via webbie ## >> $req->{message}"); + #$self->parseCommand("~report_incs $req->{message}",$irc,$req->{username},' BATCH ',$disp->targets->{def},$dbh); + }else{ + $self->toTarget($req->{channel} => "<$req->{username} via webbie> $req->{message}"); } $upircreq->execute($req->{id}); } @@ -202,7 +204,7 @@ 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 => $disp->targets->{def}, 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}"); + $self->toTarget(def => 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}); } @@ -216,4 +218,42 @@ 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 = "D-".$channel_id; + if (exists $self->discord_channels->{$channel_id}) { + $channel = 'dm' if ($self->discord_channels->{$channel_id}->{type} == 1); + } + + 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;