rendered paste body#!/usr/bin/perl
package MyBot;
use DBI;
use Bot::BasicBot;
use Data::Dumper;
use strict;
use warnings;
use base qw( Bot::BasicBot );
my (@users, @captains, @aliens, @humans);
my $turn = 'h';
my $maxplayers = 4;
# with all known options
my $bot = MyBot->new(
server => "irc.freenode.net",
port => "6667",
channels => ["#trempug"],
nick => "lakpugbottest",
alt_nicks => ["lakpugbottest2", "lakpugbottest3"],
username => "bot",
name => "Yet Another Bot",
ignore_list => [qw(dipsy dadadodo laotse)],
charset => "utf-8", # charset the bot assumes the channel is using
);
# the 'said' callback gets called when someone says something in
# earshot of the bot.
sub said
{
my ($self, $message) = @_;
if ( scalar(@users) != $maxplayers )
{
#`print Dumper $message;
if( $message->{body} =~ '^!add' )
{
foreach(@users)
{
if ( $message->{who} eq $$_{"name"} )
{ return "$message->{who} already added!" }
}
push( @users, { 'name' => $message->{who} } );
if ( scalar(@users) == $maxplayers && scalar(@captains) == 2 )
{
return "Added $message->{who}\n $humans[0]'s turn to pick.";
} elsif ( scalar(@users) == $maxplayers && scalar(@captains) < 2 ) {
my $need=2 - scalar(@captains);
return "Added $message->{who}. Now we need $need captains";
} elsif ( scalar(@users) < $maxplayers && scalar(@captains) < 2 ) {
my $need=2 - scalar(@captains);
return "Added $message->{who}. Need $need captains."
} else {
return "Added $message->{who}."
}
}
}
if ( scalar(@captains) < 2 )
{
if( $message->{body} =~ '^!captain' )
{
foreach(@captains)
{
if ( $message->{who} eq $$_{"name"} )
{ return "$message->{who} is already a captain!" }
}
push( @captains, { 'name' => $message->{who} } );
if ( scalar(@captains) == 2 )
{
$aliens[0]=$captains[0]{"name"};
$humans[0]=$captains[1]{"name"};
}
if ( scalar(@captains) == 2 && scalar(@users) == $maxplayers )
{
return "$message->{who} is a captain\n $humans[0]'s turn to pick ";
} else {
return "$message->{who} is a captain";
}
}
}
if( $message->{body} =~ '^!clear' )
{
@users=();
return "Users cleared";
}
if( $message->{body} =~ '^!list' )
{
my @list;
foreach( @users )
{
push( @list, $$_{"name"} );
}
return "Players: " . join( ", ", @list );
}
if( $message->{body} =~ '^!teams' )
{
my (@list,@list1);
foreach( @aliens )
{
push( @list, $_ );
}
foreach( @humans )
{
push( @list1, $_ );
}
return "Aliens: " . join( ", ", @list ) . " Humans: " . join(", ",@list1);
}
if( $message->{body} =~ '^!lcapts' )
{
my @list;
foreach( @captains )
{
push( @list, $$_{"name"} );
}
return "Captains: " . join( ", ", @list );
}
if ( scalar(@users)==$maxplayers && scalar(@captains)==2 )
{
if ( $message->{who} eq $humans[0] && $turn eq "h" )
{
if ( $message->{body} =~ '^!pick' )
{
my $pick;
$pick=$message->{body};
$pick =~ /!pick (.*)/i;
$pick=$1;
foreach ( @aliens )
{
if ( $_ eq $pick )
{
return "Already Picked. Make another selection"
}
}
foreach ( @humans )
{
if ( $_ eq $pick )
{
return "Already Picked. Make another selection"
}
}
push( @humans, $pick );
$turn='a';
return "Picked $pick for humans"
}
}
if ( $message->{who} eq $aliens[0] && $turn eq "a" )
{
my $pick;
$pick=$message->{body};
$pick =~ /!pick (.*)/i;
$pick = $1;
foreach ( @aliens )
{
if ( $_ eq $pick )
{
return "Already Picked. Make another selection"
}
}
foreach ( @humans )
{
if ( $_ eq $pick )
{
return "Already Picked. Make another selection"
}
}
push( @aliens, $pick );
$turn='h';
return "Picked $pick for aliens"
}
}
}
$bot->run();