diff --git a/modules/Markov.py b/modules/Markov.py index 1e8b57b..76ab59b 100644 --- a/modules/Markov.py +++ b/modules/Markov.py @@ -39,6 +39,10 @@ class Markov(Module): http://code.activestate.com/recipes/194364-the-markov-chain-algorithm/ """ + def timer_interval(self): + """Do various conversation scoring and infinite reply checks.""" + return 30 + def __init__(self, irc, config, server): """Create the Markov chainer, and learn text from a file if available.""" @@ -57,6 +61,8 @@ class Markov(Module): self.learnre = re.compile(learnpattern) self.replyre = re.compile(replypattern) + self.shut_up = False + Module.__init__(self, irc, config, server) def db_init(self): @@ -173,19 +179,20 @@ class Markov(Module): return self.reply(connection, event, self.markov_train(connection, event, nick, userhost, what, admin_unlocked)) elif self.learnre.search(what): return self.reply(connection, event, self.markov_learn(connection, event, nick, userhost, what, admin_unlocked)) - elif self.replyre.search(what): + elif self.replyre.search(what) and not self.shut_up: return self.reply(connection, event, self.markov_reply(connection, event, nick, userhost, what, admin_unlocked)) - # not a command, so see if i'm being mentioned - if re.search(connection.get_nickname(), what, re.IGNORECASE) is not None: - addressed_pattern = '^' + connection.get_nickname() + '[:,]\s+(.*)' - addressed_re = re.compile(addressed_pattern) - if addressed_re.match(what): - # i was addressed directly, so respond, addressing the speaker - return self.reply(connection, event, '{0:s}: {1:s}'.format(nick, self._generate_line(line=addressed_re.match(what).group(1)))) - else: - # i wasn't addressed directly, so just respond - return self.reply(connection, event, '{0:s}'.format(self._generate_line(line=what))) + if not self.shut_up: + # not a command, so see if i'm being mentioned + if re.search(connection.get_nickname(), what, re.IGNORECASE) is not None: + addressed_pattern = '^' + connection.get_nickname() + '[:,]\s+(.*)' + addressed_re = re.compile(addressed_pattern) + if addressed_re.match(what): + # i was addressed directly, so respond, addressing the speaker + return self.reply(connection, event, '{0:s}: {1:s}'.format(nick, self._generate_line(line=addressed_re.match(what).group(1)))) + else: + # i wasn't addressed directly, so just respond + return self.reply(connection, event, '{0:s}'.format(self._generate_line(line=what))) def markov_train(self, connection, event, nick, userhost, what, admin_unlocked): """Learn lines from a file. Good for initializing a brain.""" @@ -233,6 +240,14 @@ class Markov(Module): else: return self._generate_line(min_size=min_size, max_size=max_size) + def timer_do(self): + """Do various things. + + * Check to see if we've been talking too much, and shut up if so. + """ + + self.shut_up = True + def _learn_line(self, line, target=None): """Create Markov chains from the provided line."""