|
|
|
@ -2,6 +2,7 @@ import logging
|
|
|
|
|
import re
|
|
|
|
|
|
|
|
|
|
import irc.client
|
|
|
|
|
from django.conf import settings
|
|
|
|
|
|
|
|
|
|
from ircbot.lib import Plugin, reply_destination_for_event
|
|
|
|
|
from ircbot.models import IrcChannel
|
|
|
|
@ -64,8 +65,8 @@ class Markov(Plugin):
|
|
|
|
|
"""Learn from IRC chatter."""
|
|
|
|
|
|
|
|
|
|
what = event.arguments[0]
|
|
|
|
|
my_nick = connection.get_nickname()
|
|
|
|
|
trimmed_what = re.sub(r'^{0:s}[:,]\s+'.format(my_nick), '', what)
|
|
|
|
|
all_nicks = '|'.join(settings.ADDITIONAL_NICK_MATCHES + [connection.get_nickname()])
|
|
|
|
|
trimmed_what = re.sub(r'^(({nicks})[:,]|@({nicks}))\s+'.format(nicks=all_nicks), '', what)
|
|
|
|
|
nick = irc.client.NickMask(event.source).nick
|
|
|
|
|
target = reply_destination_for_event(event)
|
|
|
|
|
|
|
|
|
@ -84,16 +85,16 @@ class Markov(Plugin):
|
|
|
|
|
context = markovlib.get_or_create_target_context(target)
|
|
|
|
|
markovlib.learn_line(trimmed_what, context)
|
|
|
|
|
|
|
|
|
|
log.debug("searching '%s' for '%s'", what, my_nick)
|
|
|
|
|
if re.search(my_nick, what, re.IGNORECASE) is not None:
|
|
|
|
|
log.debug("searching '%s' for '%s'", what, all_nicks)
|
|
|
|
|
if re.search(all_nicks, what, re.IGNORECASE) is not None:
|
|
|
|
|
context = markovlib.get_or_create_target_context(target)
|
|
|
|
|
|
|
|
|
|
addressed_pattern = r'^{0:s}[:,]\s+(.*)'.format(my_nick)
|
|
|
|
|
addressed_re = re.compile(addressed_pattern)
|
|
|
|
|
if addressed_re.match(what):
|
|
|
|
|
addressed_pattern = r'^(({nicks})[:,]|@({nicks}))\s+(?P<addressed_msg>.*)'.format(nicks=all_nicks)
|
|
|
|
|
match = re.match(addressed_pattern, what, re.IGNORECASE)
|
|
|
|
|
if match:
|
|
|
|
|
# i was addressed directly, so respond, addressing
|
|
|
|
|
# the speaker
|
|
|
|
|
topics = [x for x in addressed_re.match(what).group(1).split(' ') if len(x) >= 3]
|
|
|
|
|
topics = [x for x in match.group('addressed_msg').split(' ') if len(x) >= 3]
|
|
|
|
|
|
|
|
|
|
return self.bot.reply(event, "{0:s}: {1:s}"
|
|
|
|
|
"".format(nick, " ".join(markovlib.generate_line(context, topics=topics))))
|
|
|
|
|