You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
3.1 KiB
102 lines
3.1 KiB
import brathuhn, datetime, time
|
|
from StringIO import StringIO
|
|
|
|
from persistent import PersistentContainer
|
|
import config
|
|
pcontainer = PersistentContainer(__name__,config.PCACHE)
|
|
|
|
if not "vote_pending" in pcontainer:
|
|
pcontainer["vote_pending"] = False
|
|
|
|
|
|
def new_vote(args):
|
|
if pcontainer["vote_pending"]:
|
|
brathuhn.sendMsg(brathuhn.ROOM,"There's already a voting going on!",'groupchat')
|
|
return
|
|
|
|
#args[0] = "!vote", args[1] = new, args[2] = topic, args[3...n] = options
|
|
pcontainer["topic"] = args[2]
|
|
pcontainer["votes"] = dict()
|
|
tmp = dict()
|
|
for i in args[3:]:
|
|
tmp[i] = 0
|
|
pcontainer["options"] = tmp
|
|
|
|
pcontainer["vote_pending"] = True
|
|
brathuhn.sendMsg(brathuhn.ROOM,'Hear, hear folks of %s! Thou\'ve been called to a voting on "%s".' % (brathuhn.ROOM, args[2]),'groupchat' )
|
|
|
|
def attend_vote( mfrom ,args):
|
|
#args[0] = "!vote", args[1] = attend, args[2] = option
|
|
if not pcontainer["vote_pending"]:
|
|
brathuhn.sendMsg(brathuhn.ROOM,"There is no vote at the moment.",'groupchat')
|
|
return
|
|
if mfrom in pcontainer["votes"]:
|
|
brathuhn.sendMsg(brathuhn.ROOM,"You already voted!",'groupchat')
|
|
return
|
|
|
|
tmp = pcontainer["options"]
|
|
if not args[2] in tmp:
|
|
brathuhn.sendMsg(brathuhn.ROOM,'I don\'t understand your option!','groupchat')
|
|
return
|
|
tmp[args[2]] += 1
|
|
pcontainer["options"] = tmp
|
|
|
|
tmp = pcontainer["votes"]
|
|
tmp[mfrom] = True
|
|
pcontainer["votes"] = tmp
|
|
|
|
brathuhn.sendMsg(brathuhn.ROOM,'Thank you for your vote!','groupchat')
|
|
|
|
|
|
def vote_statistics():
|
|
if not pcontainer["vote_pending"]:
|
|
brathuhn.sendMsg(brathuhn.ROOM,"There is no vote at the moment.",'groupchat')
|
|
return
|
|
tmp = pcontainer["options"]
|
|
|
|
brathuhn.sendMsg(brathuhn.ROOM, 'There is a vote on "'+pcontainer["topic"]+'"','groupchat' )
|
|
brathuhn.sendMsg(brathuhn.ROOM, 'Votes so far:','groupchat' )
|
|
for k in tmp:
|
|
brathuhn.sendMsg(brathuhn.ROOM,' %s: %d' % (k, tmp[k]),'groupchat' )
|
|
|
|
def end():
|
|
vote_statistics()
|
|
pcontainer["topic"] = None
|
|
pcontainer["options"] = None
|
|
pcontainer["vote_pending"] = False
|
|
|
|
def usage(args):
|
|
brathuhn.sendMsg(brathuhn.ROOM,"Usage: "+args[0]+" (new topic option1 option2 ... option_n|attend num|show|end)",'groupchat')
|
|
|
|
def status_logger(mfrom,msg,status):
|
|
if pcontainer["vote_pending"] and status==brathuhn.STATUS_RENAME and mfrom.getResource() in pcontainer["votes"]:
|
|
tmp = pcontainer["votes"]
|
|
tmp[msg.getNick()] = tmp[mfrom.getResource()]
|
|
del tmp[mfrom.getResource()]
|
|
pcontainer["votes"] = tmp
|
|
brathuhn.sendMsg(brathuhn.ROOM,"%s, the vote comissioner is watching you!" % msg.getNick() ,'groupchat' )
|
|
|
|
def vote(msg,args):
|
|
if len(args)<2:
|
|
return usage(args)
|
|
if args[1] == "new":
|
|
if len(args)<5:
|
|
return usage(args)
|
|
new_vote(args)
|
|
elif args[1] == "attend":
|
|
if len(args)!=3:
|
|
return usage(args)
|
|
attend_vote( unicode(msg.getFrom().getResource()) ,args)
|
|
elif args[1] == "show":
|
|
if len(args)!=2:
|
|
return usage(args)
|
|
vote_statistics()
|
|
elif args[1] == "end":
|
|
if len(args)!=2:
|
|
return usage(args)
|
|
end()
|
|
else:
|
|
return usage(args)
|
|
|
|
brathuhn.addCommand("vote","Usage: !vote (new option1 option2 ... option_n|attend num|show|stats)",vote)
|
|
brathuhn.addStatusListener(status_logger)
|
|
|