Another Sixty Minutes Down
And the bot is now both more and less annoying. Updated code below.
#!/usr/bin/perl
# mudbot by Shannon Prickett
# connect a pandorabots.com chatbot with a particular TinyMUCK, Pegasus.
package mudbot;
use Modern::Perl;
use Net::Telnet;
use Net::AIML;
use Expect;
use vars qw{$mud_connection $mud_conversation $mud_host $mud_name $mud_pass $mud_port $mud_sent $robot};
$mud_host = 'ginka.armageddon.org';
$mud_port = '4242';
$mud_name = 'Somebot';
$mud_pass = 'YRMEME';
$robot = Net::AIML->new( botid => 'GETTHISNUMBERFROMPANDORABOTS' );
$mud_connection = new Net::Telnet( Host => $mud_host, Port => $mud_port )
or die "Can't connect to $mud_host $mud_port: $!";
$mud_conversation = Expect->exp_init($mud_connection);
$mud_conversation->log_group(1);
$mud_conversation->log_user(1);
$mud_conversation->log_stdout(1);
$mud_conversation->log_file("/home/binder/src/mb/logfile", 'w');
$mud_conversation->expect(30, '-re', qr{connect # pretty standard MUCK greeting
\s+
guest
\s+
guest}msx,
sub {
my $fh = shift;
$fh->send("connect $mud_name $mud_pass\n");
});
$mud_conversation->expect(30, 'Vote to ban the MisInformation SuperHighway',
sub {
my $fh = shift;
$fh->send("\@desc me=Just a Perl toy of Binder's.\n");
});
$mud_conversation->expect(30, 'Description set',
sub {
my $fh = shift;
$fh->send("home\nout\nvillage\n");
});
TALKLOOP: while (1) {
print "TALKLOOP start\n";
my $being_quiet = 0;
my $atme = 0;
my $prematch = '';
my $postmatch = '';
my $index = $mud_conversation->expect( 60, '-re', qr{ says, "} );
$prematch = $mud_conversation->before();
$postmatch = $mud_conversation->after();
$mud_conversation->clear_accum();
next TALKLOOP unless $prematch;
$postmatch =~ s{\"}{};
print "$prematch said $postmatch\n";
if ($postmatch =~ qr{$mud_name}){
print "saw my name\n";
$postmatch =~ s{$mud_name}{Persephone}g;
$atme = 1;
}
if ( ($atme) && ($postmatch =~ qr{QUIT}) ) {
$mud_conversation->send("QUIT\n");
exit;
}
if ( ($atme) && ($postmatch =~ qr{be quiet}) ) {
if ($being_quiet) {
$mud_conversation->send("say Maximum verbosity achieved.\n");
$being_quiet = 0;
} else
{
$mud_conversation->send("say Shutting up now.\n");
$being_quiet = 1;
}
}
if ($being_quiet) {
next TALKLOOP;
}
if ($atme) {
my $response = $robot->tell($postmatch);
print "response: $response\n";
$mud_conversation->send("say $response\n");
}
else {
if ( !$being_quiet && (rand() > .75) ) {
print "jumping in\n";
my $response = $robot->tell($postmatch);
print "response: $response\n";
$mud_conversation->send("say $response\n");
}
}
}
continue {
$mud_conversation->clear_accum();
}
