markov: add !markov reply command

This commit is contained in:
Brian S. Stephan 2015-05-15 18:37:48 -05:00
parent 67411ad0bc
commit 43da4bff5a
1 changed files with 34 additions and 0 deletions

View File

@ -20,6 +20,11 @@ class Markov(Plugin):
self.connection.add_global_handler('pubmsg', getattr(self, 'handle_chatter'), -20)
self.connection.add_global_handler('privmsg', getattr(self, 'handle_chatter'), -20)
self.connection.reactor.add_global_regex_handler('pubmsg', r'^!markov\s+reply(\s+min=(\d+))?(\s+max=(\d+))?(\s+(.*)$|$)',
getattr(self, 'handle_reply'), -20)
self.connection.reactor.add_global_regex_handler('privmsg', r'^!markov\s+reply(\s+min=(\d+))?(\s+max=(\d+))?(\s+(.*)$|$)',
getattr(self, 'handle_reply'), -20)
super(Markov, self).start()
def stop(self):
@ -28,8 +33,37 @@ class Markov(Plugin):
self.connection.remove_global_handler('pubmsg', getattr(self, 'handle_chatter'))
self.connection.remove_global_handler('privmsg', getattr(self, 'handle_chatter'))
self.connection.reactor.remove_global_regex_handler('pubmsg', getattr(self, 'handle_reply'))
self.connection.reactor.remove_global_regex_handler('privmsg', getattr(self, 'handle_reply'))
super(Markov, self).stop()
def handle_reply(self, connection, event, match):
"""Generate a reply to one line, without learning it."""
target = reply_destination_for_event(event)
min_size = 15
max_size = 30
context = markovlib.get_or_create_target_context(target)
if match.group(2):
min_size = int(match.group(2))
if match.group(4):
max_size = int(match.group(4))
if match.group(5) != '':
line = match.group(6)
topics = [x for x in line.split(' ') if len(x) >= 3]
return self.bot.reply(event, u" ".join(markovlib.generate_line(context, topics=topics,
min_words=min_size, max_words=max_size,
max_sentences=1)))
else:
return self.bot.reply(event, u" ".join(markovlib.generate_line(context, min_words=min_size,
max_words=max_size,
max_sentences=1)))
def handle_chatter(self, connection, event):
"""Learn from IRC chatter."""