from common import userstatus, queries from commands.common import CommandHelpers as CH 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: # Do nothing if there is no command. return # The actual commands: print(command) print(command.split()[0]) if command == "test": if cmdtype == "help": #Display help text. if len(command.split()) is not 1: return connection.privmsg(replyto, "Strictly for testing purposes only!") elif cmdtype == "cmd": connection.privmsg(replyto, str(self.channels[self.homechannel].owners())) if event.target == connection.get_nickname(): # PM connection.privmsg(replyto, event) else: # Channel message. connection.privmsg(replyto, str(self.channels[event.target])) elif command == "cmd" or command == "cmds" or command == "commands": if cmdtype == "help": #Display help text. if len(command.split()) is not 1: return connection.privmsg(replyto, "Displays a list of commands.") elif cmdtype == "cmd": if not event.target == connection.get_nickname() and not self.db.one("SELECT join_greeting FROM channels WHERE name='" + event.target + "' AND network='" + self.network + "'"): connection.privmsg(replyto, grey + "Commands: " + CH.ccc(self, "cmd") + CH.ccc(self, "help")[:-2] + ".") else: connection.privmsg(replyto, grey + "Commands: " + CH.ccc(self, "cmd") + CH.ccc(self, "help") + CH.ccc(self, "away") + CH.ccc(self, "stopgreet")[:-2] + ".") elif command == "help": if cmdtype == "help": #Display help text. if len(command.split()) is not 1: return connection.privmsg(replyto, "Explains how to get help on any specific command and hints the user to the commandlist.") elif cmdtype == "cmd": connection.privmsg(replyto, "Replace the " + italic + "! " + reset + "prefix of any comand with " + italic + self.helpchar + " " + reset + "for help with a specific command. Request the command list with: " + blue + "!cmd") connection.privmsg(replyto, grey + "Example: " + reset + blue + self.helpchar + "help") elif command.split()[0] == "stopgreet": if cmdtype == "help": #Display help text. if len(command.split()) is not 1: return connection.privmsg(replyto, "Stops the bot from greeting you or a specific user. Channel, user and option to resume optional.") connection.privmsg(replyto, grey + "Usage: " + blue + "!stopgreet " + reset + italic + "resume " + red + "channel user") elif cmdtype == "cmd": # Check for resume variation of command. resume = False try: if command.split()[1] == "resume": resume = True command = command.split(' ', 1)[1] # Remove the resume argument. Which makes the following logic easier. except: pass if len(command.split()) == 1: # No arguments. if event.target == connection.get_nickname(): # PM. connection.privmsg(replyto, "Specify at least a channel. For help type " + blue + self.helpchar + "stopgreet" + reset + ".") return user = event.source.nick channel = event.target if len(command.split()) == 2: # One argument. if command.split()[1] not in self.channels: # Argument is not a channel the bot inhabits. if event.target == connection.get_nickname(): # PM. connection.action(replyto, "does not inhabit " + red + command.split()[1] + reset + ".") return # Channel message if not userstatus.atleast_halfop(self, event.source.nick, self.homechannel) and not userstatus.atleast_halfop(self, event.source.nick, event.target): # Insufficient rights. connection.privmsg(replyto, "Denied. You need to have at least halfop status in " + red + self.homechannel + reset + " or " + red + event.target + reset + ".") return # Stopgreet for x user in current channel user = command.split()[1] channel = event.target else: # Bot inhabit channel. user = event.source.nick channel = command.split()[1] if len(command.split()) == 3: # Two arguments. if command.split()[1] not in self.channels: # Bot does not inhabit channel. connection.action(replyto, "does not inhabit " + red + command.split()[1] + reset + ".") return if not userstatus.atleast_halfop(self, event.source.nick, self.homechannel) and not userstatus.atleast_halfop(self, event.source.nick, command.split()[1]): # Insufficient rights. connection.privmsg(replyto, "Denied. You need to have at least halfop status in " + red + self.homechannel + reset + " or " + red + command.split()[1] + reset + ".") return user = command.split()[2] channel = command.split()[1] if len(command.split()) > 3: # Too many arguments. connection.privmsg(replyto, "Too many arguments. For help type " + blue + self.helpchar + "stopgreet" + reset + ".") return # Check for database record. result = self.db.one("SELECT id, stopgreet FROM joins WHERE LOWER(\"user\")=LOWER('" + user + "') AND user_network='" + self.network + "' AND LOWER(channel)=LOWER('" + channel + "') AND channel_network='" + self.network + "'") if not result: # No record in database. connection.action(replyto, "has not yet had the pleasure of greeting " + red + user + reset + " in " + red + channel + reset + ".") return if resume: stopgreet = False message = "has already every intention to greet " else: stopgreet = True message = "has already stopped greeting " if result[1] == stopgreet: connection.action(replyto, message + red + user + reset + " in " + red + channel + reset + ".") return print(str(stopgreet) + str(user) + str(channel)) try: self.db.run("UPDATE joins SET stopgreet='" + str(stopgreet) + "' WHERE LOWER(\"user\")=LOWER('" + user + "') AND user_network='" + self.network + "' AND lower(channel)=LOWER('" + channel + "') AND channel_network='" + self.network + "'") except: connection.privmsg(replyto, "Failed to update database.") elif command.split()[0] == "away": if cmdtype == "help": #Display help text. if len(command.split()) is not 1: return connection.privmsg(replyto, "Sets you away, optionally with reason. Affects the !seen command.") connection.privmsg(replyto, grey + "Usage: " + blue + "!away " + reset + italic + "reason") elif cmdtype == "cmd": queries.create_ifnot_onrecord(self, event.source.nick) if len(trigger.split()) == 1: self.db.run("UPDATE users SET away=TRUE, away_reason=NULL WHERE name='" + event.source.nick + "' AND network='" + self.network + "'") else: self.db.run("UPDATE users SET away=TRUE, away_reason=%s WHERE name='" + event.source.nick + "' AND network='" + self.network + "'", (trigger.split(maxsplit=1)[1], ))