diff --git a/modules/ignore.py b/modules/ignore.py index 53c2d633..823011ae 100644 --- a/modules/ignore.py +++ b/modules/ignore.py @@ -8,20 +8,35 @@ class Module(ModuleManager.BaseModule): return user.get_setting("ignore", False) def _user_command_ignored(self, user, command): return user.get_setting("ignore-%s" % command, False) + def _user_channel_ignored(self, channel, user): + return channel.get_user_setting(user.get_id(), "ignore", False) def _server_command_ignored(self, server, command): return server.get_setting("ignore-%s" % command, False) + def _is_command_ignored(self, server, user, command): + if self._user_command_ignored(user, command): + return True + elif self._server_command_ignored(server, command): + return True + @utils.hook("received.message.private") @utils.hook("received.message.channel") def message(self, event): if self._user_ignored(event["user"]): event.eat() + elif event["is_channel"] and self._user_channel_ignored(event["target"], + event["user"]): + event.eat() @utils.hook("preprocess.command") def preprocess_command(self, event): - if self._user_command_ignored(event["user"], event["command"]): + if self._user_ignored(event["user"]): return utils.consts.PERMISSION_HARD_FAIL - elif self._server_command_ignored(event["server"], event["command"]): + elif event["is_channel"] and self._user_channel_ignored(event["target"], + event["user"]): + return utils.consts.PERMISSION_HARD_FAIL + elif self._is_command_ignored(event["server"], event["user"], + event["command"]): return utils.consts.PERMISSION_HARD_FAIL @utils.hook("received.command.ignore", min_args=1) @@ -70,6 +85,36 @@ class Module(ModuleManager.BaseModule): event["stdout"].write("Removed ignore for '%s'%s" % (user.nickname, for_str)) + @utils.hook("received.command.cignore", + help="Ignore a user in this channel") + @utils.hook("received.command.cunignore", + help="Unignore a user in this channel") + @utils.kwarg("channel_only", True) + @utils.kwarg("min_args", 1) + @utils.kwarg("usage", "") + @utils.kwarg("require-mode", "o") + @utils.kwarg("require-access", "cignore") + def cignore(self, event): + remove = event.name == "received.command.cunignore" + + target_user = event["server"].get_user(event["args_split"][0]) + is_ignored = event["target"].get_user_setting(target_user.get_id(), + "ignore", False) + + if remove: + if not is_ignored: + raise utils.EventError("I'm not ignoring %s in this channel" % + target_user.nickname) + event["target"].del_user_setting(target_user.get_id(), "ignore") + event["stdout"].write("Unignored %s" % target_user.nickname) + else: + if is_ignored: + raise utils.EventError("I'm already ignoring %s in this channel" + % target_user.nickname) + event["target"].set_user_setting(target_user.get_id(), "ignore", + True) + event["stdout"].write("Ignoring %s" % target_user.nickname) + @utils.hook("received.command.serverignore", min_args=1) def server_ignore(self, event): """