aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoachim Filip Ignacy Bartosik <jbartosik@gmail.com>2011-06-07 20:36:06 +0200
committerJoachim Filip Ignacy Bartosik <jbartosik@gmail.com>2011-06-10 18:12:23 +0200
commitef1f6f5ea86e9ea4645d78aef49ab4cfbfb26152 (patch)
tree25ae1b7e61e113034d903a2eec694b82f5b0de3a /bot/Reminder/plugin.py
parentagenda/reminders page lists users that bot should remind about meeting (diff)
downloadcouncil-webapp-ef1f6f5ea86e9ea4645d78aef49ab4cfbfb26152.tar.gz
council-webapp-ef1f6f5ea86e9ea4645d78aef49ab4cfbfb26152.tar.bz2
council-webapp-ef1f6f5ea86e9ea4645d78aef49ab4cfbfb26152.zip
Plugin that sends reminders to users
Diffstat (limited to 'bot/Reminder/plugin.py')
-rw-r--r--bot/Reminder/plugin.py110
1 files changed, 110 insertions, 0 deletions
diff --git a/bot/Reminder/plugin.py b/bot/Reminder/plugin.py
new file mode 100644
index 0000000..b7005a0
--- /dev/null
+++ b/bot/Reminder/plugin.py
@@ -0,0 +1,110 @@
+###
+# Copyright (c) 2011, Joachim Bartosik
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+# this list of conditions, and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions, and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of the author of this software nor the name of
+# contributors to this software may be used to endorse or promote products
+# derived from this software without specific prior written consent.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+###
+
+import supybot.utils as utils
+from supybot.commands import *
+import supybot.plugins as plugins
+import supybot.ircutils as ircutils
+import supybot.callbacks as callbacks
+
+import time
+import thread
+import urllib
+import json
+import supybot.ircmsgs as ircmsgs
+
+class Reminder(callbacks.Plugin):
+ def __init__(self, irc):
+ self.__parent = super(Reminder, self)
+ self.__parent.__init__(irc)
+ self.irc = irc
+ self.sleep = 10
+ self.source_url = 'http://localhost:3000/agendas/reminders'
+ self.last_remind_time = time.gmtime(0)
+ self.data = {}
+ thread.start_new_thread(self.reminding_loop, ())
+
+ def get_data(self):
+ try:
+ raw = urllib.urlopen(self.source_url).read()
+ raw = urllib.unquote(raw)
+ self.data = json.loads(raw)
+ except:
+ self.data = {}
+
+ def data_valid(self):
+ if (self.data.__class__ is not dict):
+ return False
+
+ if 'users' not in self.data.keys():
+ return False
+ if 'remind_time' not in self.data.keys():
+ return False
+ if 'message' not in self.data.keys():
+ return False
+
+ if not self.data['users'].__class__ is list:
+ return False
+ if not self.data['remind_time'].__class__ is unicode:
+ return False
+ if not self.data['message'].__class__ is unicode:
+ return False
+
+ return True
+
+ def it_is_time_to_send(self):
+ try:
+ reminder_time = time.strptime(self.data['remind_time'])
+ except:
+ return False
+
+ if reminder_time > self.last_remind_time:
+ self.last_remind_time = reminder_time
+ return True
+ return False
+
+ def reminding_loop(self):
+ while True:
+ time.sleep(self.sleep)
+
+ self.get_data()
+ if not self.data_valid():
+ continue
+ if not self.it_is_time_to_send():
+ continue
+
+ msg = self.data['message']
+
+ print msg
+ for nick in self.data['users']:
+ print nick
+ self.irc.sendMsg(ircmsgs.privmsg(str(nick), str(msg)))
+
+Class = Reminder