Recognise days, hours and minutes in interval.
authorCMDR furrycat <elite@furrycat.net>
Fri, 7 Oct 2016 09:11:25 +0000 (10:11 +0100)
committerCMDR furrycat <elite@furrycat.net>
Fri, 7 Oct 2016 09:11:25 +0000 (10:11 +0100)
bot.py

diff --git a/bot.py b/bot.py
index f7aacca..52483f1 100755 (executable)
--- a/bot.py
+++ b/bot.py
@@ -104,6 +104,32 @@ def get_bot_variable(k, v = None):
     return bot.get(k, v)
   return v
 
+def parse_seconds(formatted):
+  formatted = formatted.strip()
+  m = re.match(r'(\d+)s?$', formatted)
+  if m is not None:
+    return m.group(1)
+  remaining = formatted
+  seconds = 0
+  while remaining:
+    m = re.match(r'(\d+)\s*([dhms])?', remaining)
+    if m is None:
+      log.info('Failed to parse interval {}'.format(formatted))
+      return None
+    n = int(m.group(1))
+    u = m.group(2)
+    if u == 'd':
+      seconds += 86400 * n
+    elif u == 'h':
+      seconds += 3600 * n
+    elif u == 'm':
+      seconds += 60 * n
+    elif u == 's' or not u:
+      seconds += n
+    remaining = remaining[len(m.group(0)):].strip()
+
+  return seconds
+
 def open_url(url):
   if sys.version_info >= (3, 0):
     # Specify our own user agent as Cloudflare doesn't seem to like the urllib one
@@ -898,9 +924,9 @@ def create_announcement(message, raw):
       else:
         break
     elif arg == 'every':
-      m = re.match(r'(\d+)s?', param)
-      if m is not None:
-        create['interval'] = m.group(1)
+      seconds = parse_seconds(param)
+      if seconds is not None:
+        create['interval'] = seconds
         ok = True
       else:
         break