aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetteri Räty <petsku@petteriraty.eu>2011-06-25 14:52:19 +0300
committerPetteri Räty <petsku@petteriraty.eu>2011-06-25 14:52:19 +0300
commiteab5375bf3829daa62fa79f16791bec78ec22257 (patch)
tree2d20813439080035865a93fd425c7c074243a6ba /bot/ircmeeting/agenda.py
parentAdd #changeitem <no> command to MeetBot (diff)
parentBot receives reminders from webapp (diff)
downloadcouncil-webapp-eab5375bf3829daa62fa79f16791bec78ec22257.tar.gz
council-webapp-eab5375bf3829daa62fa79f16791bec78ec22257.tar.bz2
council-webapp-eab5375bf3829daa62fa79f16791bec78ec22257.zip
Merge remote-tracking branch 'github/time_limit'
Conflicts: bot/tests/run_test.py
Diffstat (limited to 'bot/ircmeeting/agenda.py')
-rw-r--r--bot/ircmeeting/agenda.py56
1 files changed, 52 insertions, 4 deletions
diff --git a/bot/ircmeeting/agenda.py b/bot/ircmeeting/agenda.py
index af03c3a..8b9650c 100644
--- a/bot/ircmeeting/agenda.py
+++ b/bot/ircmeeting/agenda.py
@@ -1,7 +1,15 @@
import json
+import threading
import urllib
import re
+class MessageSender:
+ def __init__(self, irc, message):
+ self.irc = irc
+ self.message = message
+ def send_message(self):
+ self.irc.reply(self.message)
+
class Agenda(object):
# Messages
@@ -18,6 +26,10 @@ class Agenda(object):
not_a_number_msg = "Your choice was not recognized as a number. Please retry."
out_of_range_msg = "Your choice was out of range!"
vote_confirm_msg = "You voted for #{} - {}"
+ timelimit_added_msg = 'Added "{}" reminder in {}:{}'
+ timelimit_list_msg = 'Set reminders: "{}"'
+ timelimit_removed_msg = 'Reminder "{}" removed'
+ timelimit_missing_msg = 'No such reminder "{}"'
# Internal
_voters = []
@@ -28,6 +40,7 @@ class Agenda(object):
def __init__(self, conf):
self.conf = conf
+ self.reminders = {}
def get_agenda_item(self):
if not self.conf.manage_agenda:
@@ -37,24 +50,36 @@ class Agenda(object):
else:
return self.empty_agenda_msg
- def next_agenda_item(self):
+ def _swich_agenda_item_to(self, new_item, irc):
+ self._current_item = new_item
+ for reminder in self.reminders.values():
+ reminder.cancel()
+ self.reminders = {}
+ for line in self._agenda[self._current_item][2].split('\n'):
+ match = re.match( '([0-9]+):([0-9]+) (.*)', line)
+ if match:
+ self.add_timelimit(int(match.group(1)), int(match.group(2)),
+ match.group(3), irc)
+ self._agenda[self._current_item][2] = ''
+
+ def next_agenda_item(self, irc):
if not self.conf.manage_agenda:
return('')
if self._vote_open:
return self.voting_open_so_item_not_changed_msg
else:
if (self._current_item + 1) < len(self._agenda):
- self._current_item += 1
+ self._swich_agenda_item_to(self._current_item + 1, irc)
return(self.get_agenda_item())
- def prev_agenda_item(self):
+ def prev_agenda_item(self, irc):
if not self.conf.manage_agenda:
return('')
if self._vote_open:
return self.voting_open_so_item_not_changed_msg
else:
if self._current_item > 0:
- self._current_item -= 1
+ self._swich_agenda_item_to(self._current_item - 1, irc)
return(self.get_agenda_item())
def start_vote(self):
@@ -169,6 +194,29 @@ class Agenda(object):
option = self._agenda[self._current_item][1].pop(opt)
return str.format(self.removed_option_msg, str(opt), option)
+ def add_timelimit(self, minutes, seconds, message, irc):
+ sender = MessageSender(irc, message)
+ reminder = (threading.Timer(60*minutes + seconds, sender.send_message))
+ self.reminders[message] = reminder
+ reminder.start()
+ result = str.format(self.timelimit_added_msg, message, minutes, seconds)
+ return(result)
+
+ def list_timielimits(self):
+ keys = self.reminders.keys()
+ keys_str = '", "'.join(keys)
+ result = str.format(self.timelimit_list_msg, keys_str)
+ return(result)
+
+ def remove_timelimit(self, message):
+ if message in self.reminders:
+ timer = self.reminders.pop(message)
+ timer.cancel()
+ result = str.format(self.timelimit_removed_msg, message)
+ else:
+ result = str.format(self.timelimit_missing_msg, message)
+ return(result)
+
def post_result(self):
if not self.conf.manage_agenda:
return('')