From a03c69258f1f6d5ffb1abf7e6378681d6dc8672d Mon Sep 17 00:00:00 2001 From: "Brian S. Stephan" Date: Sun, 25 Apr 2021 21:04:11 -0500 Subject: [PATCH] use per-server IrcChannel for reminders this makes it so that if we have multiple bot instances running, they will only pay attention to the countdown items for their current server --- countdown/ircplugin.py | 16 +++++++++++---- .../0007_countdownitem_reminder_target_new.py | 20 +++++++++++++++++++ countdown/models.py | 2 ++ 3 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 countdown/migrations/0007_countdownitem_reminder_target_new.py diff --git a/countdown/ircplugin.py b/countdown/ircplugin.py index 9780636..3c4d19d 100644 --- a/countdown/ircplugin.py +++ b/countdown/ircplugin.py @@ -12,6 +12,7 @@ from django.utils import timezone from countdown.models import CountdownItem from ircbot.lib import Plugin, most_specific_message +from ircbot.models import IrcChannel log = logging.getLogger('countdown.ircplugin') @@ -29,6 +30,7 @@ class Countdown(Plugin): """Initialize some stuff.""" self.running_reminders = [] self.send_reminders = True + self.server_config = connection.server_config t = threading.Thread(target=self.reminder_thread) t.daemon = True @@ -66,13 +68,15 @@ class Countdown(Plugin): # TODO: figure out if we need this sleep, which exists so we don't send reminders while still connecting to IRC time.sleep(30) while self.send_reminders: - reminders = CountdownItem.objects.filter(is_reminder=True, sent_reminder=False, at_time__lte=timezone.now()) + reminders = CountdownItem.objects.filter(is_reminder=True, sent_reminder=False, + at_time__lte=timezone.now(), + reminder_target_new__server=self.server_config) for reminder in reminders: log.debug("%s @ %s", reminder.reminder_message, reminder.at_time) if reminder.at_time <= timezone.now(): - log.info("sending %s to %s", reminder.reminder_message, reminder.reminder_target) - self.bot.reply(None, reminder.reminder_message, explicit_target=reminder.reminder_target) + log.info("sending %s to %s", reminder.reminder_message, reminder.reminder_target_new.name) + self.bot.reply(None, reminder.reminder_message, explicit_target=reminder.reminder_target_new.name) # if recurring and not hit until, set a new at time, otherwise stop reminding if reminder.recurring_until is not None and timezone.now() >= reminder.recurring_until: @@ -143,8 +147,12 @@ class Countdown(Plugin): log.debug("%s / %s / %s", item_name, when_t, message) + # get the IrcChannel to send to + reminder_target, _ = IrcChannel.objects.get_or_create(name=event.sent_location, + server=connection.server_config) + countdown_item = CountdownItem.objects.create(name=item_name, at_time=when_t, is_reminder=True, - reminder_message=message, reminder_target=event.sent_location) + reminder_message=message, reminder_target_new=reminder_target) if recurring_period: countdown_item.recurring_period = recurring_period if recurring_until: diff --git a/countdown/migrations/0007_countdownitem_reminder_target_new.py b/countdown/migrations/0007_countdownitem_reminder_target_new.py new file mode 100644 index 0000000..a19e240 --- /dev/null +++ b/countdown/migrations/0007_countdownitem_reminder_target_new.py @@ -0,0 +1,20 @@ +# Generated by Django 3.1.2 on 2021-04-26 00:10 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('ircbot', '0018_ircserver_replace_irc_control_with_markdown'), + ('countdown', '0006_auto_20201025_1716'), + ] + + operations = [ + migrations.AddField( + model_name='countdownitem', + name='reminder_target_new', + field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='ircbot.ircchannel'), + ), + ] diff --git a/countdown/models.py b/countdown/models.py index 6a84fc3..8522859 100644 --- a/countdown/models.py +++ b/countdown/models.py @@ -14,6 +14,8 @@ class CountdownItem(models.Model): reminder_message = models.TextField(default="") reminder_target = models.CharField(max_length=64, blank=True, default='') + reminder_target_new = models.ForeignKey('ircbot.IrcChannel', null=True, blank=True, + default=None, on_delete=models.CASCADE) recurring_period = models.CharField(max_length=64, blank=True, default='') recurring_until = models.DateTimeField(null=True, blank=True, default=None)