Chatbot-Alpha
view release on metacpan or search on metacpan
lib/Chatbot/Alpha.pm view on Meta::CPAN
if ($to eq 'random') {
$self->{users}->{$id}->{topic} = '';
}
else {
$self->{users}->{$id}->{topic} = $to;
}
$reply =~ s/\{topic=(.*?)\}//g;
}
# Sub-replies?
while ($reply =~ /\{\@(.*?)\}/i) {
my $o = $1;
my $trig = $o;
$trig =~ s/^\s+//g;
$trig =~ s/\s$//g;
my $resp = $self->reply ($id,$trig);
$reply =~ s/\{\@$o\}/$resp/i;
}
# Randomness?
while ($reply =~ /\{random\}(.*?)\{\/random\}/i) {
my $text = $1;
my @options = ();
# Pipes?
if ($text =~ /\|/) {
@options = split(/\|/, $text);
}
else {
@options = split(/\s+/, $text);
}
my $rep = $options [ int(rand(scalar(@options))) ];
$reply =~ s/\{random\}(.*?)\{\/random\}/$rep/i;
}
# Update history.
shift (@{$self->{users}->{$id}->{history}->{input}});
shift (@{$self->{users}->{$id}->{history}->{reply}});
unshift (@{$self->{users}->{$id}->{history}->{input}}, $msg);
unshift (@{$self->{users}->{$id}->{history}->{reply}}, $reply);
unshift (@{$self->{users}->{$id}->{history}->{input}}, '');
unshift (@{$self->{users}->{$id}->{history}->{reply}}, '');
pop (@{$self->{users}->{$id}->{history}->{input}});
pop (@{$self->{users}->{$id}->{history}->{reply}});
# Format the bot's reply.
my $simple = lc($reply);
$simple =~ s/[^A-Za-z0-9 ]//g;
$simple =~ s/^\s+//g;
$simple =~ s/\s$//g;
# Save this message.
$self->debug ("Saving this as last msg...");
$self->{users}->{$id}->{that} = $simple;
$self->{users}->{$id}->{last} = $msg;
$self->{users}->{$id}->{hold} ||= 0;
# Reset the loop timer.
$self->{loops} = 0;
# There SHOULD be a reply now.
# So, return it.
return $reply;
}
sub stringUtil {
my ($type,$string) = @_;
if ($type eq 'uppercase') {
return uc($string);
}
elsif ($type eq 'lowercase') {
return lc($string);
}
elsif ($type eq 'sentence') {
$string = lc($string);
return ucfirst($string);
}
elsif ($type eq 'formal') {
$string = lc($string);
my @words = split(/ /, $string);
my @out = ();
foreach my $word (@words) {
push (@out, ucfirst($word));
}
return join (" ", @out);
}
else {
return $string;
}
}
1;
__END__
=head1 NAME
Chatbot::Alpha - A simple chatterbot brain.
=head1 SYNOPSIS
use Chatbot::Alpha;
# Create a new Alpha instance.
my $alpha = new Chatbot::Alpha();
# Load replies from a directory.
$alpha->loadFolder ("./replies");
# Load an additional response file.
$alpha->loadFile ("./more_replies.txt");
# Input even more replies directly from Perl.
$alpha->stream ("+ what is alpha\n"
. "- Alpha, aka Chatbot::Alpha, is a chatterbot brain created by AiChaos Inc.\n\n"
. "+ who created alpha\n"
. "- Chatbot::Alpha was created by Cerone Kirsle.");
( run in 0.517 second using v1.01-cache-2.11-cpan-e1769b4cff6 )