49 lines
2.0 KiB
Python
49 lines
2.0 KiB
Python
from django.core.management.base import BaseCommand
|
|
from django.conf import settings
|
|
from django.utils import timezone
|
|
from time import sleep
|
|
import irc3, sys, asyncio
|
|
from ircbot.models import OutgoingIrcMessage
|
|
from camps.utils import get_current_camp
|
|
from django.utils import timezone
|
|
from program.models import EventInstance
|
|
from datetime import timedelta
|
|
import logging
|
|
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)
|
|
|