diff options
author | Sean B. Palmer <sean@miscoranda.com> | 2013-03-15 15:28:03 +0000 |
---|---|---|
committer | Sean B. Palmer <sean@miscoranda.com> | 2013-03-15 15:28:03 +0000 |
commit | a546977f70f9b8c4acac632972cd26a2dd8d7676 (patch) | |
tree | ccdb1156c342d0f861e177df2b425d32a0ca3119 /modules/remind.py | |
parent | 7752b56cc2f8325883bad052ad31bf2e7feb706e (diff) | |
download | bot-a546977f70f9b8c4acac632972cd26a2dd8d7676.tar.gz bot-a546977f70f9b8c4acac632972cd26a2dd8d7676.tar.bz2 bot-a546977f70f9b8c4acac632972cd26a2dd8d7676.zip |
A new scheduling command and some improvements to gc
Diffstat (limited to 'modules/remind.py')
-rwxr-xr-x | modules/remind.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/modules/remind.py b/modules/remind.py index ec1a4d1..fbfd258 100755 --- a/modules/remind.py +++ b/modules/remind.py @@ -36,7 +36,10 @@ def dump_database(name, data): def setup(phenny): phenny.rfn = filename(phenny) + + # phenny.sending.acquire() phenny.rdb = load_database(phenny.rfn) + # phenny.sending.release() def monitor(phenny): time.sleep(5) @@ -51,7 +54,10 @@ def setup(phenny): phenny.msg(channel, nick + ': ' + message) else: phenny.msg(channel, nick + '!') del phenny.rdb[oldtime] + + # phenny.sending.acquire() dump_database(phenny.rfn, phenny.rdb) + # phenny.sending.release() time.sleep(2.5) targs = (phenny,) @@ -132,5 +138,56 @@ def remind(phenny, input): else: phenny.reply('Okay, will remind in %s secs' % duration) remind.commands = ['in'] +r_time = re.compile(r'^([0-9]{2}[:.][0-9]{2})') +r_zone = re.compile(r'( ?([A-Za-z]+|[+-]\d\d?))') + +import calendar +from clock import TimeZones + +def at(phenny, input): + bytes = input[4:] + + m = r_time.match(bytes) + if not m: + return phenny.reply("Sorry, didn't understand the time spec.") + t = m.group(1).replace('.', ':') + bytes = bytes[len(t):] + + m = r_zone.match(bytes) + if not m: + return phenny.reply("Sorry, didn't understand the zone spec.") + z = m.group(2) + bytes = bytes[len(m.group(1)):].strip().encode("utf-8") + + if z.startswith('+') or z.startswith('-'): + tz = int(z) + + if TimeZones.has_key(z): + tz = TimeZones[z] + else: return phenny.reply("Sorry, didn't understand the time zone.") + + d = time.strftime("%Y-%m-%d", time.gmtime()) + d = time.strptime(("%s %s" % (d, t)).encode("utf-8"), "%Y-%m-%d %H:%M") + + d = int(calendar.timegm(d) - (3600 * tz)) + duration = int((d - time.time()) / 60) + + if duration < 1: + return phenny.reply("Sorry, that date is this minute or in the past. And only times in the same day are supported!") + + # phenny.say("%s %s %s" % (t, tz, d)) + + reminder = (input.sender, input.nick, bytes) + # phenny.say(str((d, reminder))) + try: phenny.rdb[d].append(reminder) + except KeyError: phenny.rdb[d] = [reminder] + + phenny.sending.acquire() + dump_database(phenny.rfn, phenny.rdb) + phenny.sending.release() + + phenny.reply("Reminding at %s %s - in %s minute(s)" % (t, z, duration)) +at.commands = ['at'] + if __name__ == '__main__': print __doc__.strip() |