import org.jibble.pircbot.*; import java.util.*; public class MyBot extends PircBot { ArrayList players; String master, player1, player2; String p1Choice, p2Choice; boolean setup, inProgress; int num; final int ROCK = 0; final int PAPER = 1; final int SCISSORS = 2; final int NOTHING = -1; public MyBot() { this.setName("RPSBot"); this.setLogin("BOT"); } //public void onConnect() {} public void onMessage(String channel, String sender, String login, String hostname, String message) { message = message.toLowerCase().trim(); if ((message.equalsIgnoreCase("!quit")) && (hostname.equals ("private-A895A092.home.cgocable.net"))){ disconnect(); }else if (message.equals("!wumpus")){ sendMessage (channel, "I'm not the motherfucking WumpusBot!"); }else if (message.indexOf("!draw") == 0){ TextInputFile in = new TextInputFile ("map" + getDigits(message) + ".txt"); while (!in.eof()){ sendMessage (channel, in.readLine()); } in.close(); }else if ((message.equals("!rps")) && (!setup) && (!inProgress)){ master = sender; setup = true; num = 0; sendMessage (channel, Colors.RED + "ROCK PAPER SCISSORS!"); sendMessage (channel, Colors.RED + "Say AYE if you wish to play."); sendMessage (channel, Colors.RED + "The game will commence when the person who typed !rps types !start"); players = new ArrayList(); }else if ((message.equals("aye")) && (setup)){ voice (channel, sender); num++; }else if ((message.equals("!start")) && (setup) && (sender.equals (master)) && (num >= 2)){ setup = false; inProgress = true; sendMessage (channel, Colors.RED + "The player list is being compiled."); User[] temp = getUsers(channel); for (int i = 0; i < temp.length; i++){ if (temp[i].hasVoice()) players.add (temp[i]); } String list = ""; for (int i = 0; i < players.size(); i++){ if (i == 0) list = list + players.get(i).getNick(); else list = list + ", " + players.get(i).getNick(); } sendMessage (channel, Colors.RED + "Playing are: " + list + "."); Random r = new Random(); int x = r.nextInt(players.size()); player1 = players.get(x).getNick(); int y = r.nextInt(players.size()); while (true) { y = r.nextInt(players.size()); if (x != y) break; } player2 = players.get(y).getNick(); sendMessage (channel, Colors.RED + "Let's begin: " + player1 + " vs " + player2 + "!"); sendMessage (channel, Colors.RED + "PM me your choices."); p1Choice = "invalid"; p2Choice = "invalid"; } } public void onPrivateMessage(String sender, String login, String hostname, String message) { message = message.toLowerCase().trim(); if (sender.equals (player1)){ if (message.equals("rock")) p1Choice = "rock"; else if (message.equals("paper")) p1Choice = "paper"; else if (message.equals("scissors")) p1Choice = "scissors"; else { sendMessage (sender, "Submission not accepted. Your submission should be one puntuationless word."); p1Choice = "invalid"; } }else if (sender.equals (player2)){ if (message.equals("rock")) p1Choice = "rock"; else if (message.equals("paper")) p1Choice = "paper"; else if (message.equals("scissors")) p1Choice = "scissors"; else { sendMessage (sender, "Submission not accepted. Your submission should be one puntuationless word."); p1Choice = "invalid"; } } String channel = "#rps"; if ((!p1Choice.equals("invalid")) && (!p2Choice.equals("invalid"))){ String loser = null; boolean gameOver = true; if (p1Choice.equals(p2Choice)){ sendMessage (channel, Colors.RED + "Tied on " + p1Choice + "! Submit again."); p1Choice = "invalid"; p2Choice = "invalid"; gameOver = false; }else if ((p1Choice.equals("rock")) && (p2Choice.equals("paper"))){ sendMessage (channel, Colors.RED + player1 + ": rock. " + player2 + ": paper. " + player2 + " wins!"); deVoice (channel, player1); loser = player1; }else if ((p1Choice.equals("paper")) && (p2Choice.equals("scissors"))){ sendMessage (channel, Colors.RED + player1 + ": paper. " + player2 + ": scissors. " + player2 + " wins!"); deVoice (channel, player1); loser = player1; }else if ((p1Choice.equals("scissors")) && (p2Choice == ROCK)){ sendMessage (channel, Colors.RED + player1 + ": scissors. " + player2 + ": rock. " + player2 + " wins!"); deVoice (channel, player1); loser = player1; }else if ((p1Choice == ROCK) && (p2Choice == SCISSORS)){ sendMessage (channel, Colors.RED + player1 + ": rock. " + player2 + ": scissors. " + player1 + " wins!"); deVoice (channel, player2); loser = player2; }else if ((p1Choice == SCISSORS) && (p2Choice == PAPER)){ sendMessage (channel, Colors.RED + player1 + ": scissors. " + player2 + ": paper. " + player1 + " wins!"); deVoice (channel, player2); loser = player2; }else if ((p1Choice == PAPER) && (p2Choice == ROCK)){ sendMessage (channel, Colors.RED + player1 + ": paper. " + player2 + ": rock. " + player1 + " wins!"); deVoice (channel, player2); loser = player2; } if (gameOver){ for (int i = 0; i < players.size(); i++){ if (players.get(i).getNick().equals(loser)) players.remove (i); } } if (players.size() <= 1){ sendMessage (channel, Colors.RED + "Game over. " + players.get(0).getNick() + " wins the ladder competition."); deVoice (channel, players.get(0).getNick()); inProgress = false; } else { if (gameOver){ Random r = new Random(); int x = r.nextInt(players.size()); player1 = players.get(x).getNick(); int y = r.nextInt(players.size()); while (true) { y = r.nextInt(players.size()); if (x != y) break; } player2 = players.get(y).getNick(); } sendMessage (channel, Colors.RED + "Let's begin: " + player1 + " vs " + player2 + "!"); sendMessage (channel, Colors.RED + "PM me your choices."); p1Choice = "invalid"; p2Choice = "invalid"; } } } public void onDisconnect() { System.exit (0); } public void onKick(String channel, String kickerNick, String kickerLogin, String kickerHostname, String recipientNick, String reason) { if (recipientNick.equals (getNick())){ joinChannel (channel); sendMessage (channel, "Bite me, " + kickerNick + "."); } } // Parses the digits from a message. public int getDigits (String text){ char[] chars; chars = text.toCharArray(); text = ""; for (int i = 0; i < chars.length; i++){ if (Character.isDigit(chars[i])){ text += chars[i]; } } return (int)Integer.parseInt(text); } }