def on_pubmsg(self, serv, ev): """Handles the messages on the chan""" author = ev.source.nick raw_msg = ev.arguments[0] self.log.add_cache(author, raw_msg) # Log each line msg = raw_msg.strip() http_re = r"http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]" +\ r"|(?:%[0-9a-fA-F][0-9a-fA-F]))+" urls = re.findall(http_re, msg) # If found some urls in the message, handles them if len(urls) > 0: self.lien.on_links(serv, author, urls) # If "perdu" or "jeu" or "game" or "42" in the last message, do Jeu if ("perdu" in msg or "jeu" in msg or "game" in msg or "42" in msg) \ and random.randint(0, 10) == 7: self.jeu(serv) msg = msg.split(':', 1) if(msg[0].strip() == self.connection.get_nickname() and (config.get("authorized") == [] or author in config.get("authorized"))): try: msg = shlex.split(msg[1]) except ValueError: self.say(serv, 'Oops.') return msg[0] = msg[0].lower() self.historique.add(author, msg[0]) if msg[0] in self.rules: try: self.rules[msg[0]]['action'](serv, author, msg) except InvalidArgs: if config.get("debug"): tools.warning("Debug : " + str(msg)) self.aide(serv, author, msg) elif msg[0] == "<3" or msg[0] == "♥": self.ans(serv, author, "Merci " + author + ", moi aussi je t'aime très fort ! #Kikoo") else: self.ans(serv, author, "Je n'ai pas compris…") elif(msg[0].strip().lower() == "aziz" and (config.get("authorized") == [] or author in config.get("authorized"))): # Easter egg try: msg = shlex.split(msg[1]) except ValueError: self.say(serv, 'Oops.') return msg[0] = msg[0].lower() if msg[0] == "lumiere": self.historique.add(author, msg[0]) try: self.rules[msg[0]]['action'](serv, author, msg) except InvalidArgs: if config.get("debug"): tools.warning("Debug : " + str(msg)) self.aide(serv, author, msg)
def save(self): try: with open(self.config_path + "config.json", 'w') as fh: fh.write(json.dumps(self.config, sort_keys=True, indent=4, separators=(',', ': '))) except IOError: tools.warning("Could not write config file.") sys.exit(1)
def load(self): try: folder_exists = make_sure_path_exists(self.config_path) if(folder_exists and os.path.isfile(self.config_path + "config.json")): initialized = True else: initialized = False except OSError: tools.warning("Unable to create ~/.config folder.") sys.exit(1) if not initialized: self.initialize() tools.warning("Config initialized to its default values. " + "Edit " + self.config_path + "config.json prior to " "running jarvis again.") sys.exit() else: try: with open(self.config_path + "config.json", 'r') as fh: self.config = json.load(fh) except (ValueError, IOError): tools.warning("Config file could not be read.") sys.exit(1) if self.get("version") != self.VERSION: self.set("version", self.VERSION) self.save() tools.warning("Updated Jarvis version to " + self.VERSION)
def pgsql_connect(self, serv): if self.bdd is None: try: self.bdd = psycopg2.connect(**config.get("pgsql")) self.bdd.set_isolation_level(0) # Set autocommit except psycopg2.Error as err: if config.get("debug"): print(datetime.datetime.now().timestamp()) tools.warning("Debug : " + str(err)) if err.errno == psycopg2.errorcode.ER_ACCESS_DENIED_ERROR: serv.say("Accès refusé à la BDD.") elif err.errno == psycopg2.errorcode.ER_BAD_DB_ERROR: serv.say("La base PostgreSQL n'existe pas.") return None elif self.bdd.closed > 0: self.bdd.reconnect() return self.bdd
to_send = [] try: print('Logging as ' + config.get("imap_user") + '… ', end='') conn.login(config.get("imap_user"), config.get("imap_password")) except: print('Failed') print(sys.exc_info()[1]) sys.exit(1) print('Logged in') try: bdd = mysql.connector.connect(**config.get("mysql")) bdd_cursor = bdd.cursor() except mysql.connector.Error as err: tools.warning(err) sys.exit(1) try: # Fetch new emails in INBOX, using uids conn.select("inbox") result, data = conn.uid('search', None, "ALL") uids_list = data[0].split() for uid in uids_list: result, data = conn.uid("fetch", uid, "(RFC822)") parsed = handle_raw_email(data[0][1]) if parsed[0] == "sympa": query = "UPDATE moderation SET moderated=%s WHERE \ token=%s AND liste=%s" if parsed[1] == "rejeté":