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 time
import irc.client
import parsedatetime as pdt
from dateutil.parser import parse
from dateutil.relativedelta import relativedelta
from django.utils import timezone
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')
@ -45,10 +44,8 @@ class Countdown(Plugin):
self.handle_item_list, -20)
self.connection.reactor.add_global_regex_handler(['pubmsg', 'privmsg'], r'^!countdown\s+(\S+)$',
self.handle_item_detail, -20)
# let this interrupt markov
self.connection.add_global_handler('pubmsg', self.handle_new_reminder, -50)
self.connection.add_global_handler('privmsg', self.handle_new_reminder, -50)
self.connection.reactor.add_global_regex_handler(['pubmsg', 'privmsg'], self.new_reminder_regex,
self.handle_new_reminder, -50)
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_detail)
self.connection.remove_global_handler('pubmsg', self.handle_new_reminder)
self.connection.remove_global_handler('privmsg', self.handle_new_reminder)
self.connection.reactor.remove_global_regex_handler(['pubmsg', 'privmsg'], self.handle_new_reminder)
super(Countdown, self).stop()
@ -94,24 +89,10 @@ class Countdown(Plugin):
reminder.save()
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."""
what = event.arguments[0]
my_nick = connection.get_nickname()
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)
if event.in_privmsg or event.addressed:
log.debug("%s is a new reminder request", most_specific_message(event))
who = match.group('who')
when_type = match.group('when_type')
when = match.group('when')
@ -120,7 +101,7 @@ class Countdown(Plugin):
text = match.group('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
if when_type == 'in':
@ -133,10 +114,10 @@ class Countdown(Plugin):
when_t = timezone.make_aware(parse(when))
# 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
elif who == 'me':
message = '{0:s}: {1:s}'.format(sender_nick, text)
message = '{0:s}: {1:s}'.format(event.sender_nick, text)
else:
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)
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:
countdown_item.recurring_period = recurring_period
if recurring_until:
@ -164,10 +145,12 @@ class Countdown(Plugin):
countdown_item.save()
log.info("created countdown item %s", str(countdown_item))
if in_privmsg:
self.bot.reply(event, "ok, i'll message you at {0:s} 14[{1:s}]".format(str(when_t), countdown_item.name))
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))
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))
return 'NO MORE'