#!/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();