import random from commands.common import CommandHelpers as CH from commands.common import GameHelpers bold = "\x02" italic = "\x1D" underline = "\x1F" reverse = "\x16" # swap background and foreground colors ("reverse video") reset = "\x0F" blue = "\x0302" green = "\x0303" red = "\x0304" grey = "\x0314" def do_command(self, connection, event): cmdtype, trigger, command, replyto = CH.disect_command(self, event) if not command: return # Do nothing if there is no command. if not self.db.one("SELECT games FROM channels WHERE name='" + event.target + "' AND network='" + self.network + "'") and not event.target == connection.get_nickname(): return # Do noting if the games channel function is off and it's a channel message. if command == "cmd" or command == "cmds" or command == "commands": if cmdtype == "cmd": connection.privmsg(replyto, grey + "Games: " + CH.ccc(self, "8ball") + CH.ccc(self, "dice") + CH.ccc(self, "player") + CH.ccc(self, "levelup") + CH.ccc(self, "givecoin")[:-2] + ".") elif command.split()[0] == "8ball": if cmdtype == "help": #Display help text. connection.privmsg(replyto, "Ask a question of the mighty and illusive 8-Ball.") connection.privmsg(replyto, grey + "Usage: " + blue + self.cmdchar + "8ball " + reset + italic + "question") elif cmdtype == "cmd": if len(command.split()) < 2: # Command contains only !8ball. messages = [ "Don't forget to ask a question...", "Hey, that's not a question!", "What would you like to know?", "You want me to predict nothing?", "Are you intentionally not asking a question?", "Ask a question you tease!", "You do not seem to grasp this, for help type: " + blue + self.helpchar + "8ball", "You will die alone.", ] connection.privmsg(replyto, random.choice(messages)) else: messages = [ "Yes.", "No.", "Affirmative.", "No way!", "Negative.", "Positive.", "Correct.", "Incorrect.", "Likely", "Unlikely", "Maybe.", "Definately!", "Perhaps?", "Most indubitably.", "Does the pope shit in the woods?", "When hell freezes over.", "Only between 9 and 5.", "Only just before you die.", red + bold + "ERROR: " + bold + "probability failure.", "Ask again later.", "I don't know.", "Unpredictable.", ] connection.privmsg(replyto, random.choice(messages)) elif command.split()[0] == "dice": if cmdtype == "help": #Display help text. if len(command.split()) is not 1: return connection.privmsg(replyto, "Rolls multiple dices of chosen type. Specifying type or amount is optional.") connection.privmsg(replyto, grey + "Usage: " + blue + self.cmdchar + "dice " + reset + italic + "amount type") connection.privmsg(replyto, grey + "Example: " + blue + self.cmdchar + "dice " + reset + italic + "2 d10") connection.privmsg(replyto, grey + "Note: " + reset + "The dice type is specified as a " + italic + "d " + reset + "followed by the amount of sides.") elif cmdtype == "cmd": arguments = len(command.split()) - 1 if arguments == 0: connection.privmsg(replyto, str(random.randint(1, 6)) + " & " + str(random.randint(1, 6)) + ".") elif arguments == 1: try: diceamount = int(command.split()[1]) except ValueError: # Argument is not an integer. if command.split()[1].startswith("d"): # Specific dice type. try: dicetype = int(command.split()[1][1:]) except ValueError: # "d" not followd by interger. connection.privmsg(replyto, "Invalid number or type of dice. For help type: " + blue + self.helpchar + "dice" + reset + ".") return if dicetype < 1: connection.action(replyto, "can not create objects with less then one side.") else: connection.privmsg(replyto, str(GameHelpers.roll_dice(1, dicetype)[0])) else: # Argument does not start with "d" and is not an integer. connection.privmsg(replyto, "Invalid number or type of dice. For help type: " + blue + self.helpchar + "dice" + reset + ".") return if diceamount < 1: connection.privmsg(replyto, "Rolling " + bold + "no " + reset + "dice.") elif diceamount > 10: connection.action(replyto, "can not fit that many dice into it's robot hands.") else: connection.privmsg(replyto, ", ".join(str(rolls) for rolls in GameHelpers.roll_dice(diceamount, 6)) + ".") # Roll x amount of dice. elif arguments == 2: try: diceamount = int(command.split()[1]) except ValueError: # First argument not an integer. connection.privmsg(replyto, "Invalid number of dice. For help type: " + blue + self.helpchar + "dice" + reset + ".") return try: dicetype = int(command.split()[2][1:]) except ValueError: # Second argument not a dice type. connection.privmsg(replyto, "Invalid type of dice. For help type: " + blue + self.helpchar + "dice" + reset + ".") return if diceamount < 1: connection.privmsg(replyto, "Rolling " + bold + "no " + reset + "dice.") elif diceamount > 10: connection.action(replyto, "can not fit that many dice into it's robot hands.") elif dicetype < 1: connection.action(replyto, "can not create objects with less then one side.") elif dicetype > 9999999999 and diceamount > 1: connection.action(replyto, "Those dices are so large i can only roll one at a time.") else: connection.privmsg(replyto, ", ".join(str(rolls) for rolls in GameHelpers.roll_dice(diceamount, dicetype)) + ".") # Roll x amount of x type dice. else: # Invalid amount of arguments. connection.privmsg(replyto, "Too many arguments. For help type: " + blue + self.helpchar + "dice" + reset + ".") elif command.split()[0] == "player": if cmdtype == "help": #Display help text. connection.privmsg(replyto, "Displays a users game info. User optional.") elif cmdtype == "cmd": if len(command.split()) == 1: user = event.source.nick.lower() message = grey + "Your info. " + reset elif len(command.split()) == 2: user = command.split()[1] if not self.db.one("SELECT id FROM users WHERE LOWER(name)=%s AND network='" + self.network + "'", (user, )): connection.action(replyto, "does not know of a " + red + trigger.split()[1] + reset + ".") return if user == connection.get_nickname().lower(): connection.privmsg(replyto, "The game does not play the master.") return if user == event.source.nick.lower(): message = grey + "Your info. " + reset else: message = grey + "Info for " + red + trigger.split()[1] + reset + ". " else: connection.privmsg(replyto, "Too many arguments, For help type " + blue + self.helpchar + "players " + reset + ".") return level, xp, xpspent, karma, coin = GameHelpers.get_info(self, user) connection.privmsg(replyto, message + "Level: " + str(level) + ", XP: " + str(xp) + ", coin: " + str(coin) + ", karma: " + str(karma)) elif command.split()[0] == "levelup": if cmdtype == "help": #Display help text. connection.privmsg(replyto, "Spend 10 XP per level gained. Gain multiple levels by specifying the amount.") elif cmdtype == "cmd": user = event.source.nick.lower() level, xp, xpspent, karma, coin = GameHelpers.get_info(self, user) if len(command.split()) == 1: if xp < 10: connection.privmsg(replyto, "Insuficcient XP, you need at least 10.") else: self.db.run("UPDATE users SET level=level+1, xp_spent=xp_spent+10 WHERE LOWER(name)='" + user + "' AND network='" + self.network + "'") self.sd.run("UPDATE users SET coin=coin+0.3 WHERE level>0") elif len(command.split()) == 2: try: levels = int(command.split()[1]) except: connection.privmsg(replyto, "Invalid amount.") return if levels < 1: connection.privmsg(replyto, "Invalid amount.") elif xp < levels * 10: connection.privmsg(replyto, "Insuficcient XP, you need at least " + str(levels * 10) + ".") else: print("UPDATE users SET level=level+" + str(levels) + ", xp_spent=xp_spent+" + str(levels * 10) + " WHERE LOWER(name)='" + user + "' AND network='" + self.network + "'") self.db.run("UPDATE users SET level=level+" + str(levels) + ", xp_spent=xp_spent+" + str(levels * 10) + " WHERE LOWER(name)='" + user + "' AND network='" + self.network + "'") self.sd.run("UPDATE users SET coin=coin+" + str(0.3 * levels) + " WHERE level>0") else: connection.privmsg(replyto, "Too many arguments. For help type " + blue + self.helpchar + "levelup " + reset + ".") elif command.split()[0] == "givecoin": if cmdtype == "help": #Display help text. connection.privmsg(replyto, "Give coins to another player. Amount optional.") connection.privmsg(replyto, grey + "Usage: " + blue + self.cmdchar + "givecoin " + reset + italic + "user amount") elif cmdtype == "cmd": if len(command.split()) == 1: connection.privmsg(replyto, "Insufficient arguments. For help type " + blue + self.helpchar + "givecoin" + reset + ".") return elif len(command.split()) > 3: connection.privmsg(replyto, "Too many arguments. For help type " + blue + self.helpchar + "givecoin" + reset + ".") return level, xp, xpspent, karma, coin = GameHelpers.get_info(self, event.source.nick) if coin < 1: connection.privmsg(replyto, "You have no coin to give.") return elif not self.db.one("SELECT id FROM users WHERE LOWER(name)=%s AND network='" + self.network + "'", (command.split()[1], )): connection.action(replyto, "does not know of any \"" + red + trigger.split()[1] + reset + "\".") return elif not self.db.one("SELECT id FROM users WHERE LOWER(name)=%s AND network='" + self.network + "' AND LEVEL>0", (command.split()[1], )): connection.privmsg(replyto, red + trigger.split()[1] + reset + " is not playing the game.") return if len(command.split) == 2: self.db.run("UPDATE users SET coin=coin-1 WHERE name=%s AND network='" + self.network + "'", (event.source.nick, )) self.db.run("UPDATE users SET coin=coin+1 WHERE LOWER(name)=%s AND network='" + self.network + "'", (command.split()[1], )) elif len(command.split) == 3: self.db.run("UPDATE users SET coin=coin-%s WHERE name=%s AND network='" + self.network + "'", (command.split()[2], event.source.nick, )) self.db.run("UPDATE users SET coin=coin+%s WHERE LOWER(name)=%s AND network='" + self.network + "'", (command.split()[2], command.split()[1], )) # elif command.split()[0] == "classup": # if cmdtype == "help": #Display help text. # connection.privmsg(replyto, "Spend 10 XP to gain a class in your current level. List available classes with " + blue + self.helpchar + "classup available " + reset + ".") # connection.privmsg(replyto, grey + "Usage: " + blue + self.cmdchar + "classup " + reset + italic + "class") # elif cmdtype == "cmd": # # if len(command.split()) == 1: # connection.privmsg(replyto, "Insufficient arguments. For help type " + blue + self.helpchar + "classup" + reset + ".") # if len(command.split()) == 2: # if command.split()[1] == "available": # level, xp, xpspent, karma = GameHelpers.get_info(self, event.source.nick) # if level == 0: # connection.privmsg(replyto, "There are no level 0 classes.") # if level == 1: # connection.privmsg(replyto, "Level 1 classes: Maggot, nubcake, ") # if level == 2: # connection.privmsg(replyto, "Level 2 classes: Retard, ") # if level == 3: # connection.privmsg(replyto, "Level 3 classes: ") # if level == 4: # connection.privmsg(replyto, "Level 3 classes: ") # if level == 5: # connection.privmsg(replyto, "Level 4 classes: ") # else: # else: # connection.privmsg(replyto, "Too many arguments. For help type " + blue + self.helpchar + "classup" + reset + ".")