countdown: use new event addressed stuff

lets countdown.ircplugin use the regex handler and do less checking
itself
This commit is contained in:
Brian S. Stephan 2017-03-10 18:18:39 -06:00
parent 1e428b77db
commit 55c1cf01a2
1 changed files with 60 additions and 77 deletions

View File

@ -5,14 +5,13 @@ import re
import threading import threading
import time import time
import irc.client
import parsedatetime as pdt import parsedatetime as pdt
from dateutil.parser import parse from dateutil.parser import parse
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from django.utils import timezone from django.utils import timezone
from countdown.models import CountdownItem from countdown.models import CountdownItem
from ircbot.lib import Plugin, reply_destination_for_event from ircbot.lib import Plugin, most_specific_message
log = logging.getLogger('countdown.ircplugin') log = logging.getLogger('countdown.ircplugin')
@ -45,10 +44,8 @@ class Countdown(Plugin):
self.handle_item_list, -20) self.handle_item_list, -20)
self.connection.reactor.add_global_regex_handler(['pubmsg', 'privmsg'], r'^!countdown\s+(\S+)$', self.connection.reactor.add_global_regex_handler(['pubmsg', 'privmsg'], r'^!countdown\s+(\S+)$',
self.handle_item_detail, -20) self.handle_item_detail, -20)
self.connection.reactor.add_global_regex_handler(['pubmsg', 'privmsg'], self.new_reminder_regex,
# let this interrupt markov self.handle_new_reminder, -50)
self.connection.add_global_handler('pubmsg', self.handle_new_reminder, -50)
self.connection.add_global_handler('privmsg', self.handle_new_reminder, -50)
super(Countdown, self).start() super(Countdown, self).start()
@ -59,9 +56,7 @@ class Countdown(Plugin):
self.connection.reactor.remove_global_regex_handler(['pubmsg', 'privmsg'], self.handle_item_list) self.connection.reactor.remove_global_regex_handler(['pubmsg', 'privmsg'], self.handle_item_list)
self.connection.reactor.remove_global_regex_handler(['pubmsg', 'privmsg'], self.handle_item_detail) self.connection.reactor.remove_global_regex_handler(['pubmsg', 'privmsg'], self.handle_item_detail)
self.connection.reactor.remove_global_regex_handler(['pubmsg', 'privmsg'], self.handle_new_reminder)
self.connection.remove_global_handler('pubmsg', self.handle_new_reminder)
self.connection.remove_global_handler('privmsg', self.handle_new_reminder)
super(Countdown, self).stop() super(Countdown, self).stop()
@ -94,24 +89,10 @@ class Countdown(Plugin):
reminder.save() reminder.save()
time.sleep(1) time.sleep(1)
def handle_new_reminder(self, connection, event): def handle_new_reminder(self, connection, event, match):
"""Watch IRC for requests to remind new things, create countdown items.""" """Watch IRC for requests to remind new things, create countdown items."""
what = event.arguments[0] if event.in_privmsg or event.addressed:
my_nick = connection.get_nickname() log.debug("%s is a new reminder request", most_specific_message(event))
addressed_my_nick = r'^{0:s}[:,]\s+'.format(my_nick)
sender_nick = irc.client.NickMask(event.source).nick
sent_location = reply_destination_for_event(event)
in_privmsg = sender_nick == sent_location
if re.search(addressed_my_nick, what, re.IGNORECASE) is not None or in_privmsg:
# we were addressed, were we told to add a reminder?
trimmed_what = re.sub(addressed_my_nick, '', what)
log.debug(trimmed_what)
match = re.match(self.new_reminder_regex, trimmed_what, re.IGNORECASE)
if match:
log.debug("%s is a new reminder request", trimmed_what)
who = match.group('who') who = match.group('who')
when_type = match.group('when_type') when_type = match.group('when_type')
when = match.group('when') when = match.group('when')
@ -120,7 +101,7 @@ class Countdown(Plugin):
text = match.group('text') text = match.group('text')
log.debug("%s / %s / %s", who, when, text) log.debug("%s / %s / %s", who, when, text)
item_name = '{0:s}-{1:s}'.format(sender_nick, timezone.now().strftime('%s')) item_name = '{0:s}-{1:s}'.format(event.sender_nick, timezone.now().strftime('%s'))
# parse when to send the notification # parse when to send the notification
if when_type == 'in': if when_type == 'in':
@ -133,10 +114,10 @@ class Countdown(Plugin):
when_t = timezone.make_aware(parse(when)) when_t = timezone.make_aware(parse(when))
# parse the person to address, if anyone, when sending the notification # parse the person to address, if anyone, when sending the notification
if who == 'us' or who == sent_location or in_privmsg: if who == 'us' or who == event.sent_location or event.in_privmsg:
message = text message = text
elif who == 'me': elif who == 'me':
message = '{0:s}: {1:s}'.format(sender_nick, text) message = '{0:s}: {1:s}'.format(event.sender_nick, text)
else: else:
message = '{0:s}: {1:s}'.format(who, text) message = '{0:s}: {1:s}'.format(who, text)
@ -155,7 +136,7 @@ class Countdown(Plugin):
log.debug("%s / %s / %s", item_name, when_t, message) log.debug("%s / %s / %s", item_name, when_t, message)
countdown_item = CountdownItem.objects.create(name=item_name, at_time=when_t, is_reminder=True, countdown_item = CountdownItem.objects.create(name=item_name, at_time=when_t, is_reminder=True,
reminder_message=message, reminder_target=sent_location) reminder_message=message, reminder_target=event.sent_location)
if recurring_period: if recurring_period:
countdown_item.recurring_period = recurring_period countdown_item.recurring_period = recurring_period
if recurring_until: if recurring_until:
@ -164,10 +145,12 @@ class Countdown(Plugin):
countdown_item.save() countdown_item.save()
log.info("created countdown item %s", str(countdown_item)) log.info("created countdown item %s", str(countdown_item))
if in_privmsg: if event.in_privmsg:
self.bot.reply(event, "ok, i'll message you at {0:s} 14[{1:s}]".format(str(when_t), countdown_item.name)) self.bot.reply(event, "ok, i'll message you at {0:s} 14[{1:s}]".format(str(when_t),
countdown_item.name))
else: else:
self.bot.reply(event, "ok, i'll message {0:s} at {1:s} 14[{2:s}]".format(sent_location, str(when_t), self.bot.reply(event, "ok, i'll message {0:s} at {1:s} 14[{2:s}]".format(event.sent_location,
str(when_t),
countdown_item.name)) countdown_item.name))
return 'NO MORE' return 'NO MORE'