All pastes #2047678 Raw Edit

Stuff

public text v1 · immutable
#2047678 ·published 2011-04-18 09:05 UTC
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();