diff options
author | Joachim Filip Ignacy Bartosik <jbartosik@gmail.com> | 2011-05-23 13:17:40 +0200 |
---|---|---|
committer | Joachim Filip Ignacy Bartosik <jbartosik@gmail.com> | 2011-06-03 19:17:48 +0200 |
commit | d93c2e59b3e1b0a077c34ad9f560b79a9f1670df (patch) | |
tree | 1670c7654a56c33ac5b5c4b9688b50d3b7024e0a /bot/ircmeeting/agenda.py | |
parent | Add *.pyc to .gitignore (diff) | |
download | council-webapp-d93c2e59b3e1b0a077c34ad9f560b79a9f1670df.tar.gz council-webapp-d93c2e59b3e1b0a077c34ad9f560b79a9f1670df.tar.bz2 council-webapp-d93c2e59b3e1b0a077c34ad9f560b79a9f1670df.zip |
Bot obtains voters, agenda items and voting options lists from webapp
Diffstat (limited to 'bot/ircmeeting/agenda.py')
-rw-r--r-- | bot/ircmeeting/agenda.py | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/bot/ircmeeting/agenda.py b/bot/ircmeeting/agenda.py new file mode 100644 index 0000000..7ee9beb --- /dev/null +++ b/bot/ircmeeting/agenda.py @@ -0,0 +1,91 @@ +import json +import urllib + +class Agenda(object): + + # Messages + empty_agenda_msg = "Agenda is empty so I can't help you manage meeting (and voting)." + current_item_msg = "Current agenda item is {}." + voting_already_open_msg = "Voting is already open. You can end it with #endvote." + voting_open_msg = "Voting started. Your choices are: {} Vote #vote <option number>.\n End voting with #endvote." + voting_close_msg = "Voting is closed." + voting_already_closed_msg = "Voting is already closed. You can start it with #startvote." + voting_open_so_item_not_changed_msg = "Voting is currently open so I didn't change item. Please #endvote first" + can_not_vote_msg = "You can not vote. Only {} can vote" + not_a_number_msg = "Your vote was not recognized as a number. Please retry." + out_of_range_msg = "Your vote was out of range!" + vote_confirm_msg = "You voted for #{} - {}" + + # Internal + _voters = [] + _votes = [] + _agenda = [] + _current_item = 0 + _vote_open = False + + def __init__(self, conf): + self.conf = conf + + def get_agenda_item(self): + if self._current_item < len(self._agenda): + return str.format(self.current_item_msg, self._agenda[self._current_item][0]) + else: + return self.empty_agenda_msg + + def next_agenda_item(self): + if self._vote_open: + return voting_open_so_item_not_changed_msg + else: + if (self._current_item + 1) < len(self._agenda): + self._current_item += 1 + return(self.get_agenda_item()) + + def prev_agenda_item(self): + if self._vote_open: + return voting_open_so_item_not_changed_msg + else: + if self._current_item > 0: + self._current_item -= 1 + return(self.get_agenda_item()) + + def start_vote(self): + if self._vote_open: + return self.voting_already_open_msg + self._vote_open = True + options = "\n" + for i in range(len(self._agenda[self._current_item][1])): + options += str.format("{}. {}\n", i, self._agenda[self._current_item][i]) + return str.format(self.voting_open_msg, options) + + def end_vote(self): + if self._vote_open: + self._vote_open = False + return voting_already_closed_msg + return voting_close_msg + + def get_data(self): + self._voters = self._get_json(self.conf.voters_url) + self._agenda = self._get_json(self.conf.agenda_url) + self._votes = { } + for i in self._agenda: + self._votes[i[0]] = { } + + def vote(self, nick, line): + if not nick in self._voters: + return str.format(self.can_not_vote_msg, ", ".join(self._voters)) + if not line.isdigit(): + return self.not_a_number_msg + + opt = int(line) + + if opt < 0 or opt >= len(self._agenda[self._current_item][1]): + return self.out_of_range_msg + + self._votes[self._agenda[self._current_item][0]][nick] = self._agenda[self._current_item][1][opt] + return str.format(self.vote_confirm_msg, opt, self._agenda[self._current_item][opt]) + + def _get_json(self, url): + str = urllib.urlopen(url).read() + str = urllib.unquote(str) + result = json.loads(str) + return result |