From 738a353c5231e8488a349cfb0a61fcab92db4772 Mon Sep 17 00:00:00 2001 From: jesopo Date: Mon, 17 Jun 2019 16:36:48 +0100 Subject: [PATCH] support recalling results of old votes --- modules/vote.py | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/modules/vote.py b/modules/vote.py index 222f36ef..f7721270 100644 --- a/modules/vote.py +++ b/modules/vote.py @@ -11,15 +11,24 @@ class Module(ModuleManager.BaseModule): def _del_vote(self, channel): channel.del_setting("vote") + def _add_archive_vote(self, channel, vote, id): + channel.set_setting("vote-%s" % id, vote) + def _get_archive_vote(self, channel, id): + return channel.get_setting("vote-%s" % id, None) + def _random_id(self): return binascii.hexlify(os.urandom(4)).decode("ascii") def _archive_vote(self, channel): vote = self._get_vote(channel) vote_id = self._random_id() - channel.set_setting("vote-%s" % vote_id, vote) + self._add_archive_vote(channel, vote, vote_id) self._del_vote(channel) return vote_id + def _format_vote(self, vote): + return "%s (%s yes, %s no)" % (vote["description"], len(vote["yes"]), + len(vote["no"])) + def _cast_vote(self, channel, user, yes): vote = self._get_vote(channel) key = "yes" if yes else "no" @@ -62,9 +71,8 @@ class Module(ModuleManager.BaseModule): event["stderr"].write(STR_NOVOTE) else: vote_id = self._archive_vote(event["target"]) - event["stdout"].write("Vote %s ended: %s (%s yes, %s no)" % - (vote_id, vote["description"], len(vote["yes"]), - len(vote["no"]))) + event["stdout"].write("Vote %s ended: %s" % + (vote_id, self._format_vote(vote))) @utils.hook("received.command.vote", channel_only=True) def vote(self, event): @@ -77,8 +85,7 @@ class Module(ModuleManager.BaseModule): raise utils.EventError(STR_NOVOTE) if not event["args"]: - event["stdout"].write("Current vote: %s (%s yes, %s no)" % - (vote["description"], len(vote["yes"]), len(vote["no"]))) + event["stdout"].write("Current vote: %s)" % self._format_vote(vote)) else: choice = event["args_split"][0].lower() if not choice in ["yes", "no"]: @@ -90,3 +97,18 @@ class Module(ModuleManager.BaseModule): else: event["stderr"].write("%s: you have already voted." % event["user"].nickname) + + @utils.hook("received.command.getvote", min_args=1) + def get_vote(self, event): + """ + :help: Show stats for a previous vote + :usage: + """ + vote_id = event["args_split"][0].lower() + vote = self._get_archive_vote(event["target"], vote_id) + + if vote == None: + event["stderr"].write("Unknown vote '%s'" % vote_id) + else: + event["stdout"].write("Vote %s: %s" % (vote_id, + self._format_vote(vote)))