Skip to content

Instantly share code, notes, and snippets.

@stuxcrystal
Created March 22, 2017 13:19
Show Gist options
  • Save stuxcrystal/27514cb931c2532bfc02ad1d7c959573 to your computer and use it in GitHub Desktop.
Save stuxcrystal/27514cb931c2532bfc02ad1d7c959573 to your computer and use it in GitHub Desktop.
Refactored Bot Code
class Member(dict):
def __init__(self, name, *args, **kwargs):
super(Member, self).__init__(**kwargs)
self.name = name
class MemberStore(object):
def __init__(self):
self.members = {}
self.aliases = {}
def register_alias(self, user, alias):
self.aliases[alias] = user
def get_user(self, name):
if name in self.members:
return self.members[name]
if name in self.aliases:
return self.get_user(self.aliases[name])
self.members[name] = Member(name)
return self.members[name]
_members = MemberStore()
_commands = {}
def _command(name):
def _decorator(func):
_commands[name] = func
return func
return _decorator
@_command("faggot")
def faggot(user):
global _members
user = _members.get_user(user)
counter = user.get('faggot', 0) + 1
user['faggot'] = counter
return f"Der Benutzer {user} hat nun {counter} fgts."
@_command("faggot")
def alias(line):
global _members
user, alias = line.split(" ")
_members.register_alias(user, alias)
return f"Der Benutzer {user} hat nun den Alias {alias}"
def parse_command(line):
cmd, *data = line.split(" ", 1)
if len(data):
data = data[0]
else:
data = ""
return cmd, data
async def execute_command(client, message, str):
cmd, data = parse_command(str)
result = _commands[cmd](data)
return await client.send_message(message.channel, result)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment