diff options
| author | 2016-04-13 14:55:38 +0100 | |
|---|---|---|
| committer | 2016-04-13 14:55:38 +0100 | |
| commit | 390eff4c2b1904867f3a10f6c283b326bd043732 (patch) | |
| tree | cf4b83e4b215377cdf86f3034b8b39231f6eac6c | |
| parent | fixed a part of the reconnection logic. (diff) | |
added experimental module to track what nicknames are actually aliases for other nicknames.
| -rw-r--r-- | modules/nickname_aliases.py | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/modules/nickname_aliases.py b/modules/nickname_aliases.py new file mode 100644 index 00000000..a6b40333 --- /dev/null +++ b/modules/nickname_aliases.py @@ -0,0 +1,84 @@ +import types, json + +def get_target(user): + return user.alias or user.nickname +def set_setting(user, setting, value): + target = get_target(user) + user.bot.database.set_user_setting(user.server.id, target, + setting, value) +def get_setting(user, setting, default=None): + target = get_target(user) + return user.bot.database.get_user_setting(user.server.id, + target, setting, default) +def find_settings(user, pattern, default=[]): + target = get_target(user) + return user.bot.databse.find_user_settings(user.server.id, + target, pattern, default) +def del_setting(user, setting): + target = get_target(user) + user.bot.database.del_user_setting(user.server.id, target, + setting) + +class Module(object): + _name = "Aliases" + def __init__(self, bot): + self.bot = bot + bot.events.on("new").on("user").hook(self.new_user) + bot.events.on("received").on("nick").hook(self.nickname_change) + bot.events.on("received").on("command").on("alias").hook( + self.alias) + bot.events.on("received").on("command").on("mainalias").hook( + self.main_alias) + + def new_user(self, event): + method_type = types.MethodType + user = event["user"] + event["user"].alias = user.get_setting("alias") + event["user"].set_setting = method_type(set_setting, user) + event["user"].get_setting = method_type(get_setting, user) + event["user"].find_settings = method_type(find_settings, user) + event["user"].del_setting = method_type(del_setting, user) + + def nickname_change(self, event): + old_nickname = event["old_nickname"] + new_nickname = event["new_nickname"] + if not event["user"].alias: + event["user"].set_setting("alias", old_nickname.lower()) + event["user"].alias = old_nickname.lower() + elif event["user"].nickname_lower == event["user"].alias: + event["user"].alias = None + + def _get_aliases(self, target, server): + return self.bot.database.cursor().execute("""SELECT nickname + FROM user_settings WHERE setting='alias' AND value=? + AND server_id=?""", [json.dumps(target.lower()), + server.id]).fetchall() + + def alias(self, event): + if event["args"]: + target = event["args_split"][0] + else: + target = event["user"].nickname + temp_user = event["server"].get_user(target) + if temp_user.get_setting("alias"): + target = temp_user.get_setting("alias") + aliases = self._get_aliases(target, event["server"]) + if any(aliases): + event["stdout"].write("Aliases for %s: %s" % (target, + ", ".join([a[0] for a in aliases]))) + else: + event["stderr"].write("%s has no aliases" % target) + + def main_alias(self, event): + if event["user"].alias: + aliases = self._get_aliases(event["user"].alias, event["server"]) + new_alias = event["user"].nickname_lower() + event["user"].del_setting("alias") + if any(aliases): + for nickname in aliases: + event["server"].get_user(nickname).set_setting( + "alias", alias) + event["stdout"].write("This nickname has been set as the " + "main alias for it's group of aliases") + else: + event["stderr"].write("This nickname is already a main alias") |
