diff --git a/modules/Facts.py b/modules/Facts.py index 1e87588..b66771a 100644 --- a/modules/Facts.py +++ b/modules/Facts.py @@ -78,24 +78,40 @@ class Facts(Module): if match: category = match.group(1) regex = match.group(2) - category_facts = cur.execute('SELECT * FROM facts_facts WHERE category=? AND fact REGEXP ?', (category, regex)) - facts = category_facts.fetchall() - if len(facts) > 0: - fact = facts[random.randint(1,len(facts))-1] - return self.reply(connection, event, fact['fact'].rstrip().encode('utf-8', 'ignore')) + return self.reply(connection, event, self._get_fact(category, regex)) match = re.search('^!facts\s+(\S+)$', what) if match: category = match.group(1) - category_facts = cur.execute('SELECT * FROM facts_facts WHERE category=?', (category,)) - facts = category_facts.fetchall() - if len(facts) > 0: - fact = facts[random.randint(1,len(facts))-1] - return self.reply(connection, event, fact['fact'].rstrip().encode('utf-8', 'ignore')) + return self.reply(connection, event, self._get_fact(category)) db.close() except sqlite3.Error as e: db.close() return self.reply(connection, event, "sqlite error: " + str(e)) + def _get_fact(self, category, search=""): + """Get a fact in the given category from the database.""" + + try: + db = self.get_db() + cur = db.cursor() + + if search == "": + category_facts = cur.execute("SELECT * FROM facts_facts WHERE category=?", (category,)) + facts = category_facts.fetchall() + db.close() + else: + category_facts = cur.execute("SELECT * FROM facts_facts WHERE category=? AND fact REGEXP ?", + (category, search)) + facts = category_facts.fetchall() + db.close() + + if len(facts) > 0: + fact = facts[random.randint(1,len(facts))-1] + return fact['fact'].rstrip().encode('utf-8', 'ignore') + except sqlite3.Error as e: + db.close() + return self.reply(connection, event, "sqlite error in _get_fact: " + str(e)) + # vi:tabstop=4:expandtab:autoindent # kate: indent-mode python;indent-width 4;replace-tabs on;