X-Git-Url: https://ruin.nu/git/?p=NDIRC.git;a=blobdiff_plain;f=Delling.pm;h=224a6572650bfccd2109e34016d87a8d96ece066;hp=33141596b3f6d82c29ceebe6ec6e4d1be398dbcd;hb=84affcdf70684e8f29e83dc2c3ab75520da383d7;hpb=05629ec258dcfc359decc3cbc44c3345dd0eb62e diff --git a/Delling.pm b/Delling.pm index 3314159..224a657 100644 --- a/Delling.pm +++ b/Delling.pm @@ -26,11 +26,18 @@ use Moose; extends 'NDIRC::Bot'; use POE::Session; -use NDIRC::Misc; use ND::DB; +use AI::MegaHAL; + +has hal => ( + is => 'ro', + isa => 'Object', + lazy_build => 1, +); + sub irc_public { - my ($sender, $heap, $who, $where, $msg) = @_[SENDER, HEAP, ARG0 .. ARG2]; + my ($self,$sender, $who, $where, $msg) = @_[OBJECT,SENDER, ARG0 .. ARG2]; my ($nick,$username,$address) = ( split /[!@]/, $who ); my $channel = $where->[0]; @@ -41,7 +48,11 @@ sub irc_public { 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 $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; my $text = $2; unless ($irc->is_channel_member($channel,$1) || /(Constructing|Researching)/){ @@ -49,14 +60,13 @@ sub irc_public { } } - if (parseCommand($msg,$irc,$nick,$address,$channel,$heap->{disp},$dbh)){ + if ($self->parseCommand($msg,$irc,$nick,$address,$channel,$dbh)){ #Command parsed and run successfully } } - sub irc_msg { - my ($sender, $heap, $who, $where, $msg) = @_[SENDER, HEAP, ARG0 .. ARG2]; + my ($self,$sender, $who, $where, $msg) = @_[OBJECT,SENDER, ARG0 .. ARG2]; my ($nick,$username,$address) = ( split /[!@]/, $who ); my $irc = $sender->get_heap(); @@ -64,7 +74,7 @@ sub irc_msg { 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)){ + if ($self->parseCommand($msg,$irc,$nick,$address,'pm',$dbh)){ #Command parsed and run successfully }else{ $irc->yield(notice => $nick, "unknown command"); @@ -72,7 +82,7 @@ sub irc_msg { } sub irc_join { - my ($sender, $heap, $who, $channel) = @_[SENDER, HEAP, ARG0 .. ARG1]; + my ($self,$sender, $who, $channel) = @_[OBJECT,SENDER, ARG0 .. ARG1]; my ($nick,$username,$address) = ( split /[!@]/, $who ); my $irc = $sender->get_heap(); @@ -80,7 +90,7 @@ sub irc_join { my $seen = $dbh->prepare_cached(q{UPDATE users SET laston = NOW() WHERE hostmask = ?}); $seen->execute($address); - if($heap->{disp}->has_command('voice',$channel)){ + if($self->disp->has_command('voice',$channel)){ my $flags = $dbh->prepare_cached(q{ SELECT DISTINCT flag FROM users u @@ -126,4 +136,15 @@ sub refresh { return; } +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; +}; + 1;