示例#1
0
文件: fake_irc.py 项目: nsavch/xanmel
def unpack_command(msg):
    prefix, command, params = split_line(msg.strip())
    command = synonym(command)
    kwargs = {}

    if command == 'USER':
        kwargs['user'] = params[0]
    else:
        command, kwargs = orig_unpack_command(msg)
    return command, kwargs
示例#2
0
def test_synonym():
    ''' numeric -> string '''
    # Defined commands
    assert synonym("001") == synonym("RPL_WELCOME") == "RPL_WELCOME"
    # Unkown, even impossible commands
    assert synonym("!@#test") == synonym("!@#TEST") == "!@#TEST"
示例#3
0
def test_synonym():
    """ numeric -> string """
    # Defined commands
    assert synonym("001") == synonym("RPL_WELCOME") == "RPL_WELCOME"
    # Unknown, even impossible commands
    assert synonym("!@#test") == synonym("!@#TEST") == "!@#TEST"
示例#4
0
def unpack_command(msg):
    prefix, command, params = unpack.split_line(msg.strip())
    command = unpack.synonym(command)
    kwargs = {}  # type: Dict[str, Any]
    if command in ["PING", "PONG", "ERR_NOMOTD"]:
        kwargs["message"] = params[-1]

    elif command in ["PRIVMSG", "NOTICE", "WHISPER"]:
        unpack.nickmask(prefix, kwargs)
        kwargs["target"] = params[0]
        kwargs["message"] = params[-1]

    elif command in ["JOIN"]:
        unpack.nickmask(prefix, kwargs)
        kwargs["channel"] = params[0]

    elif command in ["NICK"]:
        unpack.nickmask(prefix, kwargs)
        kwargs["new_nick"] = params[0]

    elif command in ["RPL_NAMREPLY"]:
        kwargs["target"] = params[0]
        if len(params) > 3:
            kwargs["channel_type"] = params[1]
        else:
            kwargs["channel_type"] = None
        kwargs["channel"] = params[-2]
        kwargs["users"] = params[-1].split(" ")

    elif command in ["RPL_WHOREPLY"]:
        """ 352 RPL_WHOREPLY
              <channel> <user> <host> <server> <nick>
              ( "H" / "G" > ["*"] [ ( "@" / "+" ) ]
              :<hopcount> <real name>"
        """
        (kwargs["target"], kwargs["channel"], kwargs["user"], kwargs["host"],
         kwargs["server"], kwargs["nick"], kwargs["hg_code"]) = params[0:7]
        hc, kwargs["real_name"] = params[-1].split(" ", 1)
        kwargs["hopcount"] = int(hc)

    elif command in ["RPL_ENDOFWHO"]:
        kwargs["name"] = params[0]
        kwargs["message"] = params[1]

    elif command in ["QUIT"]:
        unpack.nickmask(prefix, kwargs)
        if params:
            kwargs["message"] = params[0]
        else:
            kwargs["message"] = ""

    elif command in ["PART"]:
        unpack.nickmask(prefix, kwargs)
        kwargs["channel"] = params[0]
        if len(params) > 1:
            kwargs["message"] = params[-1]
        else:
            kwargs["message"] = ""

    elif command in ["INVITE"]:
        unpack.nickmask(prefix, kwargs)
        kwargs["target"] = params[0]
        kwargs["channel"] = params[1]

    elif command in ["RPL_TOPIC", "RPL_NOTOPIC", "RPL_ENDOFNAMES"]:
        kwargs["channel"] = params[1]
        kwargs["message"] = params[2]

    elif command in [
            "RPL_MOTDSTART", "RPL_MOTD", "RPL_ENDOFMOTD", "RPL_WELCOME",
            "RPL_YOURHOST", "RPL_CREATED", "RPL_LUSERCLIENT", "RPL_LUSERME"
    ]:
        kwargs["message"] = params[-1]

    elif command in ["RPL_LUSEROP", "RPL_LUSERUNKNOWN", "RPL_LUSERCHANNELS"]:
        kwargs["count"] = int(params[1])
        if len(params) > 2:
            kwargs["message"] = params[-1]
        else:
            kwargs["message"] = ""

    elif command in ["RPL_MYINFO", "RPL_BOUNCE"]:
        kwargs["info"] = params[1:-1]
        kwargs["message"] = params[-1]

    elif command in ["TOPIC"]:
        kwargs["channel"] = params[0]
        if len(params) > 1:
            kwargs["message"] = params[1]
        else:
            kwargs["message"] = ""

    elif command in ["MODE"]:
        unpack.nickmask(prefix, kwargs)
        if params[0][0] in "&#!+":
            command = "CHANNELMODE"
            kwargs["channel"] = params[0]
            kwargs["modes"] = params[1]
            if len(params) > 2:
                kwargs["params"] = params[2:]
            else:
                kwargs["params"] = []
        else:
            command = "USERMODE"
            kwargs["nick"] = params[0]
            kwargs["modes"] = params[1]

    elif command in ["CLEARCHAT"]:
        kwargs['channel'] = params[0]
        kwargs['banned_user'] = params[1] if len(params) >= 2 else None

    elif command in ["USERNOTICE"]:
        kwargs['channel'] = params[0]
        kwargs['message'] = params[1].strip() if len(params) >= 2 else None

    else:
        raise ValueError("Unknown command '{}'".format(command))

    return command, kwargs