All Downloads are FREE. Search and download functionalities are using the official Maven repository.

lt.saltyjuice.dragas.chatty.v3.irc.route.Command.kt Maven / Gradle / Ivy

package lt.saltyjuice.dragas.chatty.v3.irc.route

/**
 * Holds references to particular commands that Routes can implement and listen to.
 *
 * Definitions of particular commands (those not defined by Chatty/IRC in particular)
 * are shamelessly copied from [RFC 2812](https://tools.ietf.org/html/rfc2812)
 *
 * Even though this holds references to both actual commands and response codes, the response codes
 * are still treated as commands by framework.
 */
enum class Command(val value: String)
{
    /**
     * Instructs the router that it should return [PrivateMessageRoute] instead of usual [CommandRoute].
     *
     * Even though you can send a private message to both channel and user, there's a logical
     * difference between sending a private message to user and private message to channel,
     * hence the separation here as well.
     */
    @Deprecated("Use PRIVMSG instead", ReplaceWith("PRIVMSG"))
    PRIVATE_MESSAGE("private"),

    /**
     * Instructs a router that it should return [ChannelMessageRoute] instead of usual [CommandRoute].
     *
     * @see [PRIVATE_MESSAGE]
     */
    @Deprecated("Use PRIVMSG instead", ReplaceWith("PRIVMSG"))
    CHANNEL_MESSAGE("channel"),

    /* ---- Chatty/IRC specific definitions end ---- */

    /**
     * Command: PRIVMSG
     *
     * Parameters: ` `
     *
     * PRIVMSG is used to send private messages between users, as well as to
     * send messages to channels. `` is usually the nickname of
     * the recipient of the message, or a channel name.
     *
     * The `` parameter may also be a host mask `(#)` or server
     * mask `($)`. In both cases the server will only send the PRIVMSG
     * to those who have a server or host matching the mask. The mask MUST
     * have at least 1 (one) "." in it and no wildcards following the last
     * ".". This requirement exists to prevent people sending messages to
     * "#*" or "$*", which would broadcast to all users. Wildcards are the
     * '*' and '?' characters. This extension to the PRIVMSG command is
     * only available to operators.
     *
     * Numeric Replies:
     *
     * * [ERR_NORECIPIENT]
     * * [ERR_NOTEXTTOSEND]
     * * [ERR_CANNOTSENDTOCHAN]
     * * [ERR_NOTOPLEVEL]
     * * [ERR_WILDTOPLEVEL]
     * * [ERR_TOOMANYTARGETS]
     * * [ERR_NOSUCHNICK]
     * * [RPL_AWAY]
     *
     * Examples:
     *
     * * :[email protected] PRIVMSG Wiz :Are you receiving this message ? ; Message from Angel to Wiz.
     * * PRIVMSG Angel :yes I'm receiving it !; Command to send a message to Angel.
     * * PRIVMSG [email protected] :Hello ! ; Command to send a message to a user
     * on server tolsun.oulu.fi with username of "jto".
     * * PRIVMSG kalt%[email protected] :Are you a frog? ; Message to a user on server
     * irc.stealth.net with username of "kalt", and connected from the host millennium.stealth.net.
     * * PRIVMSG kalt%millennium.stealth.net :Do you like cheese? ; Message to a user on the local
     * server with username of "kalt", and connected from the host millennium.stealth.net.
     * * PRIVMSG [email protected] :Hello ! ; Message to the user with nickname
     * Wiz who is connected from the host tolsun.oulu.fi and has the username "jto".
     * * PRIVMSG $*.fi :Server tolsun.oulu.fi rebooting. ; Message to everyone on a server
     * which has a name matching*.fi.
     * * PRIVMSG #*.edu :NSFNet is undergoing work, expect interruptions ; Message to all users who come from
     * a host which has a name matching *.edu.
     */
    PRIVMSG("PRIVMSG"),

    /**
     * Command: PING
     * Parameters: ` [  ]`
     *
     * The PING command is used to test the presence of an active client or
     * server at the other end of the connection. Servers send a PING
     * message at regular intervals if no other activity detected coming
     * from a connection. If a connection fails to respond to a PING
     * message within a set amount of time, that connection is closed. A
     * PING message MAY be sent even if the connection is active.
     *
     * When a PING message is received, the appropriate [PONG] message MUST be
     * sent as reply to `` (server which sent the PING message out)
     * as soon as possible. If the `` parameter is specified, it
     * represents the target of the ping, and the message gets forwarded
     * there.
     *
     * Numeric Replies:
     *
     * * [ERR_NOORIGIN]
     * * [ERR_NOSUCHSERVER]
     *
     * Examples:
     *
     * * PING tolsun.oulu.fi ; Command to send a PING message to server
     * * PING WiZ tolsun.oulu.fi  ; Command from WiZ to send a PING message to server "tolsun.oulu.fi"
     * * PING :irc.funet.fi ; Ping message sent by server "irc.funet.fi"
     */
    PING("PING"),

    /**
     * Command: NICK
     *
     * Parameters: ``
     *
     * NICK command is used to give user a nickname or change the existing
     * one.
     *
     * Numeric Replies:
     *
     * * [ERR_NONICKNAMEGIVEN]
     * * [ERR_ERRONEUSNICKNAME]
     * * [ERR_NICKNAMEINUSE]
     * * [ERR_NICKCOLLISION]
     * * [ERR_UNAVAILRESOURCE]
     * * [ERR_RESTRICTED]
     *
     * Examples:
     *
     * * NICK Wiz  ; Introducing new nick "Wiz" if session is
     * still unregistered, or user changing his
     * nickname to "Wiz"

     * * :[email protected] NICK Kilroy ; Server telling that WiZ changed his
     * nickname to Kilroy.
     */
    NICK("NICK"),

    /**
     * Command: PASS
     *
     * Parameters: ``
     *
     * The PASS command is used to set a 'connection password'.  The
     * optional password can and MUST be set before any attempt to register
     * the connection is made.  Currently this requires that user send a
     * PASS command before sending the NICK/USER combination.
     *
     * Numeric Replies:
     *
     * * [ERR_NEEDMOREPARAMS]
     * * [ERR_ALREADYREGISTRED]
     *
     * Example:
     *
     * * PASS secretpasswordhere
     */
    PASS("PASS"),

    /**
     * Command: USER
     *
     * Parameters: `   `
     *
     * The USER command is used at the beginning of connection to specify
     * the username, hostname and realname of a new user.
     *
     * The  parameter should be a numeric, and can be used to
     * automatically set user modes when registering with the server.  This
     * parameter is a bitmask, with only 2 bits having any signification: if
     * the bit 2 is set, the user mode 'w' will be set and if the bit 3 is
     * set, the user mode 'i' will be set.
     *
     * The `` may contain space characters, therefore should be abbreviated with ":".
     *
     * Numeric Replies:
     *
     * * [ERR_NEEDMOREPARAMS]
     * * [ERR_ALREADYREGISTRED]
     *
     * Example:
     *
     * * USER guest 0 * :Ronnie Reagan ; User registering themselves with a
     * username of "guest" and real name "Ronnie Reagan".
     *
     * * USER guest 8 * :Ronnie Reagan ; User registering themselves with a
     * username of "guest" and real name "Ronnie Reagan", and asking to be set invisible.
     *
     * @see Command.MODE
     */
    USER("USER"),

    /**
     * Command: OPER
     *
     * Parameters:  
     *
     * A normal user uses the OPER command to obtain operator privileges.
     * The combination of  and  are REQUIRED to gain
     * Operator privileges.  Upon success, the user will receive a MODE
     * message indicating the new user modes.
     *
     * Numeric Replies:
     *
     * * [ERR_NEEDMOREPARAMS]
     * * [RPL_YOUREOPER]
     * * [ERR_NOOPERHOST]
     * * [ERR_PASSWDMISMATCH]
     *
     * Example:
     *
     * OPER foo bar ; Attempt to register as an operator
     * using a username of "foo" and "bar"
     * as the password.
     *
     * @see Command.MODE
     */
    OPER("OPER"),


    /**
     * Since there are two definitions for MODE command, both of them will be listed here
     *
     * Command: MODE
     *
     * Parameters: `*( ( "+" / "-" )*( "i" / "w" / "o" / "O" / "r" ) )`
     *
     * The user MODE's are typically changes which affect either how the
     * client is seen by others or what 'extra' messages the client is sent.
     *
     * A user MODE command MUST only be accepted if both the sender of the
     * message and the nickname given as a parameter are both the same.  If
     * no other parameter is given, then the server will return the current
     * settings for the nick.
     *
     * The available modes are as follows:
     *
     * * a - user is flagged as away;
     * * i - marks a users as invisible;
     * * w - user receives wallops;
     * * r - restricted user connection;
     * * o - operator flag;
     * * O - local operator flag;
     * * s - marks a user for receipt of server notices.
     *
     * Additional modes may be available later on.
     * The flag 'a' SHALL NOT be toggled by the user using the MODE command,
     * instead use of the AWAY command is REQUIRED.
     *
     * If a user attempts to make themselves an operator using the "+o" or
     * "+O" flag, the attempt SHOULD be ignored as users could bypass the
     * authentication mechanisms of the OPER command.  There is no
     * restriction, however, on anyone `deopping' themselves (using "-o" or
     * "-O").
     *
     * On the other hand, if a user attempts to make themselves unrestricted
     * using the "-r" flag, the attempt SHOULD be ignored.  There is no
     * restriction, however, on anyone `deopping' themselves (using "+r").
     * This flag is typically set by the server upon connection for
     * administrative reasons.  While the restrictions imposed are left up
     * to the implementation, it is typical that a restricted user not be
     * allowed to change nicknames, nor make use of the channel operator
     * status on channels.
     *
     * The flag 's' is obsolete but MAY still be used.
     *
     * Numeric Replies:
     *
     * * [ERR_NEEDMOREPARAMS]
     * * [ERR_USERSDONTMATCH]
     * * [ERR_UMODEUNKNOWNFLAG]
     * * [RPL_UMODEIS]
     *
     * Examples:
     * * MODE WiZ -w ; Command by WiZ to turn off reception of WALLOPS messages.
     * * MODE Angel +i ; Command from Angel to make herself invisible.
     * * MODE WiZ -o ; WiZ 'deopping' (removing operator status).
     *
     * Command: MODE
     *
     * Parameters: `*( ( "-" / "+" )** )`
     *
     * The MODE command is provided so that users may query and change the
     * characteristics of a channel. For more details on available modes
     * and their uses, see "Internet Relay Chat: Channel Management" [IRC-
     * CHAN]. Note that there is a maximum limit of three (3) changes per
     * command for modes that take a parameter.
     *
     * Numeric Replies:
     *
     * * [ERR_NEEDMOREPARAMS]
     * * [ERR_KEYSET]
     * * [ERR_NOCHANMODES]
     * * [ERR_CHANOPRIVSNEEDED]
     * * [ERR_USERNOTINCHANNEL]
     * * [ERR_UNKNOWNMODE]
     * * [RPL_CHANNELMODEIS]
     * * [RPL_BANLIST]
     * * [RPL_ENDOFBANLIST]
     * * [RPL_EXCEPTLIST]
     * * [RPL_ENDOFEXCEPTLIST]
     * * [RPL_INVITELIST]
     * * [RPL_ENDOFINVITELIST]
     * * [RPL_UNIQOPIS]
     *
     * The following examples are given to help understanding the syntax of
     * the MODE command, but refer to modes defined in "Internet Relay Chat:
     * Channel Management" [IRC-CHAN].
     *
     * Examples:
     *
     * * MODE #Finnish +imI*!*@*.fi  ; Command to make #Finnish channel moderated and
     * 'invite-only' with user with a hostname matching*.fi automatically invited.
     * * MODE #Finnish +o Kilroy  ; Command to give 'chanop' privileges to Kilroy on channel #Finnish.
     * * MODE #Finnish +v Wiz ; Command to allow WiZ to speak on #Finnish.
     * * MODE #Fins -s ; Command to remove 'secret' flag from channel #Fins.
     * * MODE #42 +k oulu ; Command to set the channel key to "oulu".
     * * MODE #42 -k oulu ; Command to remove the "oulu" channel key on channel "#42".
     * * MODE #eu-opers +l 10 ; Command to set the limit for the number of users on channel
     * "#eu-opers" to 10.
     * * :[email protected] MODE #eu-opers -l ; User "WiZ" removing the limit for
     * the number of users on channel "#eu-opers".
     * * MODE &oulu +b ; Command to list ban masks set for the channel "&oulu".
     * * MODE &oulu +b*!*@* ; Command to prevent all users from joining.
     * * MODE &oulu +b*!*@*.edu +e*!*@*.bu.edu ; Command to prevent any user from a
     * hostname matching*.edu from joining, except if matching*.bu.edu
     * * MODE #bu +be*!*@*.edu*!*@*.bu.edu ; Comment to prevent any user from a
     * hostname matching*.edu from joining, except if matching*.bu.edu
     * * MODE #meditation e ; Command to list exception masks set for the channel "#meditation".
     * * MODE #meditation I ; Command to list invitations masks set for the channel "#meditation".
     * * MODE !12345ircd O ; Command to ask who the channel creator for "!12345ircd" is.
     */
    MODE("MODE"),

    /**
     * Command: SERVICE
     *
     * Parameters: `     `
     *
     * The SERVICE command to register a new service.  Command parameters
     * specify the service nickname, distribution, type and info of a new
     * service.
     * The `` parameter is used to specify the visibility of a
     * service.  The service may only be known to servers which have a name
     * matching the distribution.  For a matching server to have knowledge
     * of the service, the network path between that server and the server
     * on which the service is connected MUST be composed of servers which
     * names all match the mask.
     *
     * The `` parameter is currently reserved for future usage.
     *
     * Numeric Replies:
     *
     * * [ERR_ALREADYREGISTRED]
     * * [ERR_NEEDMOREPARAMS]
     * * [ERR_ERRONEUSNICKNAME]
     * * [RPL_YOURESERVICE]
     * * [RPL_YOURHOST]
     * * [RPL_MYINFO]
     *
     * Example:
     *
     * * SERVICE dict `* *`.fr 0 0 * :French Dictionary ; Service registering itself with a name of "dict".  This
     * service will only be available on servers which name matches "*.fr".
     */

    SERVICE("SERVICE"),

    /**
     * Command: QUIT
     *
     * Parameters: `[  ]`
     *
     * A client session is terminated with a quit message.  The server
     * acknowledges this by sending an [ERROR] message to the client.
     *
     * Numeric Replies:
     *
     * * None.
     *
     * Example:
     *
     * * QUIT :Gone to have lunch ; Preferred message format.
     * * :[email protected] QUIT :Gone to have lunch ; User syrk has quit IRC to have lunch.
     */
    QUIT("QUIT"),

    /**
     * Command: SQUIT
     *
     * Parameters: ` `
     *
     * The SQUIT command is available only to operators.  It is used to
     * disconnect server links.  Also servers can generate SQUIT messages on
     * error conditions.  A SQUIT message may also target a remote server
     * connection.  In this case, the SQUIT message will simply be sent to
     * the remote server without affecting the servers in between the
     * operator and the remote server.
     *
     * The `` SHOULD be supplied by all operators who execute a SQUIT
     * for a remote server.  The server ordered to disconnect its peer
     * generates a WALLOPS message with `` included, so that other
     * users may be aware of the reason of this action.
     *
     * Numeric replies:
     *
     * * [ERR_NOPRIVILEGES]
     * * [ERR_NOSUCHSERVER]
     * * [ERR_NEEDMOREPARAMS]
     *
     * Examples:
     *
     * * SQUIT tolsun.oulu.fi :Bad Link ?  ; Command to uplink of the server tolson.oulu.fi to terminate its connection with comment "Bad Link".
     * * :Trillian SQUIT cm22.eng.umd.edu :Server out of control ; Command from Trillian from to disconnect "cm22.eng.umd.edu" from the net with
     * comment "Server out of control".
     */
    SQUIT("SQUIT"),

    /**
     * Command: JOIN
     *
     * Parameters: `( *( ","  ) [ *( ","  ) ] ) / "0"`
     *
     * The JOIN command is used by a user to request to start listening to
     * the specific channel.  Servers MUST be able to parse arguments in the
     * form of a list of target, but SHOULD NOT use lists when sending JOIN
     * messages to clients.
     *
     * Once a user has joined a channel, he receives information about
     * all commands his server receives affecting the channel.  This
     * includes [JOIN], [MODE], [KICK], [PART], [QUIT] and of course [PRIVMSG]/[NOTICE].
     * This allows channel members to keep track of the other channel
     * members, as well as channel modes.
     *
     * If a JOIN is successful, the user receives a JOIN message as
     * confirmation and is then sent the channel's topic (using [RPL_TOPIC]) and
     * the list of users who are on the channel (using [RPL_NAMEREPLY]), which
     * MUST include the user joining.
     *
     * Note that this message accepts a special argument ("0"), which is
     * a special request to leave all channels the user is currently a member
     * of. The server will process this message as if the user had sent
     * a [PART] command for each channel he is a member of.
     *
     * Numeric Replies:
     *
     * * [ERR_NEEDMOREPARAMS]
     * * [ERR_BANNEDFROMCHAN]
     * * [ERR_INVITEONLYCHAN]
     * * [ERR_BADCHANNELKEY]
     * * [ERR_CHANNELISFULL]
     * * [ERR_BADCHANMASK]
     * * [ERR_NOSUCHCHANNEL]
     * * [ERR_TOOMANYCHANNELS]
     * * [ERR_TOOMANYTARGETS]
     * * [ERR_UNAVAILRESOURCE]
     * * [RPL_TOPIC]
     *
     * Examples:
     *
     * * JOIN #foobar ; Command to join channel #foobar.
     * * JOIN &foo fubar ; Command to join channel &foo using key "fubar".
     * * JOIN #foo,&bar fubar ; Command to join channel #foo using key "fubar" and &bar using no key.
     * * JOIN #foo,#bar fubar,foobar   ; Command to join channel #foo using
     * key "fubar", and channel #bar using key "foobar".
     * * JOIN #foo,#bar ; Command to join channels #foo and #bar.
     * * JOIN 0 ; Leave all currently joined channels.
     * * :[email protected] JOIN #Twilight_zone ; JOIN message from WiZ on channel #Twilight_zone
     */
    JOIN("JOIN"),

    /**
     * Command: PART
     *
     * Parameters: `*( ","  ) [  ]`
     *
     * The PART command causes the user sending the message to be removed
     * from the list of active members for all given channels listed in the
     * parameter string.  If a "Part Message" is given, this will be sent
     * instead of the default message, the nickname.  This request is always
     * granted by the server.
     *
     * Servers MUST be able to parse arguments in the form of a list of
     * target, but SHOULD NOT use lists when sending PART messages to
     * clients.
     *
     * Numeric Replies:
     *
     * * [ERR_NEEDMOREPARAMS]
     * * [ERR_NOSUCHCHANNEL]
     * * [ERR_NOTONCHANNEL]
     *
     * Examples:
     *
     * * PART #twilight_zone ; Command to leave channel "#twilight_zone"
     * * PART #oz-ops,&group5 ; Command to leave both channels "&group5" and "#oz-ops".
     * * :[email protected] PART #playzone :I lost ; User WiZ leaving channel "#playzone" with the message "I lost".
     */
    PART("PART"),

    /**
     * Command: TOPIC
     *
     * Parameters: ` [  ]`
     *
     * The TOPIC command is used to change or view the topic of a channel.
     * The topic for channel `` is returned if there is no ``
     * given. If the `` parameter is present, the topic for that
     * channel will be changed, if this action is allowed for the user
     * requesting it. If the `` parameter is an empty string, the
     * topic for that channel will be removed.

     * Numeric Replies:
     *
     * * [ERR_NEEDMOREPARAMS]
     * * [ERR_NOTONCHANNEL]
     * * [RPL_NOTOPIC]
     * * [RPL_TOPIC]
     * * [ERR_CHANOPRIVSNEEDED]
     * * [ERR_NOCHANMODES]
     *
     * Examples:
     *
     * * :[email protected] TOPIC #test :New topic ; User Wiz setting the* topic.
     * * TOPIC #test :another topic ; Command to set the topic on #test
     * to "another topic".
     * * TOPIC #test : ; Command to clear the topic on #test.
     * * TOPIC #test ; Command to check the topic for #test.
     */
    TOPIC("TOPIC"),

    /**
     * Command: NAMES
     *
     * Parameters: `[ *( ","  ) [  ] ]`
     *
     * By using the NAMES command, a user can list all nicknames that are
     * visible to him. For more details on what is visible and what is not,
     * see "Internet Relay Chat: Channel Management" [IRC-CHAN]. The
     * `` parameter specifies which channel(s) to return information
     * about. There is no error reply for bad channel names.
     *
     * If no `` parameter is given, a list of all channels and their
     * occupants is returned. At the end of this list, a list of users who
     * are visible but either not on any channel or not on a visible channel
     * are listed as being on `channel' "*".
     *
     * If the `` parameter is specified, the request is forwarded to
     * that server which will generate the
     *
     * Wildcards are allowed in the `` parameter.
     *
     * Numerics:
     *
     * * [ERR_TOOMANYMATCHES]
     * * [ERR_NOSUCHSERVER]
     * * [RPL_NAMEREPLY]
     * * [RPL_ENDOFNAMES]
     *
     * Examples:
     *
     * * NAMES #twilight_zone,#42  ; Command to list visible users on #twilight_zone and #42
     * * NAMES ; Command to list all visible channels and users
     */
    NAMES("NAMES"),

    /**
     * Command: LIST
     *
     * Parameters: `[ *( ","  ) [  ] ]`
     *
     * The list command is used to list channels and their topics. If the
     * `` parameter is used, only the status of that channel is
     * displayed.
     *
     * If the `` parameter is specified, the request is forwarded to
     * that server which will generate the
     *
     * Wildcards are allowed in the `` parameter.
     *
     * Numeric Replies:
     *
     * * [ERR_TOOMANYMATCHES]
     * * [ERR_NOSUCHSERVER]
     * * [RPL_LIST]
     * * [RPL_LISTEND]
     *
     * Examples:
     *
     * * LIST ; Command to list all channels.
     * * LIST #twilight_zone,#42  ; Command to list channels #twilight_zone and #42
     */
    LIST("LIST"),

    /**
     * Command: INVITE
     *
     * Parameters: ` `
     *
     * The INVITE command is used to invite a user to a channel. The
     * parameter `` is the nickname of the person to be invited to
     * the target channel ``. There is no requirement that the
     * channel the target user is being invited to must exist or be a valid
     * channel. However, if the channel exists, only members of the channel
     * are allowed to invite other users. When the channel has invite-only
     * flag set, only channel operators may issue INVITE command.
     *
     * Only the user inviting and the user being invited will receive
     * notification of the invitation. Other channel members are not
     * notified. (This is unlike the [MODE] changes, and is occasionally the
     * source of trouble for users.)
     *
     * Numeric Replies:
     *
     * * [ERR_NEEDMOREPARAMS]
     * * [ERR_NOSUCHNICK]
     * * [ERR_NOTONCHANNEL]
     * * [ERR_USERONCHANNEL]
     * * [ERR_CHANOPRIVSNEEDED]
     * * [RPL_INVITING]
     * * [RPL_AWAY]
     *
     * Examples:
     *
     * * :[email protected] INVITE Wiz #Dust ; Message to WiZ when he has been
     * invited by user Angel to channel #Dust
     * * INVITE Wiz #Twilight_Zone  ; Command to invite WiZ to
     * #Twilight_zone
     */
    INVITE("INVITE"),

    /**
     * Command: KICK
     *
     * Parameters: ` *( ","  )  *( ","  ) []`
     *
     * The KICK command can be used to request the forced remoof a user
     * from a channel. It causes the `` to [PART] from the `` by
     * force. For the message to be syntactically correct, there MUST be
     * either one channel parameter and multiple user parameter, or as many
     * channel parameters as there are user parameters. If a "comment" is
     * given, this will be sent instead of the default message, the nickname
     * of the user issuing the [KICK].
     *
     * The server MUST NOT send [KICK] messages with multiple channels or
     * users to clients. This is necessarily to maintain backward
     * compatibility with old client software.
     *
     * Numeric Replies:
     *
     * * [ERR_NEEDMOREPARAMS]
     * * [ERR_NOSUCHCHANNEL]
     * * [ERR_BADCHANMASK]
     * * [ERR_CHANOPRIVSNEEDED]
     * * [ERR_USERNOTINCHANNEL]
     * * [ERR_NOTONCHANNEL]
     *
     * Examples:
     *
     * * KICK &Melbourne Matthew  ; Command to kick Matthew from &Melbourne
     * * KICK #Finnish John :Speaking English ; Command to kick John from #Finnish
     * using "Speaking English" as the reason (comment).
     * * :[email protected] KICK #Finnish John ; KICK message on channel #Finnish
     * from WiZ to remove John from channel
     */
    KICK("KICK"),

    /**
     * Command: NOTICE
     *
     * Parameters: ` `
     *
     * The NOTICE command is used similarly to PRIVMSG. The difference
     * between NOTICE and PRIVMSG is that automatic replies MUST NEVER be
     * sent in response to a NOTICE message. This rule applies to servers
     * too - they MUST NOT send any error reply back to the client on
     * receipt of a notice. The object of this rule is to avoid loops
     * between clients automatically sending something in response to
     * something it received.
     *
     * This command is available to services as well as users.
     *
     * This is typically used by services, and automatons (clients with
     * either an AI or other interactive program controlling their actions).
     *
     * See PRIVMSG for more details on replies and examples.
     */
    NOTICE("NOTICE"),

    /**
     * Command: MOTD
     *
     * Parameters: `[  ]`
     *
     * The MOTD command is used to get the "Message Of The Day" of the given
     * server, or current server if `` is omitted.
     *
     * Wildcards are allowed in the `` parameter.
     *
     * Numeric Replies:
     * * [RPL_MOTDSTART]
     * * [RPL_MOTD]
     * * [RPL_ENDOFMOTD]
     * * [ERR_NOMOTD]
     */
    MOTD("MOTD"),

    /**
     *
     * Command: LUSERS
     *
     * Parameters: `[  [  ] ]`
     *
     * The LUSERS command is used to get statistics about the size of the
     * IRC network. If no parameter is given, the reply will be about the
     * whole net. If a `` is specified, then the reply will only
     * concern the part of the network formed by the servers matching the
     * mask. Finally, if the `` parameter is specified, the request
     * is forwarded to that server which will generate the
     *
     * Wildcards are allowed in the `` parameter.
     *
     * Numeric Replies:
     *
     * * [RPL_LUSERCLIENT]
     * * [RPL_LUSEROP]
     * * [RPL_LUSERUNKNOWN]
     * * [RPL_LUSERCHANNELS]
     * * [RPL_LUSERME]
     * * [ERR_NOSUCHSERVER]
     */
    LUSER("LUSER"),

    /**
     * Command: VERSION
     *
     * Parameters: `[  ]`
     *
     * The VERSION command is used to query the version of the server
     * program. An optional parameter `` is used to query the version
     * of the server program which a client is not directly connected to.
     *
     * Wildcards are allowed in the `` parameter.
     *
     * Numeric Replies:
     *
     * * [ERR_NOSUCHSERVER]
     * * [RPL_VERSION]
     *
     * Examples:
     *
     * VERSION tolsun.oulu.fi  ; Command to check the version of server "tolsun.oulu.fi".
     */
    VERSION("VERSION"),

    /**
     * Command: STATS
     * Parameters: `[  [  ] ]`
     *
     * The stats command is used to query statistics of certain server. If
     * `` parameter is omitted, only the end of stats reply is sent
     * back.
     *
     * A query may be given for any single letter which is only checked by
     * the destination server and is otherwise passed on by intermediate
     * servers, ignored and unaltered.
     *
     * Wildcards are allowed in the `` parameter.
     * Except for the ones below, the list of valid queries is
     * implementation dependent. The standard queries below SHOULD be
     * supported by the server:
     * * l - returns a list of the server's connections, showing how
     * long each connection has been established and the
     * traffic over that connection in Kbytes and messages for
     * each direction;
     * * m - returns the usage count for each of commands supported
     * by the server; commands for which the usage count is
     * zero MAY be omitted;
     * * o - returns a list of configured privileged users,
     * operators;
     * * u - returns a string showing how long the server has been
     * up.
     *
     * It is also RECOMMENDED that client and server access configuration be
     * published this way.
     *
     * Numeric Replies:
     *
     * * [ERR_NOSUCHSERVER]
     * * [RPL_STATSLINKINFO]
     * * [RPL_STATSUPTIME]
     * * [RPL_STATSCOMMANDS]
     * * [RPL_STATSOLINE]
     * * [RPL_ENDOFSTATS]
     *
     * Examples:
     *
     * STATS m ; Command to check the command usage for the server you are connected to
     */
    STATS("STATS"),

    /**
     * Command: LINKS
     *
     * Parameters: `[ [  ]  ]`
     *
     * With LINKS, a user can list all servernames, which are known by the
     * server answering the query. The returned list of servers MUST match
     * the mask, or if no mask is given, the full list is returned.
     *
     * If `` is given in addition to ``, the LINKS
     * command is forwarded to the first server found that matches that name
     * (if any), and that server is then required to answer the query.
     *
     * Numeric Replies:
     *
     * * [ERR_NOSUCHSERVER]
     * * [RPL_LINKS]
     * * [RPL_ENDOFLINKS]
     *
     * Examples:
     *
     * * LINKS *.au ; Command to list all servers which have a name that matches*.au;
     * * LINKS *.edu *.bu.edu ; Command to list servers matching *.bu.edu as seen by the first server
     * matching *.edu.
     */
    LINKS("LINKS"),
    /**
     * Command: TIME
     * Parameters:` [  ]`
     *
     * The time command is used to query local time from the specified
     * server. If the `` parameter is not given, the server receiving
     * the command must reply to the query.
     *
     * Wildcards are allowed in the `` parameter.
     *
     * Numeric Replies:
     *
     * * [ERR_NOSUCHSERVER]
     * * [RPL_TIME]
     *
     * Examples:
     *
     * * TIME tolsun.oulu.fi ; check the time on the serve "tolson.oulu.fi"
     */
    TIME("TIME"),
    /**
     * Command: CONNECT
     *
     * Parameters: `  [  ]`
     *
     * The CONNECT command can be used to request a server to try to
     * establish a new connection to another server immediately. CONNECT is
     * a privileged command and SHOULD be available only to IRC Operators.
     * If a `` is given and its mask doesn't match name of the
     * parsing server, the CONNECT attempt is sent to the first match of
     * remote server. Otherwise the CONNECT attempt is made by the server
     * processing the request.
     *
     * The server receiving a remote CONNECT command SHOULD generate a
     * WALLOPS message describing the source and target of the request.
     *
     * Numeric Replies:
     *
     * * [ERR_NOSUCHSERVER]
     * * [ERR_NOPRIVILEGES]
     * * [ERR_NEEDMOREPARAMS]
     *
     * Examples:
     *
     * CONNECT tolsun.oulu.fi 6667  ; Command to attempt to connect local server to
     * tolsun.oulu.fi on port 6667
     */
    CONNECT("CONNECT"),

    /**
     * Command: TRACE
     *
     * Parameters: `[  ]`
     *
     * TRACE command is used to find the route to specific server and
     * information about its peers. Each server that processes this command
     * MUST report to the sender about it. The replies from pass-through
     * links form a chain, which shows route to destination. After sending
     * this reply back, the query MUST be sent to the next server until
     * given `` server is reached.
     *
     * TRACE command is used to find the route to specific server. Each
     * server that processes this message MUST tell the sender about it by
     * sending a reply indicating it is a pass-through link, forming a chain
     * of replies. After sending this reply back, it MUST then send the
     * TRACE message to the next server until given server is reached. If
     * the `` parameter is omitted, it is RECOMMENDED that TRACE
     * command sends a message to the sender telling which servers the local
     * server has direct connection to.
     *
     * If the destination given by `` is an actual server, the
     * destination server is REQUIRED to report all servers, services and
     * operators which are connected to it; if the command was issued by an
     * operator, the server MAY also report all users which are connected to
     * it. If the destination given by `` is a nickname, then only a
     * reply for that nickname is given. If the `` parameter is
     * omitted, it is RECOMMENDED that the TRACE command is parsed as
     * targeted to the processing server.
     *
     * Wildcards are allowed in the `` parameter.
     *
     * Numeric Replies:
     *
     * * [ERR_NOSUCHSERVER]
     * If the TRACE message is destined for another server, all
     * intermediate servers must return a [RPL_TRACELINK] reply to indicate
     * that the TRACE passed through it and where it is going next.
     * * [RPL_TRACELINK]
     *
     * A TRACE reply may be composed of any number of the following
     * numeric replies.
     *
     * * [RPL_TRACEHANDSHAKE]
     * * [RPL_TRACECONNECTING]
     * * [RPL_TRACEUNKNOWN]
     * * [RPL_TRACEOPERATOR]
     * * [RPL_TRACEUSER]
     * * [RPL_TRACESERVER]
     * * [RPL_TRACESERVICE]
     * * [RPL_TRACENEWTYPE]
     * * [RPL_TRACECLASS]
     * * [RPL_TRACELOG]
     * * [RPL_TRACEEND]
     *
     * Examples:
     * * TRACE *.oulu.fi ; TRACE to a server matching *.oulu.fi
     */
    TRACE("TRACE"),

    /**
     * Command: ADMIN
     *
     * Parameters: `[  ]`
     *
     * The admin command is used to find information about the administrator
     * of the given server, or current server if `` parameter is
     * omitted. Each server MUST have the ability to forward ADMIN messages
     * to other servers.
     *
     * Wildcards are allowed in the `` parameter.
     *
     * Numeric Replies:
     *
     * * [ERR_NOSUCHSERVER]
     * * [RPL_ADMINME]
     * * [RPL_ADMINLOC1]
     * * [RPL_ADMINLOC2]
     * * [RPL_ADMINEMAIL]
     *
     * Examples:
     *
     * * ADMIN tolsun.oulu.fi ; request an ADMIN reply from tolsun.oulu.fi
     * * ADMIN syrk  ; ADMIN request for the server to
     * which the user syrk is connected
     */
    ADMIN("ADMIN"),

    /**
     * Command: INFO
     *
     * Parameters: `[  ]`
     *
     * The INFO command is REQUIRED to return information describing the
     * server: its version, when it was compiled, the patchlevel, when it
     * was started, and any other miscellaneous information which may be
     * considered to be relevant.
     *
     * Wildcards are allowed in the `` parameter.
     *
     * Numeric Replies:
     *
     * * [ERR_NOSUCHSERVER]
     * * [RPL_INFO]
     * * [RPL_ENDOFINFO]
     *
     * Examples:
     *
     * * INFO csd.bu.edu ; request an INFO reply from csd.bu.edu
     * * INFO Angel ; request info from the server that Angel is connected to.
     */
    INFO("INFO"),

    /**
     * Command: SERVLIST
     *
     * Parameters: `[  [  ] ]`
     *
     * The SERVLIST command is used to list services currently connected to
     * the network and visible to the user issuing the command. The
     * optional parameters may be used to restrict the result of the query
     * (to matching services names, and services type).
     *
     * Numeric Replies:
     *
     * * [RPL_SERVLIST]
     * * [RPL_SERVLISTEND]
     */
    SERVLIST("SERVLIST"),


    /**
     * Command: SQUERY
     *
     * Parameters: ` `
     *
     * The SQUERY command is used similarly to [PRIVMSG]. The only difference
     * is that the recipient MUST be a service. This is the only way for a
     * text message to be delivered to a service.
     *
     * Examples:
     *
     * * SQUERY irchelp :HELP privmsg ; Message to the service with nickname irchelp.
     * * SQUERY [email protected] :fr2en blaireau ; Message to the service with name
     * * [email protected].
     *
     * @see PRIVMSG
     */
    SQUERY("SQUERY"),

    /**
     * Command: WHO
     *
     * Parameters: `[  [ "o" ] ]`
     *
     * The WHO command is used by a client to generate a query which returns
     * a list of information which 'matches' the `` parameter given by
     * the client. In the absence of the `` parameter, all visible
     * (users who aren't invisible (user mode +i) and who don't have a
     * common channel with the requesting client) are listed. The same
     * result can be achieved by using a `` of "0" or any wildcard which
     * will end up matching every visible user.
     *
     * The `` passed to WHO is matched against users' host, server, real
     * name and nickname if the channel `` cannot be found.
     *
     * If the "o" parameter is passed only operators are returned according
     * to the `` supplied.
     *
     * Numeric Replies:
     *
     * * [ERR_NOSUCHSERVER]
     * * [RPL_WHOREPLY]
     * * [RPL_ENDOFWHO]
     *
     * Examples:
     *
     * * WHO *.fi ; Command to list all users who match against "*.fi".
     * * WHO jto* o ; Command to list all users with a match against "jto*" if they are an
     * operator.
     */
    WHO("WHO"),

    /**
     * Command: WHOIS
     *
     * Parameters: `[  ] *( ","  )`
     *
     * This command is used to query information about particular user.
     * The server will answer this command with several numeric messages
     * indicating different statuses of each user which matches the mask (if
     * you are entitled to see them). If no wildcard is present in the
     * ``, any information about that nick which you are allowed to see
     * is presented.
     *
     * If the `` parameter is specified, it sends the query to a
     * specific server. It is useful if you want to know how long the user
     * in question has been idle as only local server (i.e., the server the
     * user is directly connected to) knows that information, while
     * everything else is globally known.
     *
     * Wildcards are allowed in the `` parameter.
     *
     * Numeric Replies:
     *
     * * [ERR_NOSUCHSERVER]
     * * [ERR_NONICKNAMEGIVEN]
     * * [RPL_WHOISUSER]
     * * [RPL_WHOISCHANNELS]
     * * [RPL_WHOISCHANNELS]
     * * [RPL_WHOISSERVER]
     * * [RPL_AWAY]
     * * [RPL_WHOISOPERATOR]
     * * [RPL_WHOISIDLE]
     * * [ERR_NOSUCHNICK]
     * * [RPL_ENDOFWHOIS]
     *
     * Examples:
     *
     * * WHOIS wiz ; return available user information about nick WiZ
     * * WHOIS eff.org trillian  ; ask server eff.org for user information about trillian
     */
    WHOIS("WHOIS"),

    /**
     * Command: WHOWAS
     *
     * Parameters: ` *( ","  ) [  [  ] ]`
     *
     * Whowas asks for information about a nickname which no longer exists.
     * This may either be due to a nickname change or the user leaving IRC.
     * In response to this query, the server searches through its nickname
     * history, looking for any nicks which are lexically the same (no wild
     * card matching here). The history is searched backward, returning the
     * most recent entry first. If there are multiple entries, up to
     * `` replies will be returned (or all of them if no ``
     * parameter is given). If a non-positive number is passed as being
     * ``, then a full search is done.
     *
     * Wildcards are allowed in the `` parameter.
     *
     * Numeric Replies:
     *
     * * [ERR_WASNOSUCHNICK]
     * * [ERR_NONICKNAMEGIVEN]
     * * [RPL_WHOWASUSER]
     * * [RPL_WHOISSERVER]
     * * [RPL_ENDOFWHOWAS]
     *
     * Examples:
     *
     * * WHOWAS Wiz  ; return all information in the nick history about nick "WiZ";
     * * WHOWAS Mermaid 9 ; return at most, the 9 most recent entries in the nick history for
     * "Mermaid";
     * * WHOWAS Trillian 1 *.edu  ; return the most recent history for "Trillian" from the first server
     * found to match "*.edu".
     */
    WHOWAS("WHOWAS"),

    /**
     * Command: KILL
     *
     * Parameters: ` `
     *
     * The KILL command is used to cause a client-server connection to be
     * closed by the server which has the actual connection. Servers
     * generate KILL messages on nickname collisions. It MAY also be
     * available available to users who have the operator status.
     *
     * Clients which have automatic reconnect algorithms effectively make
     * this command useless since the disconnection is only brief. It does
     * however break the flow of data and can be used to stop large amounts
     * of 'flooding' from abusive users or accidents. Abusive users usually
     * don't care as they will reconnect promptly and resume their abusive
     * behaviour. To prevent this command from being abused, any user may
     * elect to receive KILL messages generated for others to keep an 'eye'
     * on would be trouble spots.
     *
     * In an arena where nicknames are REQUIRED to be globally unique at all
     * times, KILL messages are sent whenever 'duplicates' are detected
     * (that is an attempt to register two users with the same nickname) in
     * the hope that both of them will disappear and only 1 reappear.
     *
     * When a client is removed as the result of a KILL message, the server
     * SHOULD add the nickname to the list of unavailable nicknames in an
     * attempt to avoid clients to reuse this name immediately which is
     * usually the pattern of abusive behaviour often leading to useless
     * "KILL loops". See the "IRC Server Protocol" document [IRC-SERVER]
     * for more information on this procedure.
     *
     * The comment given MUST reflect the actual reason for the KILL. For
     * server-generated KILLs it usually is made up of details concerning
     * the origins of the two conflicting nicknames. For users it is left
     * up to them to provide an adequate reason to satisfy others who see
     * it. To prevent/discourage fake KILLs from being generated to hide
     * the identify of the KILLer, the comment also shows a 'kill-path'
     * which is updated by each server it passes through, each prepending
     * its name to the path.
     *
     * Numeric Replies:
     *
     * * [ERR_NOPRIVILEGES]
     * * [ERR_NEEDMOREPARAMS]
     * * [ERR_NOSUCHNICK]
     * * [ERR_CANTKILLSERVER]
     *
     * NOTE:
     * It is RECOMMENDED that only Operators be allowed to kill other users
     * with KILL command. This command has been the subject of many
     * controversies over the years, and along with the above
     * recommendation, it is also widely recognized that not even operators
     * should be allowed to kill users on remote servers.
     */
    KILL("KILL"),

    /**
     * Command: PONG
     *
     * Parameters: ` [  ]`
     *
     * PONG message is a reply to ping message. If parameter  is
     * given, this message MUST be forwarded to given target. The 
     * parameter is the name of the entity who has responded to PING message
     * and generated this message.
     *
     * Numeric Replies:
     *
     * * [ERR_NOORIGIN]
     * * [ERR_NOSUCHSERVER]
     *
     * Example:
     *
     * PONG csd.bu.edu tolsun.oulu.fi ; PONG message from csd.bu.edu to tolsun.oulu.fi
     */
    PONG("PONG"),

    /**
     * Command: ERROR
     *
     * Parameters: ``
     *
     * The ERROR command is for use by servers when reporting a serious or
     * fatal error to its peers. It may also be sent from one server to
     * another but MUST NOT be accepted from any normal unknown clients.
     *
     * Only an ERROR message SHOULD be used for reporting errors which occur
     * with a server-to-server link. An ERROR message is sent to the server
     * at the other end (which reports it to appropriate local users and
     * logs) and to appropriate local users and logs. It is not to be
     * passed onto any other servers by a server if it is received from a
     * server.
     *
     * The ERROR message is also used before terminating a client
     * connection.
     *
     * When a server sends a received ERROR message to its operators, the
     * message SHOULD be encapsulated inside a NOTICE message, indicating
     * that the client was not responsible for the error.
     *
     * Numeric replies:
     *
     * * None.
     *
     * Examples:
     *
     * * ERROR :Server *.fi already exists ; ERROR message to the other server which caused this error.
     * * NOTICE WiZ :ERROR from csd.bu.edu -- Server *.fi already exists ; Same ERROR message as above but
     * sent to user WiZ on the other server.
     */
    ERROR("ERROR"),

    /**
     * Command: AWAY
     *
     * Parameters: `[  ]`
     *
     * With the AWAY command, clients can set an automatic reply string for
     * any [PRIVMSG] commands directed at them (not to a channel they are on).
     * The server sends an automatic reply to the client sending the [PRIVMSG]
     * command. The only replying server is the one to which the sending
     * client is connected to.
     *
     * The AWAY command is used either with one parameter, to set an AWAY
     * message, or with no parameters, to remove the AWAY message.
     *
     * Because of its high cost (memory and bandwidth wise), the AWAY
     * message SHOULD only be used for client-server communication. A
     * server MAY choose to silently ignore AWAY messages received from
     * other servers. To update the away status of a client across servers,
     * the user [MODE] 'a' SHOULD be used instead.
     *
     * Numeric Replies:
     *
     * * [RPL_UNAWAY]
     * * [RPL_NOWAWAY]
     *
     * Example:
     *
     * * AWAY :Gone to lunch. Back in 5 ; Command to set away message to "Gone to lunch. Back in 5".
     *
     * @see MODE
     */
    AWAY("AWAY"),

    /**
     * Command: REHASH
     *
     * Parameters: None
     *
     * The rehash command is an administrative command which can be used by
     * an operator to force the server to re-read and process its
     * configuration file.
     *
     * Numeric Replies:
     *
     * * [RPL_REHASHING]
     * * [ERR_NOPRIVILEGES]
     *
     * Example:
     *
     * * REHASH ; message from user with operator status to server asking it to reread
     * its configuration file.
     */
    REHASH("REHASH"),

    /**
     * Command: DIE
     *
     * Parameters: None
     *
     * An operator can use the DIE command to shutdown the server. This
     * message is optional since it may be viewed as a risk to allow
     * arbitrary people to connect to a server as an operator and execute
     * this command.
     *
     * The DIE command MUST always be fully processed by the server to which
     * the sending client is connected and MUST NOT be passed onto other
     * connected servers.
     *
     * Numeric Replies:
     *
     * * [ERR_NOPRIVILEGES]
     *
     * Example:
     *
     * * DIE ; no parameters required.
     */
    DIE("DIE"),

    /**
     * Command: RESTART
     *
     * Parameters: None
     *
     * An operator can use the restart command to force the server to
     * restart itself. This message is optional since it may be viewed as a
     * risk to allow arbitrary people to connect to a server as an operator
     * and execute this command, causing (at least) a disruption to service.
     *
     * The RESTART command MUST always be fully processed by the server to
     * which the sending client is connected and MUST NOT be passed onto
     * other connected servers.
     *
     * Numeric Replies:
     *
     * * [ERR_NOPRIVILEGES]
     *
     * Example:
     *
     * RESTART ; no parameters required.
     */
    RESTART("RESTART"),

    /**
     * Command: SUMMON
     *
     * Parameters: ` [  [  ] ]`
     *
     * The SUMMON command can be used to give users who are on a host
     * running an IRC server a message asking them to please join IRC. This
     * message is only sent if the target server (a) has SUMMON enabled, (b)
     * the user is logged in and (c) the server process can write to the
     * user's tty (or similar).
     *
     * If no `` parameter is given it tries to summon `` from the
     * server the client is connected to is assumed as the target.
     *
     * If summon is not enabled in a server, it MUST return the
     * [ERR_SUMMONDISABLED] numeric.
     *
     * Numeric Replies:
     *
     * * [ERR_NORECIPIENT]
     * * [ERR_FILEERROR]
     * * [ERR_NOLOGIN]
     * * [ERR_NOSUCHSERVER]
     * * [ERR_SUMMONDISABLED]
     * * [RPL_SUMMONING]
     *
     * Examples:
     *
     * * SUMMON jto ; summon user jto on the server's host
     * * SUMMON jto tolsun.oulu.fi  ; summon user jto on the host which a server named "tolsun.oulu.fi" is
     * running.
     */
    SUMMON("SUMMON"),

    /**
     * Command: USERS
     *
     * Parameters: `[  ]`
     *
     * The USERS command returns a list of users logged into the server in a
     * format similar to the UNIX commands who(1), rusers(1) and finger(1).
     * If disabled, the correct numeric MUST be returned to indicate this.
     *
     * Because of the security implications of such a command, it SHOULD be
     * disabled by default in server implementations. Enabling it SHOULD
     * require recompiling the server or some equivalent change rather than
     * simply toggling an option and restarting the server. The procedure
     * to enable this command SHOULD also include suitable large comments.
     *
     * Numeric Replies:
     *
     * * [ERR_NOSUCHSERVER]
     * * [ERR_FILEERROR]
     * * [RPL_USERSSTART]
     * * [RPL_USERS]
     * * [RPL_NOUSERS]
     * * [RPL_ENDOFUSERS]
     * * [ERR_USERSDISABLED]
     *
     * Disabled Reply:
     *
     * * [ERR_USERSDISABLED]
     *
     * Example:
     *
     * * USERS eff.org ; request a list of users logged in on server eff.org
     */
    USERS("USERS"),


    /**
     * Command: WALLOPS
     *
     * Parameters: ``
     *
     * The WALLOPS command is used to send a message to all currently
     * connected users who have set the 'w' user [MODE] for themselves.
     *
     * After implementing WALLOPS as a user command it was found that it was
     * often and commonly abused as a means of sending a message to a lot of
     * people. Due to this, it is RECOMMENDED that the implementation of
     * WALLOPS allows and recognizes only servers as the originators of
     * WALLOPS.
     *
     * Numeric Replies:
     *
     * * [ERR_NEEDMOREPARAMS]
     * * 481
     *
     * Example:
     *
     * * :csd.bu.edu WALLOPS :Connect '*.uiuc.edu 6667' from Joshua ; WALLOPS message from
     * csd.bu.edu announcing a CONNECT message it received from Joshua and acted upon.
     */
    WALLOPS("WALLOPS"),

    /**
     * Command: USERHOST
     *
     * Parameters: ` *( SPACE  )`
     *
     * The USERHOST command takes a list of up to 5 nicknames, each
     * separated by a space character and returns a list of information
     * about each nickname that it found. The returned list has each reply
     * separated by a space.
     *
     * Numeric Replies:
     *
     * * [RPL_USERHOST]
     * * [ERR_NEEDMOREPARAMS]
     *
     * Example:
     *
     * * USERHOST Wiz Michael syrk  ; USERHOST request for information on nicks "Wiz", "Michael", and "syrk"
     * * :ircd.stealth.net 302 yournick :[email protected] ; Reply for user syrk
     */
    USERHOST("USERHOST"),

    /**
     * Command: ISON
     *
     * Parameters: ` *( SPACE  )`
     *
     * The ISON command was implemented to provide a quick and efficient
     * means to get a response about whether a given nickname was currently
     * on IRC. ISON only takes one (1) type of parameter: a space-separated
     * list of nicks. For each nickname in the list that is present, the
     * server adds that to its reply string. Thus the reply string may
     * return empty (none of the given nicks are present), an exact copy of
     * the parameter string (all of them present) or any other subset of the
     * set of nicks given in the parameter. The only limit on the number of
     * nicks that may be checked is that the combined length MUST NOT be too
     * large as to cause the server to chop it off so it fits in 512
     * characters.
     *
     * ISON is only processed by the server local to the client sending the
     * command and thus not passed onto other servers for further
     * processing.
     *
     * Numeric Replies:
     *
     * * [RPL_ISON]
     * * [ERR_NEEDMOREPARAMS]
     *
     * Example:
     *
     * * ISON phone trillian WiZ jarlek Avalon Angel Monstah syrk ; Sample ISON request for 7 nicks.
     */
    ISON("ISON"),
    /**
     * One of the replies that is sent back by the server after successful authentication
     *
     * Example:
     * * 001 Welcome to the Internet Relay Network `!@`
     * @see RPL_YOURHOST
     * @see RPL_CREATED
     * @see RPL_MYINFO
     * @see RPL_ISUPPRORT
     */
    RPL_WELCOME("001"),

    /**
     * One of the replies that is sent back by the server after successful authentication
     *
     * 002 Your host is ``, running version ``
     * @see RPL_WELCOME
     * @see RPL_CREATED
     * @see RPL_MYINFO
     * @see RPL_ISUPPRORT
     */
    RPL_YOURHOST("002"),

    /**
     * One of the replies that is sent back by the server after successful authentication
     *
     * Example:
     * * 003 This server was created ``
     *
     * @see RPL_WELCOME
     * @see RPL_YOURHOST
     * @see RPL_MYINFO
     * @see RPL_ISUPPRORT
     */
    RPL_CREATED("003"),

    /**
     * One of the replies that is sent back by the server after successful authentication
     *
     * 004 `   `
     * @see RPL_WELCOME
     * @see RPL_YOURHOST
     * @see RPL_CREATED
     * @see RPL_ISUPPRORT
     */
    RPL_MYINFO("004"),

    /**
     * One of the replies that is sent back by the server after successful authentication.
     *
     * According RFC 2812, 005 means RPL_BOUNCE, but Undernet and Dalnet servers pushed a de facto
     * standard to use it as RPL_ISUPPORT code, which notes what modes server supports in particular.
     *
     * Though there is no official document on RPL_ISUPPORT, you can read about it in Brocklesby's
     * IRC support draft at [irc.org](http://www.irc.org/tech_docs/draft-brocklesby-irc-isupport-03.txt)
     */
    RPL_ISUPPRORT("005"),

    /**
     * Sent by the server to a user upon connection to indicate
     * the restricted nature of the connection (user mode "+r").
     *
     * Example:
     * * :Your connection is restricted!
     */
    ERR_RESTRICTED("484"),

    /**
     * [RPL_YOUREOPER] is sent back to a client which has
     * just successfully issued an [Command.OPER] message and gained
     * operator status.
     *
     * Example:
     * * 381 :You are now an IRC operator
     */
    RPL_YOUREOPER("381"),

    /**
     * If a client sends an [Command.OPER] message and the server has
     * not been configured to allow connections from the
     * client's host as an operator, this error MUST be
     * returned.
     *
     * Example:
     * * :No O-lines for your host
     */
    ERR_NOOPERHOST("491"),

    /**
     * Error sent to any user trying to view or change the
    user mode for a user other than themselves.
     * Example:
     * * :Cannot change mode for other users
     */
    ERR_USERSDONTMATCH("502"),

    /**
     * Returned by the server to indicate that a [Command.MODE]
     * message was sent with a nickname parameter and that
     * the a mode flag sent was not recognized.
     *
     * Example:
     * * :Unknown MODE flag
     */
    ERR_UMODEUNKNOWNFLAG("501"),

    /**
     * To answer a query about a client's own mode, RPL_UMODEIS is sent back.
     *
     * Example:
     * ``
     */
    RPL_UMODEIS("221"),

    /**
     * Any command requiring operator privileges to operate
     * MUST return this error to indicate the attempt was
     * unsuccessful.
     *
     * Example:
     * * :Permission Denied- You're not an IRC operator
     */
    ERR_NOPRIVILEGES("481"),

    /**
     * Used to indicate the server name given currently does not exist.
     * Example:
     * * ` :No such server`
     */
    ERR_NOSUCHSERVER("402"),

    /**
     * Used to indicate the given channel name is invalid.
     *
     * Example:
     * * ` :No such channel`
     */
    ERR_NOSUCHCHANNEL("403"),

    /**
     * Sent to a user when they have joined the maximum
     * number of allowed channels and they try to join
     * another channel.
     *
     * Example:
     * * ` :You have joined too many channels`
     */
    ERR_TOOMANYCHANNELS("405"),

    /**
     * According to error response codes, this code is returned in 3 cases:
     * * Returned to a client which is attempting to send a [Command.PRIVMSG]/[Command.NOTICE] using the
     * user@host destination format and for a user@host which has several occurrences.
     * * Returned to a client which trying to send a [Command.PRIVMSG]/[Command.NOTICE] to too many recipients.
     * * Returned to a client which is attempting to [Command.JOIN] a safe channel using the shortname when
     * there are more than one such channel.
     *
     * Example:
     * * ` : recipients. `
     */
    ERR_TOOMANYTARGETS("407"),

    /**
     * When sending a [Command.TOPIC] message to determine the
     * channel topic, one of two replies is sent.  If
     * the topic is set, [RPL_TOPIC] is sent back else
     * [RPL_NOTOPIC].
     *
     * Example:
     * * 332 ` :`
     */
    RPL_TOPIC("332"),

    /**
     * Even though this is undocumented, topic metadata is sent under code 333
     */
    RPL_TOPICBY("333"),

    /**
     * Any command requiring 'chanop' privileges (such as
     * MODE messages) MUST return this error if the client
     * making the attempt is not a chanop on the specified
     * channel.
     *
     * Example:
     * * ` :You're not channel operator`
     */
    ERR_CHANOPRIVSNEEDED("482"),

    /**
     * Example:
     * * 324 `  `
     */
    RPL_CHANNELMODEIS("324"),

    /**
     * When listing the active 'bans' for a given channel,
     * a server is required to send the list back using the
     * [RPL_BANLIST] and [RPL_ENDOFBANLIST] messages.  A separate
     * [RPL_BANLIST] is sent for each active banmask.  After the
     * banmasks have been listed (or if none present) a
     * [RPL_ENDOFBANLIST] MUST be sent.
     *
     * Example:
     * * 367 ` `
     */
    RPL_BANLIST("367"),

    /**
     * Example:
     * * 368 `` :End of channel ban list`
     *
     * @see RPL_BANLIST
     */
    RPL_ENDOFBANLIST("368"),

    /**
     * Example:
     * * 348 ` `
     */
    RPL_EXCEPTLIST("348"),

    /**
     * Example:
     * * 349 `` :End of channel exception list
     * @see RPL_EXCEPTLIST
     */
    RPL_ENDOFEXCEPTLIST("349"),

    /**
     * When listing the 'invitations masks' for a given channel,
     * a server is required to send the list back using the
     * [RPL_INVITELIST] and [RPL_ENDOFINVITELIST] messages.  A
     * separate [RPL_INVITELIST] is sent for each active mask.
     * After the masks have been listed (or if none present) a
     * [RPL_ENDOFINVITELIST] MUST be sent.
     *
     * Example:
     * * 346 ` `
     */
    RPL_INVITELIST("346"),

    /**
     * Example:
     * * 347 `` :End of channel invite list
     * @see RPL_INVITELIST
     */
    RPL_ENDOFINVITELIST("347"),

    /**
     * Example:
     * * 325 ` `
     */
    RPL_UNIQOPIS("325"),

    /**
     * When sending a [Command.TOPIC] message to determine the
     * channel topic, one of two replies is sent.  If
     * the topic is set, [RPL_TOPIC] is sent back else
     * [RPL_NOTOPIC].
     * Example:
     * * 331 `` :No topic is set
     */
    RPL_NOTOPIC("331"),

//ERR_TOOMANYMATCHES = ""

    /**
     * "@" is used for secret channels, "*" for private
     * channels, and "=" for others (public channels).
     *
     * To reply to a [Command.NAMES] message, a reply pair consisting
     * of [RPL_NAMEREPLY] and [RPL_ENDOFNAMES] is sent by the
     * server back to the client.  If there is no channel
     * found as in the query, then only [RPL_ENDOFNAMES] is
     * returned.  The exception to this is when a [Command.NAMES]
     * message is sent with no parameters and all visible
     * channels and contents are sent back in a series of
     * [RPL_NAMEREPLY] messages with a [RPL_ENDOFNAMES] to mark
     * the end.
     *
     * Example:
     * * `( "=" / "*" / "@" )  :[ "@" / "+" ]  *( " " [ "@" / "+" ]  )`
     */
    RPL_NAMEREPLY("353"),

    /**
     * Example:
     * * 366 `` :End of NAMES list
     * @see RPL_NAMEREPLY
     */
    RPL_ENDOFNAMES("366"),

    /**
     * Replies [RPL_LIST], [RPL_LISTEND] mark the actual replies
     * with data and end of the server's response to a [Command.LIST]
     * command.  If there are no channels available to return,
     * only the end reply MUST be sent.
     *
     * Example:
     * * 322 ` <# visible> :`
     */
    RPL_LIST("322"),

    /**
     * Replies [RPL_LIST], [RPL_LISTEND] mark the actual replies
     * with data and end of the server's response to a [Command.LIST]
     * command.  If there are no channels available to return,
     * only the end reply MUST be sent.
     *
     * Example:
     * * 323 :End of LIST
     */
    RPL_LISTEND("323"),

    /**
     * Used to indicate the nickname parameter supplied to a command is currently unused.
     * Example:
     * * " :No such nick/channel"
     */
    ERR_NOSUCHNICK("401"),

    /**
     * Returned by the server to indicate that the
     * attempted [Command.INVITE] message was successful and is
     * being passed onto the end client.
     *
     * Example:
     * * 341 ` `
     *
     * Note: Example fixed to follow the errata.
     */
    RPL_INVITING("341"),

    /**
     * These replies are used with the [Command.AWAY] command (if
     * allowed).  [RPL_AWAY] is sent to any client sending a
     * [Command.PRIVMSG] to a client which is away.  [RPL_AWAY] is only
     * sent by the server to which the client is connected.
     * Replies [RPL_UNAWAY] and [RPL_NOWAWAY] are sent when the
     * client removes and sets an [Command.AWAY] message.
     * Example:
     * * 301 ` :`
     */
    RPL_AWAY("301"),

    /**
     * Sent to a user who is either (a) not on a channel
     * which is mode +n or (b) not a chanop (or mode +v) on
     * a channel which has mode +m set or where the user is
     * banned and is trying to send a PRIVMSG message to
     * that channel.
     *
     * Example:
     * * ` :Cannot send to channel`
     */
    ERR_CANNOTSENDTOCHAN("404"),

    /**
     * When responding to the [Command.MOTD] message and the [Command.MOTD] file
     * is found, the file is displayed line by line, with
     * each line no longer than 80 characters, using
     * [RPL_MOTD] format replies.  These MUST be surrounded
     * by a [RPL_MOTDSTART] (before the [RPL_MOTD]s) and an
     * [RPL_ENDOFMOTD] (after).
     *
     * Example:
     * * 375 :- `` Message of the day -
     */
    RPL_MOTDSTART("375"),

    /**
     * Example:
     * * 372 :- ``
     * @see RPL_MOTDSTART
     */
    RPL_MOTD("372"),

    /**
     * Example:
     * * 376 :End of MOTD command
     * @see RPL_MOTDSTART
     */
    RPL_ENDOFMOTD("376"),

    /**
     * Server's MOTD file could not be opened by the server.
     *
     * Example:
     * * 422 :MOTD File is missing
     */
    ERR_NOMOTD("422"),

    /**
     * Reply by the server showing its version details.
     * The `` is the version of the software being
     * used (including any patchlevel revisions) and the
     * `` is used to indicate if the server is
     * running in "debug mode".

     * The "comments" field may contain any comments about
     * the version or further version details.
     *
     * Example:
     * * 351 `.  :`
     */
    RPL_VERSION("351"),

    /**
     * reports statistics on a connection.  ``
     * identifies the particular connection, `` is
     * the amount of data that is queued and waiting to be
     * sent `` the number of messages sent,
     * and `` the amount of data sent, in
     * Kbytes. `` and `received Kbytes>`
     * are the equivalent of `` and
     * `` for received data, respectively.
     * `




© 2015 - 2025 Weber Informatics LLC | Privacy Policy