diff options
Diffstat (limited to 'Reaktor/titlebot/commands')
| -rwxr-xr-x | Reaktor/titlebot/commands/highest | 30 | ||||
| -rwxr-xr-x | Reaktor/titlebot/commands/list | 4 | ||||
| -rwxr-xr-x | Reaktor/titlebot/commands/undo | 10 | ||||
| -rwxr-xr-x | Reaktor/titlebot/commands/up | 18 | 
4 files changed, 51 insertions, 11 deletions
| diff --git a/Reaktor/titlebot/commands/highest b/Reaktor/titlebot/commands/highest new file mode 100755 index 00000000..d0408ac0 --- /dev/null +++ b/Reaktor/titlebot/commands/highest @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 +import json +from os import environ +import sys +import os +import poll + +f = 'suggestions.json' +title=" ".join(sys.argv[1:]) +db = poll.load_db(f) +# only print the last N values (default 1) +limit = int(sys.argv[1]) if len(sys.argv) > 1 else 1 +num =  0 +last_vote = 9001 +# stolen from http://stackoverflow.com/questions/9647202/ordinal-numbers-replacement +suffixes = ["th", "st", "nd", "rd", ] + ["th"] * 16 + +for entry in poll.sort_by_votes(db): +    # if two entries have the same number of upvotes, do not increment the rank +    current_vote = sum(entry['votes'].values()) +    if current_vote < last_vote: +        num = num + 1 +    last_vote = current_vote +    # exit if we are above the limit +    if num > limit: +        sys.exit(0) +     +    suffixed_num = str(num) + suffixes[num % 100] +    print("%s: '%s' (%d votes)" % +            (suffixed_num,entry['title'],sum(entry['votes'].values()))) diff --git a/Reaktor/titlebot/commands/list b/Reaktor/titlebot/commands/list index 3a29919a..cee4b8a8 100755 --- a/Reaktor/titlebot/commands/list +++ b/Reaktor/titlebot/commands/list @@ -17,11 +17,11 @@ if len(sys.argv) > 1 and ("-h" in sys.argv[1]  or "usage" == sys.argv[1]):  if len(sys.argv) > 1 and ("votes" in sys.argv[1]):      use = poll.sort_by_votes(db)  elif len(sys.argv) > 1 and ("age" in sys.argv[1]) or len(sys.argv) == 1: -    pass +    use = db  else:      print("unknown sorting method")      sys.exit(1) -for entry in poll.sort_by_votes(db): +for entry in use:      print("#%d %s (votes: %d)" %              (db.index(entry),entry['title'],sum(entry['votes'].values()))) diff --git a/Reaktor/titlebot/commands/undo b/Reaktor/titlebot/commands/undo index bebd57a3..a66de67f 100755 --- a/Reaktor/titlebot/commands/undo +++ b/Reaktor/titlebot/commands/undo @@ -16,12 +16,16 @@ except:      undos vote of one or more entries based on .list""")      sys.exit(1)  voter = environ['_prefix'] +voter_name = environ['_from']  for vote in votes:      try:          vote = int(vote) -        del(db[vote]['votes'][voter] ) -        print("undid vote by %s for #%d" %(environ['_from'],vote)) +        if not voter in db[vote]['votes']: +            print("%s, you never voted for '%s'!"%(voter_name,db[vote]['title'])) +        else: +            del(db[vote]['votes'][voter] ) +            print("%s undid vote for '%s'" %(voter_name,db[vote]['title'] ))      except: -        print("undo voting for #%s failed" %vote) +        print("%s undo voting for #%d failed" %(voter_name,vote))  poll.save_db(f,db) diff --git a/Reaktor/titlebot/commands/up b/Reaktor/titlebot/commands/up index c9de1223..0a48bdb0 100755 --- a/Reaktor/titlebot/commands/up +++ b/Reaktor/titlebot/commands/up @@ -9,19 +9,25 @@ import poll  f = 'suggestions.json'  db = poll.load_db(f)  votes = [] -try: -    votes = sys.argv[1:] -except: +votes = sys.argv[1:] +if not votes:      print("""usage: up number (...)      upvotes one or more entries based on .list""")      sys.exit(1)  voter = environ['_prefix'] +voter_name =environ['_from']  for vote in votes:      try:          vote = int(vote) -        db[vote]['votes'][voter] = 1 +        if vote < 0: +            raise Exception() +        if voter in db[vote]['votes']: +            print("%s, you already have voted for '%s'"%(voter_name,db[vote]['title']) ) +        else: +            db[vote]['votes'][voter] = 1 +            print("%s voted for '%s'"%(voter_name,db[vote]['title']))      except: -        print("voting for #%s failed" %vote) -print("Thanks for your votes %s"%environ['_from']) +        print("%s, voting for #%s failed" %(voter_name,vote)) +  poll.save_db(f,db) | 
