#!/usr/local/bin/perl -w # irc.pl # A simple IRC robot. # Usage: perl irc.pl # We will use a raw socket to connect to the IRC server. use IO::Socket; use Device::SerialPort; my $port = Device::SerialPort->new("/dev/tty.usbserial-FTEG6BW6"); $port->databits(8); $port->baudrate(115200); $port->parity("none"); $port->stopbits(1); my $previous_move='a'; $x=0; @place=(1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1); $check=0; # The server to connect to and our details. my $server = "chat1.ustream.tv"; my $nick = "chess_bot"; my $login = "chess_bot"; my $mMode = '0'; # The channel which the bot will join. my $channel = "#patrickmccb"; my $goth = 0; # Connect to the IRC server. my $sock = new IO::Socket::INET(PeerAddr => $server, PeerPort => 6667, Proto => 'tcp') or die "Can't connect\n"; # Log on to the server. print $sock "NICK $nick\r\n"; print $sock "USER $login 8 * :Perl IRC Hacks Robot\r\n"; # Read lines from the server until it tells us we have connected. while (my $input = <$sock>) { # Check the numerical responses from the server. if ($input =~ /004/) { # We are now logged in. last; } elsif ($input =~ /433/) { die "Nickname is already in use."; } } # Join the channel. print $sock "JOIN $channel\r\n"; my ($usernick, $useraddress, $msgcmd, $msgtgt, $usermsg); # Keep reading lines from the server. while (my $input = <$sock>) { chomp $input; chop $input; if ($input =~ /^PING(.*)$/i) { # We must respond to PINGs to avoid being disconnected. print $sock "PONG $1\r\n"; } else { # Print the raw line received by the bot. print "$input\n"; # Get the user msg part. example:b7-b8 move my $usermsg1 = substr($input, -11); #print the user message #get the end of message. Should = move. For some reason it is 6 long? my $end_of_msg = substr($input, -4); # print"$end_of_msg \n"; my $smove='move'; #check to see if this message contains "move" if ($smove eq $end_of_msg) { ($usernick, $useraddress, $msgcmd, $msgtgt, $usermsg) = $input =~ /\:(\S+)\!(\S+)\s+(PRIVMSG)\s+(\S+)\s+\:(.*)/; if($usernick eq $user1 || $usernick eq $user2 || $usernick eq 'patrickmccb'|| $usernick eq $user3|| $usernick eq $user4 || $usernick eq $user5 || $mMode =~ m/1/ ){ #set usermsg = to the first part of the message. Example: b7-b4 $usermsg1= substr($usermsg1, 1,5); $usermsgpart1= substr($usermsg1,0,2); $usermsgpart2= substr($usermsg1,3,2); print "part1: $usermsgpart1 , part2: $usermsgpart2 \n"; if($usermsgpart2 =~ m/a/){ $check+=0; } if($usermsgpart2 =~ m/b/){ $check+=1; } if($usermsgpart2 =~ m/c/){ $check+=2; } if($usermsgpart2 =~ m/d/){ $check+=3; } if($usermsgpart2 =~ m/e/){ $check+=4; } if($usermsgpart2 =~ m/f/){ $check+=5; } if($usermsgpart2 =~ m/g/){ $check+=6; } if($usermsgpart2 =~ m/h/){ $check+=7; } if($usermsgpart2 =~ m/8/){ $check+=0; } if($usermsgpart2 =~ m/7/){ $check+=8; } if($usermsgpart2 =~ m/6/){ $check+=16; } if($usermsgpart2 =~ m/5/){ $check+=24; } if($usermsgpart2 =~ m/4/){ $check+=32; } if($usermsgpart2 =~ m/3/){ $check+=40; } if($usermsgpart2 =~ m/2/){ $check+=48; } if($usermsgpart2 =~ m/1/){ $check+=56; } if($place[$check] == 0 || $usermsgpart2 =~ m/k/){ if($usermsgpart2 !~ m/k/){ $place[$check]=1; } $check=0; if($usermsgpart1 =~ m/a/){ $check+=0; } if($usermsgpart1 =~ m/b/){ $check+=1; } if($usermsgpart1 =~ m/c/){ $check+=2; } if($usermsgpart1 =~ m/d/){ $check+=3; } if($usermsgpart1 =~ m/e/){ $check+=4; } if($usermsgpart =~ m/f/){ $check+=5; } if($usermsgpart1 =~ m/g/){ $check+=6; } if($usermsgpart1 =~ m/h/){ $check+=7; } if($usermsgpart1 =~ m/8/){ $check+=0; } if($usermsgpart1 =~ m/7/){ $check+=8; } if($usermsgpart1 =~ m/6/){ $check+=16; } if($usermsgpart1 =~ m/5/){ $check+=24; } if($usermsgpart1 =~ m/4/){ $check+=32; } if($usermsgpart1 =~ m/3/){ $check+=40; } if($usermsgpart1 =~ m/2/){ $check+=48; } if($usermsgpart1 =~ m/1/){ $check+=56; } $place[$check]=0; $check=0; print "@place"; print $sock "PRIVMSG #patrickmccb performing $usermsg1 \n"; $usersend = $usermsg1.'x'; print"$usermsg1\n"; #send message over serial port my $count_out = $port->write($usersend); warn "write failed\n" unless ($count_out); warn "write incomplete\n" if ( $count_out != length($usersend) ); } else{ print $sock "PRIVMSG #patrickmccb I can not do $usermsg1. You are trying to put a piece on top of another and that will mess me up. Try again. \n"; print "cant do move \n"; } } } if($end_of_msg eq 'addd'){ ($usernick, $useraddress, $msgcmd, $msgtgt, $usermsg) = $input =~ /\:(\S+)\!(\S+)\s+(PRIVMSG)\s+(\S+)\s+\:(.*)/; print "usernick: $usernick , usermsg: $usermsg \n"; if ($usernick eq 'patrickmccb'){ if($usermsg =~ m/add1/){ $user1= length($usermsg); $user1-=10; $user1= substr($usermsg, 0, $user1); print "$user1 \n"; print $sock "PRIVMSG #patrickmccb $user1 was added to the list of players \n"; } if($usermsg =~ m/add2/){ $user2= length($usermsg); $user2-=10; $user2= substr($usermsg, 0, $user2); print "$user2 \n"; print $sock "PRIVMSG #patrickmccb $user2 was added to the list of players \n"; } if($usermsg =~ m/add3/){ $user3= length($usermsg); $user3-=10; $user3= substr($usermsg, 0, $user3); print "$user3 \n"; print $sock "PRIVMSG #patrickmccb $user3 was added to the list of players \n"; } if($usermsg =~ m/add4/){ $user4= length($usermsg); $user4-=10; $user4= substr($usermsg, 0, $user4); print "$user4 \n"; print $sock "PRIVMSG #patrickmccb $user4 was added to the list of players \n"; } if($usermsg =~ m/add5/){ $user5= length($usermsg); $user5-=10; $user5= substr($usermsg, 0, $user5); print "$user5 \n"; print $sock "PRIVMSG #patrickmccb $user5 was added to the list of players \n"; } } } if($end_of_msg eq 'game'){ ($usernick, $useraddress, $msgcmd, $msgtgt, $usermsg) = $input =~ /\:(\S+)\!(\S+)\s+(PRIVMSG)\s+(\S+)\s+\:(.*)/; print "usernick: $usernick , usermsg: $usermsg \n"; if ($usernick eq 'patrickmccb'){ if($usermsg =~ m/open/){ $mMode='1'; print $sock "PRIVMSG #patrickmccb The game is now open for any one to play. \n"; } if($usermsg =~ m/close/){ $mMode='0'; print $sock "PRIVMSG #patrickmccb The game is now moderated. Only people added by patrickmccb may play. \n"; } } } } }