Beispiel #1
0
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)
Beispiel #2
0
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!!!")
Beispiel #4
0
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]
Beispiel #5
0
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)