| @@ -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 | |||||