bornhack-website/src/program/management/commands/notification_worker.py
Thomas Steen Rasmussen 00af109e2f
add flake8 and isort to pre-commit config, make flake8 and isort happy (#441)
* add flake8 to pre-commit config, and fixup many things to make flake8 happy

* add isort and sort all imports, add to pre-commit and requirements
2020-02-12 13:10:41 +01:00

55 lines
2.1 KiB
Python

import logging
from datetime import timedelta
from time import sleep
from django.conf import settings
from django.core.management.base import BaseCommand
from django.utils import timezone
from camps.utils import get_current_camp
from ircbot.models import OutgoingIrcMessage
from program.models import EventInstance
logger = logging.getLogger("bornhack.%s" % __name__)
class Command(BaseCommand):
args = "none"
help = "Queue notifications for channels and users for upcoming event instances."
def output(self, message):
self.stdout.write(
"%s: %s" % (timezone.now().strftime("%Y-%m-%d %H:%M:%S"), message)
)
def handle(self, *args, **options):
self.output("Schedule notification worker running...")
while True:
camp = get_current_camp()
if camp:
# a camp is currently going on, check if we need to send out any notifications
for ei in EventInstance.objects.filter(
event__camp=camp,
event__event_type__notifications=True,
notifications_sent=False,
when__startswith__lt=timezone.now()
+ timedelta(
minutes=settings.SCHEDULE_EVENT_NOTIFICATION_MINUTES
), # start of event is less than X minutes away
when__startswith__gt=timezone.now(), # but event has not started yet
):
# this event is less than settings.SCHEDULE_EVENT_NOTIFICATION_MINUTES minutes from starting, queue an IRC notificatio
oim = OutgoingIrcMessage.objects.create(
target=settings.IRCBOT_SCHEDULE_ANNOUNCE_CHANNEL,
message="starting soon: %s" % ei,
timeout=ei.when.lower,
)
logger.info(
"added irc message id %s for eventinstance %s" % (oim.id, ei)
)
ei.notifications_sent = True
ei.save()
# check once per minute
sleep(60)