diff --git a/irc/commands/rights.py b/irc/commands/rights.py new file mode 100644 index 0000000..1ec5489 --- /dev/null +++ b/irc/commands/rights.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- + +""" +Retrieve a list of user rights for a given username via the API. +""" + +import json +import urllib + +from irc.classes import BaseCommand + +class Rights(BaseCommand): + def get_hooks(self): + return ["msg"] + + def get_help(self, command): + return "Retrieve a list of rights for a given username." + + def check(self, data): + if data.is_command and data.command in ["rights", "groups", "permissions", "privileges"]: + return True + return False + + def process(self, data): + if not data.args: + self.connection.reply(data, "what user do you want me to look up?") + return + + username = ''.join(data.args) + rights = self.get_rights(username) + if rights: + self.connection.reply(data, "the rights for user \x0302{0}\x0301 are {1}.".format(username, ', '.join(rights))) + else: + self.connection.reply(data, "the user x0302{0}\x0301 has no rights, or does not exist.".format(username)) + + def get_rights(self, username): + params = {'action': 'query', 'format': 'json', 'list': 'users', 'usprop': 'groups'} + params['ususers'] = username + data = urllib.urlencode(params) + raw = urllib.urlopen("http://en.wikipedia.org/w/api.php", data).read() + res = json.loads(raw) + try: + rights = res['query']['users'][0]['groups'] + except KeyError: # 'groups' not found, meaning the user does not exist + return None + try: + rights.remove("*") # remove the implicit '*' group given to everyone + except ValueError: # I don't expect this to happen, but if it does, be prepared + pass + return rights