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
This commit is contained in:
parent
43f2b09057
commit
a03c69258f
@ -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:
|
||||
|
@ -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'),
|
||||
),
|
||||
]
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user