Formatting of timer plugin

This commit is contained in:
mrhanky 2017-08-22 13:22:57 +02:00
parent 9d8405092e
commit 8dce06b793
No known key found for this signature in database
GPG Key ID: 67D772C481CB41B8

View File

@ -25,6 +25,36 @@ class Timer(DatabasePlugin):
self.set_timers() self.set_timers()
crontab('0 * * * *', func=self.set_timers) crontab('0 * * * *', func=self.set_timers)
@command
def timer(self, mask: IrcString, target: IrcString, args: DocOptDict):
"""Sets a timer, delay can be: s, m, h, d, w, mon, y
%%timer <delay> <message>...
"""
delay = args['<delay>']
message = ' '.join(args['<message>'])
if not re.match(r'\d+[smhdwy]|mon', delay):
return 'Invalid timer delay: {}'.format(delay)
try:
self.cur.execute('''
INSERT INTO
timers (mask, target, message, delay, ends_at)
VALUES
(%s, %s, %s, %s, now() + INTERVAL %s)
RETURNING
*
''', [mask, target, message, delay, delay])
self.con.commit()
asyncio.ensure_future(self.exec_timer(self.cur.fetchone()))
self.bot.notice(mask.nick, 'Timer in {delay} set: {message}'.format(delay=delay, message=message))
except Error as ex:
self.log.error(ex)
self.con.rollback()
def set_timers(self): def set_timers(self):
"""Function which queries all timers in the next hour and schedules them.""" """Function which queries all timers in the next hour and schedules them."""
self.log.debug('Fetching timers') self.log.debug('Fetching timers')
@ -41,37 +71,6 @@ class Timer(DatabasePlugin):
for timer in self.cur.fetchall(): for timer in self.cur.fetchall():
asyncio.ensure_future(self.exec_timer(timer)) asyncio.ensure_future(self.exec_timer(timer))
@command
def timer(self, mask: IrcString, target: IrcString, args: DocOptDict):
"""Sets a timer, delay can be: s, m, h, d, w, mon, y
%%timer <delay> <message>...
"""
delay = args['<delay>']
message = ' '.join(args['<message>'])
if not re.match(r'\d+[smhdwy]|mon', delay):
return 'Invalid timer delay: {}'.format(delay)
values = [mask, target, message, delay]
try:
self.cur.execute('''
INSERT INTO
timers (mask, target, message, delay, ends_at)
VALUES
(%s, %s, %s, %s, now() + INTERVAL %s)
RETURNING *
''', values + [delay])
self.con.commit()
asyncio.ensure_future(self.exec_timer(self.cur.fetchone()))
self.bot.notice(mask.nick, 'Timer in {delay} set: {message}'.format(delay=delay, message=message))
except Error as ex:
self.log.error(ex)
self.con.rollback()
async def exec_timer(self, timer: DictRow): async def exec_timer(self, timer: DictRow):
"""Sets the actual timer (sleeps until it fires), sends the reminder and deletes the timer from database.""" """Sets the actual timer (sleeps until it fires), sends the reminder and deletes the timer from database."""
if timer['id'] in self.timers: if timer['id'] in self.timers: