# -*- 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 \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