import json from util import hook from fnmatch import fnmatch @hook.sieve def ignore_sieve(bot, input, func, type, args): """ blocks input from ignored channels/hosts """ ignorelist = bot.config["plugins"]["ignore"]["ignored"] mask = input.mask.lower() # don't block input to event hooks if type == "event": return input if ignorelist: for pattern in ignorelist: if pattern.startswith("#") and pattern in ignorelist: if input.command == "PRIVMSG" and input.lastparam[1:] == "unignore": return input else: return None elif fnmatch(mask, pattern): if input.command == "PRIVMSG" and input.lastparam[1:] == "unignore": return input else: return None return input @hook.command(autohelp=False) def ignored(inp, notice=None, bot=None): "ignored -- Lists ignored channels/users." ignorelist = bot.config["plugins"]["ignore"]["ignored"] if ignorelist: notice("Ignored channels/users are: %s" % ", ".join(ignorelist)) else: notice("No masks are currently ignored.") return @hook.command(permissions=["ignore"]) def ignore(inp, notice=None, bot=None, config=None): "ignore -- Makes the bot ignore ." target = inp.lower() ignorelist = bot.config["plugins"]["ignore"]["ignored"] if target in ignorelist: notice("%s is already ignored." % target) else: notice("%s has been ignored." % target) ignorelist.append(target) ignorelist.sort() json.dump(bot.config, open('config', 'w'), sort_keys=True, indent=2) return @hook.command(permissions=["ignore"]) def unignore(inp, notice=None, bot=None, config=None): "unignore -- Makes the bot listen to"\ " ." target = inp.lower() ignorelist = bot.config["plugins"]["ignore"]["ignored"] if target in ignorelist: notice("%s has been unignored." % target) ignorelist.remove(target) ignorelist.sort() json.dump(bot.config, open('config', 'w'), sort_keys=True, indent=2) else: notice("%s is not ignored." % target) return