diff --git a/modules/Markov.py b/modules/Markov.py index 7d5e8cb..6ab646d 100644 --- a/modules/Markov.py +++ b/modules/Markov.py @@ -68,6 +68,8 @@ class Markov(Module): Module.__init__(self, irc, config, server) self.next_shut_up_check = 0 + self.next_chatter_check = 0 + self.connection = None thread.start_new_thread(self.thread_do, ()) def db_init(self): @@ -185,6 +187,20 @@ class Markov(Module): db.close() print('sqlite error: ' + str(e)) raise + if (version < 7): + db = self.get_db() + try: + version = 7 + db.execute(''' + ALTER TABLE markov_chatter_target ADD COLUMN chance INTEGER NOT NULL DEFAULT 99999''') + db.commit() + db.close() + self.db_register_module_version(self.__class__.__name__, version) + except sqlite3.Error as e: + db.rollback() + db.close() + print('sqlite error: ' + str(e)) + raise def register_handlers(self): """Handle pubmsg/privmsg, to learn and/or reply to IRC events.""" @@ -298,8 +314,29 @@ class Markov(Module): while not self.is_shutdown: self._do_shut_up_checks() + self._do_random_chatter_check() time.sleep(1) + def _do_random_chatter_check(self): + """Randomly say something to a channel.""" + + # don't immediately potentially chatter, let the bot + # join channels first + if self.next_chatter_check == 0: + self.next_chatter_check = time.time() + 600 + + if self.next_chatter_check < time.time(): + self.next_chatter_check = time.time() + 600 + + if self.connection is None: + # i haven't seen any text yet... + return + + targets = self._get_chatter_targets() + for t in targets: + if random.randint(1, t['chance']) == 1: + self.sendmsg(self.connection, t['target'], self._generate_line(t['target'])) + def _do_shut_up_checks(self): """Check to see if we've been talking too much, and shut up if so.""" @@ -440,14 +477,10 @@ class Markov(Module): dbfile = self.config.get('dr.botzo', 'database') db = sqlite3.connect(dbfile) db.row_factory = sqlite3.Row - query = 'SELECT target FROM markov_chatter_target' + query = 'SELECT target, chance FROM markov_chatter_target' cursor = db.execute(query) results = cursor.fetchall() - - for result in results: - values.append(result['target']) - - return values + return results except sqlite3.Error as e: db.close() print('sqlite error: ' + str(e))