@asyncio.coroutine
def announce(announcement):
+ update = {}
# Adhere to schedule.
- last_spoke = None
- asap = None
if announcement['asap'] == 'true':
log.info('Announcement {} was requested ASAP'.format(announcement['id']))
announcement['probability'] = 1.0
- asap = 'false'
+ update['asap'] = 'false'
elif announcement['interval']:
if announcement['start_date'] or announcement['last_spoke']:
now = int(time.time())
scheduled = start + intervals * announcement['interval']
if now - scheduled > max(60, announcement['interval'] / 2):
log.info('Announcement {} should have been given at {}'.format(announcement['id'], iso8601(scheduled)))
- db.set_announcement(client, announcement['id'], digest = announcement['digest'] if 'digest' in announcement else None, last_spoke = scheduled)
+ if 'digest' in announcement:
+ update['digest'] = announcement['digest']
+ update['last_spoke'] = scheduled
+ db.update_announcement(client, announcement['id'], **update)
return
# Give the announcement now but set the original schedule.
last_spoke = start + (intervals + 1) * announcement['interval']
- log.info('Forcing last_spoke for announcement {} to {} in line with schedule'.format(announcement['id'], iso8601(last_spoke)))
+ if last_spoke < now:
+ update['last_spoke'] = last_spoke
+ log.info('Forcing last_spoke for announcement {} to {} in line with schedule'.format(announcement['id'], iso8601(update['last_spoke'])))
+ if 'asap' not in update and 'last_spoke' not in update:
+ update['last_spoke'] = int(time.time())
channel = None
channel_id = str(announcement['channel_id'])
if channel is None:
log.warning("Can't get channel for announcement {}".format(announcement['id']))
# Set last_spoke so we don't spam.
- db.set_announcement(client, announcement['id'], digest = announcement['digest'] if 'digest' in announcement else None, last_spoke = last_spoke, asap = asap)
+ db.update_announcement(client, announcement['id'], **update)
return
voice_only = announcement['voice_id'] == announcement['channel_id']
message = yield from say(channel, text)
digest = hashlib.sha224(message.content.encode('utf-8')).hexdigest()
else:
- log.info("Didn't bother with announcement {}".format(announcement['id']))
+ if announcement['probability'] < 0:
+ log.info("Announcement {} is paused".format(announcement['id']))
+ else:
+ log.info("Didn't bother with announcement {}".format(announcement['id']))
# Set last_spoke even if we chose not to announce.
- db.set_announcement(client, announcement['id'], digest = digest, last_spoke = last_spoke, asap = asap)
+ update['digest'] = digest
+ db.update_announcement(client, announcement['id'], **update)
if not announce:
return
if announcement['voice_id']:
yield dict(row)
self.close_db()
- def set_announcement(self, client, id, digest = None, last_spoke = None, asap = None):
- if last_spoke is None and asap is None:
- last_spoke = self.now()
- if asap is None:
- asap = 'asap'
- cursor = self.query('update announcements set last_spoke=?, asap=?, digest=? where id=?', [last_spoke, asap, digest, id])
- self.dbh.commit()
- self.close_db()
-
def create_announcement(self, client, **args):
id = self.uuid()