// $Id: reply.h,v 1.10 2008/07/27 21:27:07 lynx Exp $ // vim:syntax=lpc
//

// many useful and broken numerics have been added since the IRC RFCs
// were written. http://www.alien.net.au/irc/irc2numerics.html provides
// some orientation. we are implementing some things on experimental
// basis and only on prescription by adding -DIRC_BEYOND_RFC to your
// ldmud flags or #define IRC_BEYOND_RFC to your local.h

#ifdef IRC_BEYOND_RFC
// nothing right now.
#endif

#ifndef IRC_STRICTLY_RFC
# define RPL_ISUPPORT	"005"	// the de facto standard for server2client
				// settings
#endif

// added manually. not in RFC 1459.

#define RPL_CHANNELMODEUNKNOWN "472"	// Unsupported MODE

// automatically extracted from RFC 1459, chapter 6. thanks sique.

#define RPL_USERHOST        "302" // Reply format used by USERHOST to list
				 // replies to the query list. The reply
				 // string is composed as follows: <reply>
				 // ::= <nick>['*'] '=' <'+'|'-'><hostname>
				 // The '*' indicates whether the client has
				 // registered as an Operator. The '-' or
				 // '+' characters represent whether the
				 // client has set an AWAY message or not
				 // respectively.

#define RPL_ISON            "303" // Reply format used by ISON to list
				 // replies to the query list.

#define RPL_AWAY            "301" // These replies are used with the AWAY
#define RPL_UNAWAY          "305" // command (if allowed). RPL_AWAY is sent
#define RPL_NOWAWAY         "306" // to any client sending a 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 AWAY message.

#define RPL_WHOISUSER       "311" // Replies 311 - 313, 317 - 319 are all
#define RPL_WHOISSERVER     "312" // replies generated in response to a
#define RPL_WHOISOPERATOR   "313" // WHOIS message.  Given that there are
#define RPL_WHOISIDLE       "317" // enough parameters present, the answering
#define RPL_ENDOFWHOIS      "318" // server must either formulate a reply out
#define RPL_WHOISCHANNELS   "319" // of the above numerics (if the query nick
				 // is found) or return an error reply.
				 // The '*' in RPL_WHOISUSER is there as
				 // the literal character and not as a wild
				 // card.  For each reply set, only
				 // RPL_WHOISCHANNELS may appear more than
				 // once (for long lists of channel names).
				 // The '@' and '+' characters next to the
				 // channel name indicate whether a client
				 // is a channel operator or has been granted
				 // permission to speak on a moderated
				 // channel.  The RPL_ENDOFWHOIS reply is
				 // used to mark the end of processing a
				 // WHOIS message.

#define RPL_WHOWASUSER      "314" // When replying to a WHOWAS message, a
#define RPL_ENDOFWHOWAS     "369" // server must use the replies
				 // RPL_WHOWASUSER, RPL_WHOISSERVER or
				 // ERR_WASNOSUCHNICK for each nickname in
				 // the presented list. At the end of all
				 // reply batches, there must be
				 // RPL_ENDOFWHOWAS (even if there was only
				 // one reply and it was an error). 


#define RPL_LISTSTART       "321" // Replies RPL_LISTSTART, RPL_LIST,
#define RPL_LIST            "322" // RPL_LISTEND mark the start, actual
#define RPL_LISTEND         "323" // replies with data and end of the
				 // server's response to a LIST command. If
				 // there are no channels available to
				 // return, only the start and end reply
				 // must be sent.

#define RPL_CHANNELMODEIS   "324" // When sending a TOPIC message to
#define RPL_NOTOPIC         "331" // determine the channel topic, one of two
#define RPL_TOPIC           "332" // replies is sent. If the topic is set,
				 // RPL_TOPIC is sent back else RPL_NOTOPIC.
// ... we also employ "333" for delivering author and timestamp

#define RPL_INVITING        "341" // Returned by the server to indicate that
				 // the attempted INVITE message was
				 // successful and is being passed onto the
				 // end client.

#define RPL_SUMMONING       "342" // Returned by a server answering a SUMMON
				 // message to indicate that it is summoning
				 // that user.

#define RPL_VERSION         "351" // Reply by the server showing its version
				 // details. The <version> is the version of
				 // the software being used (including any
				 // patchlevel revisions) and the
				 // <debuglevel> 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.

#define RPL_WHOREPLY        "352" // The RPL_WHOREPLY and RPL_ENDOFWHO pair
#define RPL_ENDOFWHO        "315" // are used to answer a WHO message. The
				 // RPL_WHOREPLY is only sent if there is an
				 // appropriate match to the WHO query. If
				 // there is a list of parameters supplied
				 // with a WHO message, a RPL_ENDOFWHO must
				 // be sent after processing each list item
				 // with <name> being the item. 

#define RPL_NAMREPLY        "353" // To reply to a NAMES message, a reply
#define RPL_ENDOFNAMES      "366" // pair consisting of RPL_NAMREPLY 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 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. 

#define RPL_LINKS           "364" // In replying to the LINKS message, a
#define RPL_ENDOFLINKS      "365" // server must send replies back using the
				 // RPL_LINKS numeric and mark the end of
				 // the list using an RPL_ENDOFLINKS reply.

#define RPL_BANLIST         "367" // When listing the active 'bans' for a
#define RPL_ENDOFBANLIST    "368" // 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 banid. After the banids have been
				 // listed (or if none present) a
				 // RPL_ENDOFBANLIST must be sent. 

#define RPL_INFO            "371" // A server responding to an INFO message
#define RPL_ENDOFINFO       "374" // is required to send all its 'info' in a
				 // series of RPL_INFO messages with a
				 // RPL_ENDOFINFO reply to indicate the end
				 // of the replies. 

#define RPL_MOTDSTART       "375" // When responding to the MOTD message and
#define RPL_MOTD            "372" // the MOTD file is found, the file is
#define RPL_ENDOFMOTD       "376" // displayed line by line, with each line
				 // no longer than 80 characters, using
				 // RPL_MOTD format replies. These should be
				 // surrounded by a RPL_MOTDSTART (before
				 // the RPL_MOTDs) and an RPL_ENDOFMOTD
				 // (after).  

#define RPL_YOUREOPER       "381" // RPL_YOUREOPER is sent back to a client
				 // which has just successfully issued an
				 // OPER message and gained operator status.

#define RPL_REHASHING       "382" // If the REHASH option is used and an
				 // operator sends a REHASH message, an
				 // RPL_REHASHING is sent back to the
				 // operator.

#define RPL_TIME            "391" // When replying to the TIME message, a
				 // server must send the reply using the
				 // RPL_TIME format above. The string
				 // showing the time need only contain the
				 // correct day and time there. There is no
				 // further requirement for the time string.

#define RPL_USERSSTART      "392" // If the USERS message is handled by a
#define RPL_USERS           "393" // server, the replies RPL_USERSTART,
#define RPL_ENDOFUSERS      "394" // RPL_USERS, RPL_ENDOFUSERS and
#define RPL_NOUSERS         "395" // RPL_NOUSERS are used. RPL_USERSSTART
				 // must be sent first, following by either
				 // a sequence of RPL_USERS or a single
				 // RPL_NOUSER. Following this is
				 // RPL_ENDOFUSERS.   

#define RPL_TRACELINK       "200" // The RPL_TRACE* are all returned by the
#define RPL_TRACECONNECTING "201" // server in response to the TRACE message.
#define RPL_TRACEHANDSHAKE  "202" // How many are returned is dependent on
#define RPL_TRACEUNKNOWN    "203" // the the TRACE message and whether it was
#define RPL_TRACEOPERATOR   "204" // sent by an operator or not. There is no
#define RPL_TRACEUSER       "205" // predefined order for which occurs first.
#define RPL_TRACESERVER     "206" // Replies RPL_TRACEUNKNOWN,
#define RPL_TRACENEWTYPE    "208" // RPL_TRACECONNECTING and
#define RPL_TRACELOG        "261" // RPL_TRACEHANDSHAKE are all used for
				 // connections which have not been fully
				 // established and are either unknown,
				 // still attempting to connect or in the
				 // process of completing the 'server
				 // handshake'. RPL_TRACELINK is sent by any
				 // server which handles a TRACE message and
				 // has to pass it on to another server. The
				 // list of RPL_TRACELINKs sent in response
				 // to a TRACE command traversing the IRC
				 // network should reflect the actual
				 // connectivity of the servers themselves
				 // along that path. RPL_TRACENEWTYPE is to
				 // be used for any connection which does
				 // not fit in the other categories but is
				 // being displayed anyway.      

#define RPL_STATSLINKINFO   "211" 
#define RPL_STATSCOMMANDS   "212" 
#define RPL_STATSCLINE      "213" 
#define RPL_STATSNLINE      "214" 
#define RPL_STATSILINE      "215" 
#define RPL_STATSKLINE      "216" 
#define RPL_STATSYLINE      "218" 
#define RPL_ENDOFSTATS      "219" 
#define RPL_STATSLLINE      "241" 
#define RPL_STATSUPTIME     "242" 
#define RPL_STATSOLINE      "243" 
#define RPL_STATSHLINE      "244" 

#define RPL_UMODEIS         "221" // To answer a query about a client's own
				 // mode, RPL_UMODEIS is sent back.

#define RPL_LUSERCLIENT     "251" // In processing an LUSERS message, the
#define RPL_LUSEROP         "252" // server sends a set of replies from
#define RPL_LUSERUNKNOWN    "253" // RPL_LUSERCLIENT, RPL_LUSEROP,
#define RPL_LUSERCHANNELS   "254" // RPL_USERUNKNOWN, RPL_LUSERCHANNELS and
#define RPL_LUSERME         "255" // RPL_LUSERME. When replying, a server
				 // must send back RPL_LUSERCLIENT and
				 // RPL_LUSERME. The other replies are only
				 // sent back if a non-zero count is found
				 // for them.    

#define RPL_ADMINME         "256" // When replying to an ADMIN message, a
#define RPL_ADMINLOC1       "257" // server is expected to use replies
#define RPL_ADMINLOC2       "258" // RPL_ADMINME through to RPL_ADMINEMAIL
#define RPL_ADMINEMAIL      "259" // and provide a text message with each.
				 // For RPL_ADMINLOC1 a description of what
				 // city, state and country the server is in
				 // is expected, followed by details of the
				 // university and department
				 // (RPL_ADMINLOC2) and finally the
				 // administrative contact for the server
				 // (an email address here is required) in
				 // RPL_ADMINEMAIL.

#if 0
#define REPLY_MSGS ([\
    RPL_USERHOST         :  ":%s",\
    RPL_ISON             :  ":%s",\
    RPL_AWAY             :  "%s :%s",\
    RPL_UNAWAY           :  ":You are no longer marked as being away",\
    RPL_NOWAWAY          :  ":You have been marked as being away",\
    RPL_WHOISUSER        :  "%s %s %s * :%s",\
    RPL_WHOISSERVER      :  "%s %s :%s",\
    RPL_WHOISOPERATOR    :  "%s :is an IRC operator",\
    RPL_WHOISIDLE        :  "%s %s :seconds idle",\
    RPL_ENDOFWHOIS       :  "%s :End of /WHOIS list",\
    RPL_WHOISCHANNELS    :  "%s :%s",\
    RPL_WHOWASUSER       :  "%s %s %s * :%s",\
    RPL_ENDOFWHOWAS      :  "%s :End of WHOWAS",\
    RPL_LISTSTART        :  "Channel :Users Name",\
    RPL_LIST             :  "%s %d :%s",\
    RPL_LISTEND          :  ":End of /LIST",\
    RPL_CHANNELMODEIS    :  "%s %s %s",\
    RPL_NOTOPIC          :  "%s :No topic is set",\
    RPL_TOPIC            :  "%s :%s",\
    RPL_INVITING         :  "%s %s",\
    RPL_SUMMONING        :  "%s :Summoning user to IRC",\
    RPL_VERSION          :  "%d.%d %s :%s",\
    RPL_WHOREPLY         :  "%s %s %s %s %s %s :%d %s",\
    RPL_ENDOFWHO         :  "%s :End of /WHO list",\
    RPL_NAMREPLY         :  "%s :%s",\
    RPL_ENDOFNAMES       :  "%s :End of /NAMES list",\
    RPL_LINKS            :  "<mask> <server> :<hopcount> <server info>",\
    RPL_ENDOFLINKS       :  "<mask> :End of /LINKS list",\
    RPL_BANLIST          :  "<channel> <banid>",\
    RPL_ENDOFBANLIST     :  "",\
    RPL_INFO             :  ":%s",\
    RPL_ENDOFINFO        :  ":End of /INFO list",\
    RPL_MOTDSTART        :  ":- %s Message of the day - ",\
    RPL_MOTD             :  ":- %s",\
    RPL_ENDOFMOTD        :  ":End of /MOTD command",\
    RPL_YOUREOPER        :  ":You are now an IRC operator",\
    RPL_REHASHING        :  "%s :Rehashing",\
    RPL_TIME             :  "",\
    RPL_USERSSTART       :  ":UserID Terminal Host",\
    RPL_USERS            :  ":%-8s %-9s %-8s",\
    RPL_ENDOFUSERS       :  ":End of users",\
    RPL_NOUSERS          :  ":Nobody logged in",\
    RPL_TRACELINK        :  "Link %s %s %s",\
    RPL_TRACECONNECTING  :  "Try. <class> <server>",\
    RPL_TRACEHANDSHAKE   :  "H.S. <class> <server>",\
    RPL_TRACEUNKNOWN     :  "???? <class> [<client IP address in dot form>]",\
    RPL_TRACEOPERATOR    :  "Oper <class> <nick>",\
    RPL_TRACEUSER        :  "User <class> <nick>",\
    RPL_TRACESERVER      :  "Serv <class> <int>S <int>C <server> \
<nick!user|*!*>@<host|server>",\
    RPL_TRACENEWTYPE     :  "<newtype> 0 <client name>",\
    RPL_TRACELOG         :  "File <logfile> <debug level>",\
    RPL_STATSLINKINFO    :  "<linkname> <sendq> <sent messages> \
<sent bytes> <received messages> <received bytes> <time open>",\
    RPL_STATSCOMMANDS    :  "<command> <count>",\
    RPL_STATSCLINE       :  "C <host> * <name> <port> <class>",\
    RPL_STATSNLINE       :  "N <host> * <name> <port> <class>",\
    RPL_STATSILINE       :  "I <host> * <host> <port> <class>",\
    RPL_STATSKLINE       :  "K <host> * <username> <port> <class>",\
    RPL_STATSYLINE       :  "Y <class> <ping frequency> <connect \
frequency> <max sendq>",\
    RPL_ENDOFSTATS       :  "<stats letter> :End of /STATS report",\
    RPL_STATSLLINE       :  "L <hostmask> * <servername> <maxdepth>",\
    RPL_STATSUPTIME      :  ":Server Up %d days %d:%02d:%02d",\
    RPL_STATSOLINE       :  "O <hostmask> * <name>",\
    RPL_STATSHLINE       :  "H <hostmask> * <servername>",\
    RPL_UMODEIS          :  "<user mode string>",\
    RPL_LUSERCLIENT      :  ":There are <integer> users and <integer> \
invisible on <integer> servers",\
    RPL_LUSEROP          :  "<integer> :operator(s) online",\
    RPL_LUSERUNKNOWN     :  "<integer> :unknown connection(s)",\
    RPL_LUSERCHANNELS    :  "<integer> :channels formed",\
    RPL_LUSERME          :  ":I have <integer> clients and <integer> \
 servers",\
    RPL_ADMINME          :  "<server> :Administrative info",\
    RPL_ADMINLOC1        :  ":<admin info>",\
    RPL_ADMINLOC2        :  ":<admin info>",\
    RPL_ADMINEMAIL       :  ":<admin info>",\
    ])
#endif
