diff options
Diffstat (limited to 'titlebot')
-rwxr-xr-x | titlebot/commands/clear | 12 | ||||
-rwxr-xr-x | titlebot/commands/down | 2 | ||||
-rwxr-xr-x | titlebot/commands/help | 12 | ||||
-rwxr-xr-x | titlebot/commands/highest | 30 | ||||
-rwxr-xr-x | titlebot/commands/list | 27 | ||||
-rwxr-xr-x | titlebot/commands/new | 19 | ||||
-rw-r--r-- | titlebot/commands/poll.py | 23 | ||||
l--------- | titlebot/commands/top | 1 | ||||
-rwxr-xr-x | titlebot/commands/undo | 31 | ||||
-rwxr-xr-x | titlebot/commands/up | 33 | ||||
-rw-r--r-- | titlebot/titlebot.py | 79 |
11 files changed, 0 insertions, 269 deletions
diff --git a/titlebot/commands/clear b/titlebot/commands/clear deleted file mode 100755 index e355819..0000000 --- a/titlebot/commands/clear +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env python3 -import json -from os import environ -import sys -import os -# krebs polling -import poll - -f = 'suggestions.json' -title=" ".join(sys.argv[1:]) -db = poll.save_db(f,[]) -print("cleared database") diff --git a/titlebot/commands/down b/titlebot/commands/down deleted file mode 100755 index 8964382..0000000 --- a/titlebot/commands/down +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -echo "not implemented" diff --git a/titlebot/commands/help b/titlebot/commands/help deleted file mode 100755 index fcc9b53..0000000 --- a/titlebot/commands/help +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -cat <<EOF -BGT Title Poll Bot: - .new TITLE - suggest a new title - .list <(age|votes)> - list all suggestions - .highest <NUM> - lists the NUM highest voted suggestions - .top <NUM> - alias for .highest - .up NUM (NUM ...) - upvote one or more suggestions from .list - .undo NUM (NUM ...) - undo an upvote - .clear - clear the poll (auth required) -EOF - diff --git a/titlebot/commands/highest b/titlebot/commands/highest deleted file mode 100755 index d0408ac..0000000 --- a/titlebot/commands/highest +++ /dev/null @@ -1,30 +0,0 @@ -#!/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/titlebot/commands/list b/titlebot/commands/list deleted file mode 100755 index cee4b8a..0000000 --- a/titlebot/commands/list +++ /dev/null @@ -1,27 +0,0 @@ -#!/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) -if len(sys.argv) > 1 and ("-h" in sys.argv[1] or "usage" == sys.argv[1]): - print("""usage: list <(age|votes)> - sort by age or by votes (default: age) -""") - sys.exit(0) - -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: - use = db -else: - print("unknown sorting method") - sys.exit(1) - -for entry in use: - print("#%d %s (votes: %d)" % - (db.index(entry),entry['title'],sum(entry['votes'].values()))) diff --git a/titlebot/commands/new b/titlebot/commands/new deleted file mode 100755 index 7246a2b..0000000 --- a/titlebot/commands/new +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env python3 -import json -from os import environ -import sys -import os -# krebs polling -import poll - -f = 'suggestions.json' -title=" ".join(sys.argv[1:]) -db = poll.load_db(f) - -suggester = environ['_from'] -if not poll.title_in_db(title,db): - db.append( { 'by': suggester, - 'votes':{},'title': title}) - print("Thank you for your suggestion '%s'!"%environ["_from"]) - print("To vote type '.up %d'"%(len(db)-1)) -poll.save_db(f,db) diff --git a/titlebot/commands/poll.py b/titlebot/commands/poll.py deleted file mode 100644 index 595ab26..0000000 --- a/titlebot/commands/poll.py +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env python -import json -def load_db(f): - try: - with open(f) as fl: - return json.load(fl) - except: - #default db is [] - return [] - -def title_in_db(t,d): - for index,entry in enumerate(d): - if t == entry['title']: - print("Title is already in list.") - print("To vote for this type '.up %d'" %index) - return True - return False -def save_db(f,db): - with open(f,"w") as x: - json.dump(db,x) - -def sort_by_votes(db): - return sorted(db,key=lambda entry:sum(entry['votes'].values()),reverse=True) diff --git a/titlebot/commands/top b/titlebot/commands/top deleted file mode 120000 index 8f25670..0000000 --- a/titlebot/commands/top +++ /dev/null @@ -1 +0,0 @@ -highest
\ No newline at end of file diff --git a/titlebot/commands/undo b/titlebot/commands/undo deleted file mode 100755 index e1b0aba..0000000 --- a/titlebot/commands/undo +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env python3 -import json -from os import environ -import sys -import os -# krebs polling -import poll - -f = 'suggestions.json' -db = poll.load_db(f) -votes = [] -try: - votes = sys.argv[1:] -except: - print("""usage: undo number (...) - undos vote of one or more entries based on .list""") - sys.exit(1) -voter = environ['_prefix'].split("@")[1] -voter_name = environ['_from'] -for vote in votes: - try: - vote = int(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("%s undo voting for #%d failed" %(voter_name,vote)) - -poll.save_db(f,db) diff --git a/titlebot/commands/up b/titlebot/commands/up deleted file mode 100755 index 7aff594..0000000 --- a/titlebot/commands/up +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env python3 -import json -from os import environ -import sys -import os -# krebs polling -import poll - -f = 'suggestions.json' -db = poll.load_db(f) -votes = [] -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'].split("@")[1] -voter_name =environ['_from'] -for vote in votes: - try: - vote = int(vote) - 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("%s, voting for #%s failed" %(voter_name,vote)) - -poll.save_db(f,db) diff --git a/titlebot/titlebot.py b/titlebot/titlebot.py deleted file mode 100644 index 325fda5..0000000 --- a/titlebot/titlebot.py +++ /dev/null @@ -1,79 +0,0 @@ -from os import environ,mkdir -from os.path import abspath, expanduser -import re -debug = False - -# CAVEAT name should not contains regex magic -name = 'bgt_titlebot' - -workdir = '/home/titlebot/state' - -try: - mkdir(workdir) -except: pass - -irc_alarm_timeout = 300 -irc_hammer_interval = 10 -irc_kill_timeout = 360 -irc_nickname = name -irc_server = 'irc.freenode.org' -irc_port = 6667 -irc_restart_timeout = 5 -irc_channels = [ - '#binaergewitter' -] -admin_file=workdir+'/admin.lst' -auth_file=workdir+'/auth.lst' - -config_filename = abspath(__file__) - -try: - with open(admin_file,"x"): pass -except: pass - -# me is used, so name cannot kill our patterns below -me = '\\b' + re.escape(name) + '\\b' -me_or_us = '(?:' + me + '|\\*)' - -def default_command(cmd, env=None): - if not env: env = {} - return { - 'capname': cmd, - 'pattern': '^' + me_or_us + ':\\s*' + cmd + '\\s*(?:\\s+(?P<args>.*))?$', - 'argv': [ 'commands/' + cmd ], - 'env': env - } -def titlebot_cmd(cmd): - return { - 'capname': cmd, - 'pattern': '^\\.' + cmd + '\\s*(?:\\s+(?P<args>.*))?$', - 'argv': [ 'titlebot/commands/' + cmd ] } - -public_commands = [ - default_command('caps', env={ - 'config_filename': config_filename - }), - default_command('hello'), - default_command('badcommand'), - default_command('rev'), - default_command('uptime'), - default_command('nocommand'), - titlebot_cmd('list'), - titlebot_cmd('help'), - titlebot_cmd('highest'), - titlebot_cmd('top'), - titlebot_cmd('up'), - titlebot_cmd('new'), - titlebot_cmd('undo'), - titlebot_cmd('down'), - # identify via direct connect - { 'capname': 'identify', - 'pattern': '^identify' + '\\s*(?:\\s+(?P<args>.*))?$', - 'argv' : [ 'commands/identify' ], - 'env':{'config_filename': config_filename}} -] -commands = [ - default_command('reload'), - titlebot_cmd('clear') -] - |