def mode(irc, event, args): """[<channel>] <modes> Sets <modes> in <channel>. <channel> is only necessary if the command isn't sent in the channel itself. """ try: if utils.is_private(event) or irc.is_channel(args[0]): if args[0] in irc.state["channels"]: channel = args[0] setmodes = utils.split_modes(args[1:]) elif not utils.is_private(event): channel = event.target setmodes = utils.split_modes(args) else: irc.reply(event, utils.gethelp("mode")) return else: channel = event.target setmodes = utils.split_modes(args) except IndexError: irc.reply(event, utils.gethelp("mode")) else: if utils.is_allowed(irc, event.source, channel): already_op = irc.is_opped(irc.get_nick(), channel) if not already_op: setmodes.append("-o {}".format(irc.get_nick())) gotop = utils.getop(irc, channel) if gotop: for modes in utils.unsplit_modes(setmodes): irc.mode(channel, modes)
def on_mode(irc, conn, event): channel = event.target modes = utils.split_modes(event.arguments) for mode in modes: if mode.startswith("+b"): if event.source.nick == irc.get_nick(): continue mask = mode.split()[1] affects = utils.ban_affects(irc, channel, mask) names = irc.state["channels"][channel]["names"] if len(affects) >= len(names) / 2: setmodes = [] bmask = utils.banmask(irc, event.source) setmodes.append("-b {}".format(mask)) baffects = utils.ban_affects(irc, channel, bmask) for nick in baffects: if irc.is_opped(nick, channel): setmodes.append("-o {}".format(nick)) if irc.is_voiced(nick, channel): setmodes.append("-v {}".format(nick)) setmodes.append("+b {}".format(bmask)) already_op = irc.is_opped(irc.get_nick(), channel) gotop = utils.getop(irc, channel) if gotop: for modes in utils.unsplit_modes(setmodes): irc.mode(channel, modes) for nick in baffects: irc.kick(channel, nick) if not already_op: irc.mode(channel, "-o {}".format(irc.get_nick()))
def on_mode(irc, conn, event): modes = utils.split_modes(event.arguments) irc.notice("BWBellairs", str(modes)) if "enforce" in irc.channels[event.target].keys(): for mode in modes: subject = mode.split()[1] mode_type = mode.split()[0] if subject in irc.channels[event.target]["enforce"].keys(): modes_set = irc.channels[event.target]["enforce"][subject] if mode_type[0:2] == "+o" and mode_type[1] in modes_set["unset"]: irc.notice("BWBellairs", "deop him!!!")
def on_channelmodeis(irc, conn, event): message = event.arguments message[0].replace("+", "") modes = utils.split_modes(message[1:]) extra = message[2:] channel = message[0] irc.channels[channel]["modes"] = [] for mode in modes: irc.channels[channel]["modes"].append(mode) if mode.startswith("+k"): irc.channels[channel]["key"] = mode.split()[1]
def on_mode(irc, conn, event): if irc.is_channel(event.target): channel = event.target modes = utils.split_modes(event.arguments) for mode in modes: if mode.startswith("+b"): mask = mode.split()[1] irc.state["channels"][channel]["bans"].append(mask) elif mode.startswith("-b"): mask = mode.split()[1] if mask in irc.state["channels"][channel]["bans"]: irc.state["channels"][channel]["bans"].remove(mask) elif mode.startswith("+q"): mask = mode.split()[1] irc.state["channels"][channel]["quiets"].append(mask) elif mode.startswith("-q"): mask = mode.split()[1] if mask in irc.state["channels"][channel]["quiets"]: irc.state["channels"][channel]["quiets"].remove(mask) elif mode.startswith("+e"): mask = mode.split()[1] irc.state["channels"][channel]["excepts"].append(mask) elif mode.startswith("-e"): mask = mode.split()[1] if mask in irc.state["channels"][channel]["excepts"]: irc.state["channels"][channel]["excepts"].remove(mask) elif mode.startswith("+I"): mask = mode.split()[1] irc.state["channels"][channel]["invites"].append(mask) elif mode.startswith("-I"): mask = mode.split()[1] if mask in irc.state["channels"][channel]["invites"]: irc.state["channels"][channel]["invites"].remove(mask) elif mode.startswith("+k"): key = mode.split()[1] irc.channels[channel]["key"] = key found = False if "modes" in irc.channels[channel].keys(): for iteration, mode2 in enumerate(irc.channels[channel]["modes"]): if mode2.startswith("+k"): irc.channels[channel]["modes"][iteration] = "+k " + key found = True if not found: irc.channels[channel]["modes"].append("+k " + key) elif mode.startswith("-k"): irc.channels[channel]["key"] = "" if "modes" in irc.channels[channel].keys(): for iteration, mode2 in enumerate(irc.channels[channel]["modes"]): if mode2.startswith("+k"): irc.channels[channel]["modes"].pop(iteration) elif mode.startswith("+j"): found = False if "modes" in irc.channels[channel].keys(): for iteration, mode2 in enumerate(irc.channels[channel]["modes"]): if mode2.startswith("+j"): irc.channels[channel]["modes"][iteration] = "+j " + mode.split()[1] found = True if not found: irc.channels[channel]["modes"].append("+j " + mode.split()[1]) elif mode.startswith("-j"): if "modes" in irc.channels[channel].keys(): for iteration, mode2 in enumerate(irc.channels[channel]["modes"]): if mode2.startswith("+j"): irc.channels[channel]["modes"].pop(iteration) elif mode.startswith("+f"): found = False if "modes" in irc.channels[channel].keys(): for iteration, mode2 in enumerate(irc.channels[channel]["modes"]): if mode2.startswith("+f"): irc.channels[channel]["modes"][iteration] = "+f " + mode.split()[1] found = True if not found: irc.channels[channel]["modes"].append("+f " + mode.split()[1]) elif mode.startswith("-f"): if "modes" in irc.channels[channel].keys(): for iteration, mode2 in enumerate(irc.channels[channel]["modes"]): if mode2.startswith("+f"): irc.channels[channel]["modes"].pop(iteration) elif mode.startswith("+l"): found = False if "modes" in irc.channels[channel].keys(): for iteration, mode2 in enumerate(irc.channels[channel]["modes"]): if mode2.startswith("+l"): irc.channels[channel]["modes"][iteration] = "+l " + mode.split()[1] found = True if not found: irc.channels[channel]["modes"].append("+l " + mode.split()[1]) elif mode.startswith("-l"): if "modes" in irc.channels[channel].keys(): for iteration, mode2 in enumerate(irc.channels[channel]["modes"]): if mode2.startswith("+l"): irc.channels[channel]["modes"].pop(iteration) elif mode.startswith("+o"): nick = mode.split()[1] if nick == irc.get_nick(): log.info("Recieved op in {} from {}".format(channel, event.source)) log.info("Syncing {} exempts".format(channel)) irc.mode(channel, "e") log.info("Syncing {} invites".format(channel)) irc.mode(channel, "I") if nick not in irc.state["channels"][channel]["ops"]: irc.state["channels"][channel]["ops"].append(nick) elif mode.startswith("-o"): nick = mode.split()[1] if nick in irc.state["channels"][channel]["ops"]: irc.state["channels"][channel]["ops"].remove(nick) elif mode.startswith("+v"): nick = mode.split()[1] if nick not in irc.state["channels"][channel]["voices"]: irc.state["channels"][channel]["voices"].append(nick) elif mode.startswith("-v"): nick = mode.split()[1] if nick in irc.state["channels"][channel]["voices"]: irc.state["channels"][channel]["voices"].remove(nick)