rfc2812.txt (122637B)
1 2 3 4 5 6 7 Network Working Group C. Kalt 8 Request for Comments: 2812 April 2000 9 Updates: 1459 10 Category: Informational 11 12 13 Internet Relay Chat: Client Protocol 14 15 Status of this Memo 16 17 This memo provides information for the Internet community. It does 18 not specify an Internet standard of any kind. Distribution of this 19 memo is unlimited. 20 21 Copyright Notice 22 23 Copyright (C) The Internet Society (2000). All Rights Reserved. 24 25 IESG NOTE: 26 27 The IRC protocol itself enables several possibilities of transferring 28 data between clients, and just like with other transfer mechanisms 29 like email, the receiver of the data has to be careful about how the 30 data is handled. For more information on security issues with the IRC 31 protocol, see for example http://www.irchelp.org/irchelp/security/. 32 33 Abstract 34 35 The IRC (Internet Relay Chat) protocol is for use with text based 36 conferencing; the simplest client being any socket program capable of 37 connecting to the server. 38 39 This document defines the Client Protocol, and assumes that the 40 reader is familiar with the IRC Architecture [IRC-ARCH]. 41 42 Table of Contents 43 44 1. Labels ..................................................... 3 45 1.1 Servers ................................................ 3 46 1.2 Clients ................................................ 3 47 1.2.1 Users ............................................. 4 48 1.2.1.1 Operators .................................... 4 49 1.2.2 Services .......................................... 4 50 1.3 Channels ............................................... 4 51 2. The IRC Client Specification ............................... 5 52 2.1 Overview ............................................... 5 53 2.2 Character codes ........................................ 5 54 2.3 Messages ............................................... 5 55 56 57 58 Kalt Informational [Page 1] 59 60 RFC 2812 Internet Relay Chat: Client Protocol April 2000 61 62 63 2.3.1 Message format in Augmented BNF ................... 6 64 2.4 Numeric replies ........................................ 8 65 2.5 Wildcard expressions ................................... 9 66 3. Message Details ............................................ 9 67 3.1 Connection Registration ................................ 10 68 3.1.1 Password message .................................. 10 69 3.1.2 Nick message ...................................... 10 70 3.1.3 User message ...................................... 11 71 3.1.4 Oper message ...................................... 12 72 3.1.5 User mode message ................................. 12 73 3.1.6 Service message ................................... 13 74 3.1.7 Quit .............................................. 14 75 3.1.8 Squit ............................................. 15 76 3.2 Channel operations ..................................... 15 77 3.2.1 Join message ...................................... 16 78 3.2.2 Part message ...................................... 17 79 3.2.3 Channel mode message .............................. 18 80 3.2.4 Topic message ..................................... 19 81 3.2.5 Names message ..................................... 20 82 3.2.6 List message ...................................... 21 83 3.2.7 Invite message .................................... 21 84 3.2.8 Kick command ...................................... 22 85 3.3 Sending messages ....................................... 23 86 3.3.1 Private messages .................................. 23 87 3.3.2 Notice ............................................ 24 88 3.4 Server queries and commands ............................ 25 89 3.4.1 Motd message ...................................... 25 90 3.4.2 Lusers message .................................... 25 91 3.4.3 Version message ................................... 26 92 3.4.4 Stats message ..................................... 26 93 3.4.5 Links message ..................................... 27 94 3.4.6 Time message ...................................... 28 95 3.4.7 Connect message ................................... 28 96 3.4.8 Trace message ..................................... 29 97 3.4.9 Admin command ..................................... 30 98 3.4.10 Info command ...................................... 31 99 3.5 Service Query and Commands ............................. 31 100 3.5.1 Servlist message .................................. 31 101 3.5.2 Squery ............................................ 32 102 3.6 User based queries ..................................... 32 103 3.6.1 Who query ......................................... 32 104 3.6.2 Whois query ....................................... 33 105 3.6.3 Whowas ............................................ 34 106 3.7 Miscellaneous messages ................................. 34 107 3.7.1 Kill message ...................................... 35 108 3.7.2 Ping message ...................................... 36 109 3.7.3 Pong message ...................................... 37 110 3.7.4 Error ............................................. 37 111 112 113 114 Kalt Informational [Page 2] 115 116 RFC 2812 Internet Relay Chat: Client Protocol April 2000 117 118 119 4. Optional features .......................................... 38 120 4.1 Away ................................................... 38 121 4.2 Rehash message ......................................... 39 122 4.3 Die message ............................................ 39 123 4.4 Restart message ........................................ 40 124 4.5 Summon message ......................................... 40 125 4.6 Users .................................................. 41 126 4.7 Operwall message ....................................... 41 127 4.8 Userhost message ....................................... 42 128 4.9 Ison message ........................................... 42 129 5. Replies .................................................... 43 130 5.1 Command responses ...................................... 43 131 5.2 Error Replies .......................................... 53 132 5.3 Reserved numerics ...................................... 59 133 6. Current implementations .................................... 60 134 7. Current problems ........................................... 60 135 7.1 Nicknames .............................................. 60 136 7.2 Limitation of wildcards ................................ 61 137 7.3 Security considerations ................................ 61 138 8. Current support and availability ........................... 61 139 9. Acknowledgements ........................................... 61 140 10. References ................................................ 62 141 11. Author's Address .......................................... 62 142 12. Full Copyright Statement .................................. 63 143 144 1. Labels 145 146 This section defines the identifiers used for the various components 147 of the IRC protocol. 148 149 1.1 Servers 150 151 Servers are uniquely identified by their name, which has a maximum 152 length of sixty three (63) characters. See the protocol grammar 153 rules (section 2.3.1) for what may and may not be used in a server 154 name. 155 156 1.2 Clients 157 158 For each client all servers MUST have the following information: a 159 netwide unique identifier (whose format depends on the type of 160 client) and the server which introduced the client. 161 162 163 164 165 166 167 168 169 170 Kalt Informational [Page 3] 171 172 RFC 2812 Internet Relay Chat: Client Protocol April 2000 173 174 175 1.2.1 Users 176 177 Each user is distinguished from other users by a unique nickname 178 having a maximum length of nine (9) characters. See the protocol 179 grammar rules (section 2.3.1) for what may and may not be used in a 180 nickname. 181 182 While the maximum length is limited to nine characters, clients 183 SHOULD accept longer strings as they may become used in future 184 evolutions of the protocol. 185 186 1.2.1.1 Operators 187 188 To allow a reasonable amount of order to be kept within the IRC 189 network, a special class of users (operators) is allowed to perform 190 general maintenance functions on the network. Although the powers 191 granted to an operator can be considered as 'dangerous', they are 192 nonetheless often necessary. Operators SHOULD be able to perform 193 basic network tasks such as disconnecting and reconnecting servers as 194 needed. In recognition of this need, the protocol discussed herein 195 provides for operators only to be able to perform such functions. 196 See sections 3.1.8 (SQUIT) and 3.4.7 (CONNECT). 197 198 A more controversial power of operators is the ability to remove a 199 user from the connected network by 'force', i.e., operators are able 200 to close the connection between any client and server. The 201 justification for this is very delicate since its abuse is both 202 destructive and annoying, and its benefits close to inexistent. For 203 further details on this type of action, see section 3.7.1 (KILL). 204 205 1.2.2 Services 206 207 Each service is distinguished from other services by a service name 208 composed of a nickname and a server name. As for users, the nickname 209 has a maximum length of nine (9) characters. See the protocol 210 grammar rules (section 2.3.1) for what may and may not be used in a 211 nickname. 212 213 1.3 Channels 214 215 Channels names are strings (beginning with a '&', '#', '+' or '!' 216 character) of length up to fifty (50) characters. Apart from the 217 requirement that the first character is either '&', '#', '+' or '!', 218 the only restriction on a channel name is that it SHALL NOT contain 219 any spaces (' '), a control G (^G or ASCII 7), a comma (','). Space 220 is used as parameter separator and command is used as a list item 221 separator by the protocol). A colon (':') can also be used as a 222 delimiter for the channel mask. Channel names are case insensitive. 223 224 225 226 Kalt Informational [Page 4] 227 228 RFC 2812 Internet Relay Chat: Client Protocol April 2000 229 230 231 See the protocol grammar rules (section 2.3.1) for the exact syntax 232 of a channel name. 233 234 Each prefix characterizes a different channel type. The definition 235 of the channel types is not relevant to the client-server protocol 236 and thus it is beyond the scope of this document. More details can 237 be found in "Internet Relay Chat: Channel Management" [IRC-CHAN]. 238 239 2. The IRC Client Specification 240 241 2.1 Overview 242 243 The protocol as described herein is for use only with client to 244 server connections when the client registers as a user. 245 246 2.2 Character codes 247 248 No specific character set is specified. The protocol is based on a 249 set of codes which are composed of eight (8) bits, making up an 250 octet. Each message may be composed of any number of these octets; 251 however, some octet values are used for control codes, which act as 252 message delimiters. 253 254 Regardless of being an 8-bit protocol, the delimiters and keywords 255 are such that protocol is mostly usable from US-ASCII terminal and a 256 telnet connection. 257 258 Because of IRC's Scandinavian origin, the characters {}|^ are 259 considered to be the lower case equivalents of the characters []\~, 260 respectively. This is a critical issue when determining the 261 equivalence of two nicknames or channel names. 262 263 2.3 Messages 264 265 Servers and clients send each other messages, which may or may not 266 generate a reply. If the message contains a valid command, as 267 described in later sections, the client should expect a reply as 268 specified but it is not advised to wait forever for the reply; client 269 to server and server to server communication is essentially 270 asynchronous by nature. 271 272 Each IRC message may consist of up to three main parts: the prefix 273 (OPTIONAL), the command, and the command parameters (maximum of 274 fifteen (15)). The prefix, command, and all parameters are separated 275 by one ASCII space character (0x20) each. 276 277 278 279 280 281 282 Kalt Informational [Page 5] 283 284 RFC 2812 Internet Relay Chat: Client Protocol April 2000 285 286 287 The presence of a prefix is indicated with a single leading ASCII 288 colon character (':', 0x3b), which MUST be the first character of the 289 message itself. There MUST be NO gap (whitespace) between the colon 290 and the prefix. The prefix is used by servers to indicate the true 291 origin of the message. If the prefix is missing from the message, it 292 is assumed to have originated from the connection from which it was 293 received from. Clients SHOULD NOT use a prefix when sending a 294 message; if they use one, the only valid prefix is the registered 295 nickname associated with the client. 296 297 The command MUST either be a valid IRC command or a three (3) digit 298 number represented in ASCII text. 299 300 IRC messages are always lines of characters terminated with a CR-LF 301 (Carriage Return - Line Feed) pair, and these messages SHALL NOT 302 exceed 512 characters in length, counting all characters including 303 the trailing CR-LF. Thus, there are 510 characters maximum allowed 304 for the command and its parameters. There is no provision for 305 continuation of message lines. See section 6 for more details about 306 current implementations. 307 308 2.3.1 Message format in Augmented BNF 309 310 The protocol messages must be extracted from the contiguous stream of 311 octets. The current solution is to designate two characters, CR and 312 LF, as message separators. Empty messages are silently ignored, 313 which permits use of the sequence CR-LF between messages without 314 extra problems. 315 316 The extracted message is parsed into the components <prefix>, 317 <command> and list of parameters (<params>). 318 319 The Augmented BNF representation for this is: 320 321 message = [ ":" prefix SPACE ] command [ params ] crlf 322 prefix = servername / ( nickname [ [ "!" user ] "@" host ] ) 323 command = 1*letter / 3digit 324 params = *14( SPACE middle ) [ SPACE ":" trailing ] 325 =/ 14( SPACE middle ) [ SPACE [ ":" ] trailing ] 326 327 nospcrlfcl = %x01-09 / %x0B-0C / %x0E-1F / %x21-39 / %x3B-FF 328 ; any octet except NUL, CR, LF, " " and ":" 329 middle = nospcrlfcl *( ":" / nospcrlfcl ) 330 trailing = *( ":" / " " / nospcrlfcl ) 331 332 SPACE = %x20 ; space character 333 crlf = %x0D %x0A ; "carriage return" "linefeed" 334 335 336 337 338 Kalt Informational [Page 6] 339 340 RFC 2812 Internet Relay Chat: Client Protocol April 2000 341 342 343 NOTES: 344 1) After extracting the parameter list, all parameters are equal 345 whether matched by <middle> or <trailing>. <trailing> is just a 346 syntactic trick to allow SPACE within the parameter. 347 348 2) The NUL (%x00) character is not special in message framing, and 349 basically could end up inside a parameter, but it would cause 350 extra complexities in normal C string handling. Therefore, NUL 351 is not allowed within messages. 352 353 Most protocol messages specify additional semantics and syntax for 354 the extracted parameter strings dictated by their position in the 355 list. For example, many server commands will assume that the first 356 parameter after the command is the list of targets, which can be 357 described with: 358 359 target = nickname / server 360 msgtarget = msgto *( "," msgto ) 361 msgto = channel / ( user [ "%" host ] "@" servername ) 362 msgto =/ ( user "%" host ) / targetmask 363 msgto =/ nickname / ( nickname "!" user "@" host ) 364 channel = ( "#" / "+" / ( "!" channelid ) / "&" ) chanstring 365 [ ":" chanstring ] 366 servername = hostname 367 host = hostname / hostaddr 368 hostname = shortname *( "." shortname ) 369 shortname = ( letter / digit ) *( letter / digit / "-" ) 370 *( letter / digit ) 371 ; as specified in RFC 1123 [HNAME] 372 hostaddr = ip4addr / ip6addr 373 ip4addr = 1*3digit "." 1*3digit "." 1*3digit "." 1*3digit 374 ip6addr = 1*hexdigit 7( ":" 1*hexdigit ) 375 ip6addr =/ "0:0:0:0:0:" ( "0" / "FFFF" ) ":" ip4addr 376 nickname = ( letter / special ) *8( letter / digit / special / "-" ) 377 targetmask = ( "$" / "#" ) mask 378 ; see details on allowed masks in section 3.3.1 379 chanstring = %x01-07 / %x08-09 / %x0B-0C / %x0E-1F / %x21-2B 380 chanstring =/ %x2D-39 / %x3B-FF 381 ; any octet except NUL, BELL, CR, LF, " ", "," and ":" 382 channelid = 5( %x41-5A / digit ) ; 5( A-Z / 0-9 ) 383 384 385 386 387 388 389 390 391 392 393 394 Kalt Informational [Page 7] 395 396 RFC 2812 Internet Relay Chat: Client Protocol April 2000 397 398 399 Other parameter syntaxes are: 400 401 user = 1*( %x01-09 / %x0B-0C / %x0E-1F / %x21-3F / %x41-FF ) 402 ; any octet except NUL, CR, LF, " " and "@" 403 key = 1*23( %x01-05 / %x07-08 / %x0C / %x0E-1F / %x21-7F ) 404 ; any 7-bit US_ASCII character, 405 ; except NUL, CR, LF, FF, h/v TABs, and " " 406 letter = %x41-5A / %x61-7A ; A-Z / a-z 407 digit = %x30-39 ; 0-9 408 hexdigit = digit / "A" / "B" / "C" / "D" / "E" / "F" 409 special = %x5B-60 / %x7B-7D 410 ; "[", "]", "\", "`", "_", "^", "{", "|", "}" 411 412 NOTES: 413 1) The <hostaddr> syntax is given here for the sole purpose of 414 indicating the format to follow for IP addresses. This 415 reflects the fact that the only available implementations of 416 this protocol uses TCP/IP as underlying network protocol but is 417 not meant to prevent other protocols to be used. 418 419 2) <hostname> has a maximum length of 63 characters. This is a 420 limitation of the protocol as internet hostnames (in 421 particular) can be longer. Such restriction is necessary 422 because IRC messages are limited to 512 characters in length. 423 Clients connecting from a host which name is longer than 63 424 characters are registered using the host (numeric) address 425 instead of the host name. 426 427 3) Some parameters used in the following sections of this 428 documents are not defined here as there is nothing specific 429 about them besides the name that is used for convenience. 430 These parameters follow the general syntax defined for 431 <params>. 432 433 2.4 Numeric replies 434 435 Most of the messages sent to the server generate a reply of some 436 sort. The most common reply is the numeric reply, used for both 437 errors and normal replies. The numeric reply MUST be sent as one 438 message consisting of the sender prefix, the three-digit numeric, and 439 the target of the reply. A numeric reply is not allowed to originate 440 from a client. In all other respects, a numeric reply is just like a 441 normal message, except that the keyword is made up of 3 numeric 442 digits rather than a string of letters. A list of different replies 443 is supplied in section 5 (Replies). 444 445 446 447 448 449 450 Kalt Informational [Page 8] 451 452 RFC 2812 Internet Relay Chat: Client Protocol April 2000 453 454 455 2.5 Wildcard expressions 456 457 When wildcards are allowed in a string, it is referred as a "mask". 458 459 For string matching purposes, the protocol allows the use of two 460 special characters: '?' (%x3F) to match one and only one character, 461 and '*' (%x2A) to match any number of any characters. These two 462 characters can be escaped using the character '\' (%x5C). 463 464 The Augmented BNF syntax for this is: 465 466 mask = *( nowild / noesc wildone / noesc wildmany ) 467 wildone = %x3F 468 wildmany = %x2A 469 nowild = %x01-29 / %x2B-3E / %x40-FF 470 ; any octet except NUL, "*", "?" 471 noesc = %x01-5B / %x5D-FF 472 ; any octet except NUL and "\" 473 matchone = %x01-FF 474 ; matches wildone 475 matchmany = *matchone 476 ; matches wildmany 477 478 Examples: 479 480 a?c ; Matches any string of 3 characters in length starting 481 with "a" and ending with "c" 482 483 a*c ; Matches any string of at least 2 characters in length 484 starting with "a" and ending with "c" 485 486 3. Message Details 487 488 On the following pages there are descriptions of each message 489 recognized by the IRC server and client. All commands described in 490 this section MUST be implemented by any server for this protocol. 491 492 Where the reply ERR_NOSUCHSERVER is returned, it means that the 493 target of the message could not be found. The server MUST NOT send 494 any other replies after this error for that command. 495 496 The server to which a client is connected is required to parse the 497 complete message, and return any appropriate errors. 498 499 If multiple parameters is presented, then each MUST be checked for 500 validity and appropriate responses MUST be sent back to the client. 501 In the case of incorrect messages which use parameter lists with 502 comma as an item separator, a reply MUST be sent for each item. 503 504 505 506 Kalt Informational [Page 9] 507 508 RFC 2812 Internet Relay Chat: Client Protocol April 2000 509 510 511 3.1 Connection Registration 512 513 The commands described here are used to register a connection with an 514 IRC server as a user as well as to correctly disconnect. 515 516 A "PASS" command is not required for a client connection to be 517 registered, but it MUST precede the latter of the NICK/USER 518 combination (for a user connection) or the SERVICE command (for a 519 service connection). The RECOMMENDED order for a client to register 520 is as follows: 521 522 1. Pass message 523 2. Nick message 2. Service message 524 3. User message 525 526 Upon success, the client will receive an RPL_WELCOME (for users) or 527 RPL_YOURESERVICE (for services) message indicating that the 528 connection is now registered and known the to the entire IRC network. 529 The reply message MUST contain the full client identifier upon which 530 it was registered. 531 532 3.1.1 Password message 533 534 Command: PASS 535 Parameters: <password> 536 537 The PASS command is used to set a 'connection password'. The 538 optional password can and MUST be set before any attempt to register 539 the connection is made. Currently this requires that user send a 540 PASS command before sending the NICK/USER combination. 541 542 Numeric Replies: 543 544 ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED 545 546 Example: 547 548 PASS secretpasswordhere 549 550 3.1.2 Nick message 551 552 553 Command: NICK 554 Parameters: <nickname> 555 556 NICK command is used to give user a nickname or change the existing 557 one. 558 559 560 561 562 Kalt Informational [Page 10] 563 564 RFC 2812 Internet Relay Chat: Client Protocol April 2000 565 566 567 Numeric Replies: 568 569 ERR_NONICKNAMEGIVEN ERR_ERRONEUSNICKNAME 570 ERR_NICKNAMEINUSE ERR_NICKCOLLISION 571 ERR_UNAVAILRESOURCE ERR_RESTRICTED 572 573 Examples: 574 575 NICK Wiz ; Introducing new nick "Wiz" if session is 576 still unregistered, or user changing his 577 nickname to "Wiz" 578 579 :WiZ!jto@tolsun.oulu.fi NICK Kilroy 580 ; Server telling that WiZ changed his 581 nickname to Kilroy. 582 583 3.1.3 User message 584 585 Command: USER 586 Parameters: <user> <mode> <unused> <realname> 587 588 The USER command is used at the beginning of connection to specify 589 the username, hostname and realname of a new user. 590 591 The <mode> parameter should be a numeric, and can be used to 592 automatically set user modes when registering with the server. This 593 parameter is a bitmask, with only 2 bits having any signification: if 594 the bit 2 is set, the user mode 'w' will be set and if the bit 3 is 595 set, the user mode 'i' will be set. (See Section 3.1.5 "User 596 Modes"). 597 598 The <realname> may contain space characters. 599 600 Numeric Replies: 601 602 ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED 603 604 Example: 605 606 USER guest 0 * :Ronnie Reagan ; User registering themselves with a 607 username of "guest" and real name 608 "Ronnie Reagan". 609 610 USER guest 8 * :Ronnie Reagan ; User registering themselves with a 611 username of "guest" and real name 612 "Ronnie Reagan", and asking to be set 613 invisible. 614 615 616 617 618 Kalt Informational [Page 11] 619 620 RFC 2812 Internet Relay Chat: Client Protocol April 2000 621 622 623 3.1.4 Oper message 624 625 Command: OPER 626 Parameters: <name> <password> 627 628 A normal user uses the OPER command to obtain operator privileges. 629 The combination of <name> and <password> are REQUIRED to gain 630 Operator privileges. Upon success, the user will receive a MODE 631 message (see section 3.1.5) indicating the new user modes. 632 633 Numeric Replies: 634 635 ERR_NEEDMOREPARAMS RPL_YOUREOPER 636 ERR_NOOPERHOST ERR_PASSWDMISMATCH 637 638 Example: 639 640 OPER foo bar ; Attempt to register as an operator 641 using a username of "foo" and "bar" 642 as the password. 643 644 3.1.5 User mode message 645 646 Command: MODE 647 Parameters: <nickname> 648 *( ( "+" / "-" ) *( "i" / "w" / "o" / "O" / "r" ) ) 649 650 The user MODE's are typically changes which affect either how the 651 client is seen by others or what 'extra' messages the client is sent. 652 653 A user MODE command MUST only be accepted if both the sender of the 654 message and the nickname given as a parameter are both the same. If 655 no other parameter is given, then the server will return the current 656 settings for the nick. 657 658 The available modes are as follows: 659 660 a - user is flagged as away; 661 i - marks a users as invisible; 662 w - user receives wallops; 663 r - restricted user connection; 664 o - operator flag; 665 O - local operator flag; 666 s - marks a user for receipt of server notices. 667 668 Additional modes may be available later on. 669 670 671 672 673 674 Kalt Informational [Page 12] 675 676 RFC 2812 Internet Relay Chat: Client Protocol April 2000 677 678 679 The flag 'a' SHALL NOT be toggled by the user using the MODE command, 680 instead use of the AWAY command is REQUIRED. 681 682 If a user attempts to make themselves an operator using the "+o" or 683 "+O" flag, the attempt SHOULD be ignored as users could bypass the 684 authentication mechanisms of the OPER command. There is no 685 restriction, however, on anyone `deopping' themselves (using "-o" or 686 "-O"). 687 688 On the other hand, if a user attempts to make themselves unrestricted 689 using the "-r" flag, the attempt SHOULD be ignored. There is no 690 restriction, however, on anyone `deopping' themselves (using "+r"). 691 This flag is typically set by the server upon connection for 692 administrative reasons. While the restrictions imposed are left up 693 to the implementation, it is typical that a restricted user not be 694 allowed to change nicknames, nor make use of the channel operator 695 status on channels. 696 697 The flag 's' is obsolete but MAY still be used. 698 699 Numeric Replies: 700 701 ERR_NEEDMOREPARAMS ERR_USERSDONTMATCH 702 ERR_UMODEUNKNOWNFLAG RPL_UMODEIS 703 704 Examples: 705 706 MODE WiZ -w ; Command by WiZ to turn off 707 reception of WALLOPS messages. 708 709 MODE Angel +i ; Command from Angel to make herself 710 invisible. 711 712 MODE WiZ -o ; WiZ 'deopping' (removing operator 713 status). 714 715 3.1.6 Service message 716 717 Command: SERVICE 718 Parameters: <nickname> <reserved> <distribution> <type> 719 <reserved> <info> 720 721 The SERVICE command to register a new service. Command parameters 722 specify the service nickname, distribution, type and info of a new 723 service. 724 725 726 727 728 729 730 Kalt Informational [Page 13] 731 732 RFC 2812 Internet Relay Chat: Client Protocol April 2000 733 734 735 The <distribution> parameter is used to specify the visibility of a 736 service. The service may only be known to servers which have a name 737 matching the distribution. For a matching server to have knowledge 738 of the service, the network path between that server and the server 739 on which the service is connected MUST be composed of servers which 740 names all match the mask. 741 742 The <type> parameter is currently reserved for future usage. 743 744 Numeric Replies: 745 746 ERR_ALREADYREGISTRED ERR_NEEDMOREPARAMS 747 ERR_ERRONEUSNICKNAME 748 RPL_YOURESERVICE RPL_YOURHOST 749 RPL_MYINFO 750 751 Example: 752 753 SERVICE dict * *.fr 0 0 :French Dictionary ; Service registering 754 itself with a name of "dict". This 755 service will only be available on 756 servers which name matches "*.fr". 757 758 3.1.7 Quit 759 760 Command: QUIT 761 Parameters: [ <Quit Message> ] 762 763 A client session is terminated with a quit message. The server 764 acknowledges this by sending an ERROR message to the client. 765 766 Numeric Replies: 767 768 None. 769 770 Example: 771 772 QUIT :Gone to have lunch ; Preferred message format. 773 774 :syrk!kalt@millennium.stealth.net QUIT :Gone to have lunch ; User 775 syrk has quit IRC to have lunch. 776 777 778 779 780 781 782 783 784 785 786 Kalt Informational [Page 14] 787 788 RFC 2812 Internet Relay Chat: Client Protocol April 2000 789 790 791 3.1.8 Squit 792 793 Command: SQUIT 794 Parameters: <server> <comment> 795 796 The SQUIT command is available only to operators. It is used to 797 disconnect server links. Also servers can generate SQUIT messages on 798 error conditions. A SQUIT message may also target a remote server 799 connection. In this case, the SQUIT message will simply be sent to 800 the remote server without affecting the servers in between the 801 operator and the remote server. 802 803 The <comment> SHOULD be supplied by all operators who execute a SQUIT 804 for a remote server. The server ordered to disconnect its peer 805 generates a WALLOPS message with <comment> included, so that other 806 users may be aware of the reason of this action. 807 808 Numeric replies: 809 810 ERR_NOPRIVILEGES ERR_NOSUCHSERVER 811 ERR_NEEDMOREPARAMS 812 813 Examples: 814 815 SQUIT tolsun.oulu.fi :Bad Link ? ; Command to uplink of the server 816 tolson.oulu.fi to terminate its 817 connection with comment "Bad Link". 818 819 :Trillian SQUIT cm22.eng.umd.edu :Server out of control ; Command 820 from Trillian from to disconnect 821 "cm22.eng.umd.edu" from the net with 822 comment "Server out of control". 823 824 3.2 Channel operations 825 826 This group of messages is concerned with manipulating channels, their 827 properties (channel modes), and their contents (typically users). 828 For this reason, these messages SHALL NOT be made available to 829 services. 830 831 All of these messages are requests which will or will not be granted 832 by the server. The server MUST send a reply informing the user 833 whether the request was granted, denied or generated an error. When 834 the server grants the request, the message is typically sent back 835 (eventually reformatted) to the user with the prefix set to the user 836 itself. 837 838 839 840 841 842 Kalt Informational [Page 15] 843 844 RFC 2812 Internet Relay Chat: Client Protocol April 2000 845 846 847 The rules governing how channels are managed are enforced by the 848 servers. These rules are beyond the scope of this document. More 849 details are found in "Internet Relay Chat: Channel Management" [IRC- 850 CHAN]. 851 852 3.2.1 Join message 853 854 Command: JOIN 855 Parameters: ( <channel> *( "," <channel> ) [ <key> *( "," <key> ) ] ) 856 / "0" 857 858 The JOIN command is used by a user to request to start listening to 859 the specific channel. Servers MUST be able to parse arguments in the 860 form of a list of target, but SHOULD NOT use lists when sending JOIN 861 messages to clients. 862 863 Once a user has joined a channel, he receives information about 864 all commands his server receives affecting the channel. This 865 includes JOIN, MODE, KICK, PART, QUIT and of course PRIVMSG/NOTICE. 866 This allows channel members to keep track of the other channel 867 members, as well as channel modes. 868 869 If a JOIN is successful, the user receives a JOIN message as 870 confirmation and is then sent the channel's topic (using RPL_TOPIC) and 871 the list of users who are on the channel (using RPL_NAMREPLY), which 872 MUST include the user joining. 873 874 Note that this message accepts a special argument ("0"), which is 875 a special request to leave all channels the user is currently a member 876 of. The server will process this message as if the user had sent 877 a PART command (See Section 3.2.2) for each channel he is a member 878 of. 879 880 Numeric Replies: 881 882 ERR_NEEDMOREPARAMS ERR_BANNEDFROMCHAN 883 ERR_INVITEONLYCHAN ERR_BADCHANNELKEY 884 ERR_CHANNELISFULL ERR_BADCHANMASK 885 ERR_NOSUCHCHANNEL ERR_TOOMANYCHANNELS 886 ERR_TOOMANYTARGETS ERR_UNAVAILRESOURCE 887 RPL_TOPIC 888 889 Examples: 890 891 JOIN #foobar ; Command to join channel #foobar. 892 893 JOIN &foo fubar ; Command to join channel &foo using 894 key "fubar". 895 896 897 898 Kalt Informational [Page 16] 899 900 RFC 2812 Internet Relay Chat: Client Protocol April 2000 901 902 903 JOIN #foo,&bar fubar ; Command to join channel #foo using 904 key "fubar" and &bar using no key. 905 906 JOIN #foo,#bar fubar,foobar ; Command to join channel #foo using 907 key "fubar", and channel #bar using 908 key "foobar". 909 910 JOIN #foo,#bar ; Command to join channels #foo and 911 #bar. 912 913 JOIN 0 ; Leave all currently joined 914 channels. 915 916 :WiZ!jto@tolsun.oulu.fi JOIN #Twilight_zone ; JOIN message from WiZ 917 on channel #Twilight_zone 918 919 3.2.2 Part message 920 921 Command: PART 922 Parameters: <channel> *( "," <channel> ) [ <Part Message> ] 923 924 The PART command causes the user sending the message to be removed 925 from the list of active members for all given channels listed in the 926 parameter string. If a "Part Message" is given, this will be sent 927 instead of the default message, the nickname. This request is always 928 granted by the server. 929 930 Servers MUST be able to parse arguments in the form of a list of 931 target, but SHOULD NOT use lists when sending PART messages to 932 clients. 933 934 Numeric Replies: 935 936 ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL 937 ERR_NOTONCHANNEL 938 939 Examples: 940 941 PART #twilight_zone ; Command to leave channel 942 "#twilight_zone" 943 944 PART #oz-ops,&group5 ; Command to leave both channels 945 "&group5" and "#oz-ops". 946 947 :WiZ!jto@tolsun.oulu.fi PART #playzone :I lost 948 ; User WiZ leaving channel 949 "#playzone" with the message "I 950 lost". 951 952 953 954 Kalt Informational [Page 17] 955 956 RFC 2812 Internet Relay Chat: Client Protocol April 2000 957 958 959 3.2.3 Channel mode message 960 961 Command: MODE 962 Parameters: <channel> *( ( "-" / "+" ) *<modes> *<modeparams> ) 963 964 The MODE command is provided so that users may query and change the 965 characteristics of a channel. For more details on available modes 966 and their uses, see "Internet Relay Chat: Channel Management" [IRC- 967 CHAN]. Note that there is a maximum limit of three (3) changes per 968 command for modes that take a parameter. 969 970 Numeric Replies: 971 972 ERR_NEEDMOREPARAMS ERR_KEYSET 973 ERR_NOCHANMODES ERR_CHANOPRIVSNEEDED 974 ERR_USERNOTINCHANNEL ERR_UNKNOWNMODE 975 RPL_CHANNELMODEIS 976 RPL_BANLIST RPL_ENDOFBANLIST 977 RPL_EXCEPTLIST RPL_ENDOFEXCEPTLIST 978 RPL_INVITELIST RPL_ENDOFINVITELIST 979 RPL_UNIQOPIS 980 981 The following examples are given to help understanding the syntax of 982 the MODE command, but refer to modes defined in "Internet Relay Chat: 983 Channel Management" [IRC-CHAN]. 984 985 Examples: 986 987 MODE #Finnish +imI *!*@*.fi ; Command to make #Finnish channel 988 moderated and 'invite-only' with user 989 with a hostname matching *.fi 990 automatically invited. 991 992 MODE #Finnish +o Kilroy ; Command to give 'chanop' privileges 993 to Kilroy on channel #Finnish. 994 995 MODE #Finnish +v Wiz ; Command to allow WiZ to speak on 996 #Finnish. 997 998 MODE #Fins -s ; Command to remove 'secret' flag 999 from channel #Fins. 1000 1001 MODE #42 +k oulu ; Command to set the channel key to 1002 "oulu". 1003 1004 MODE #42 -k oulu ; Command to remove the "oulu" 1005 channel key on channel "#42". 1006 1007 1008 1009 1010 Kalt Informational [Page 18] 1011 1012 RFC 2812 Internet Relay Chat: Client Protocol April 2000 1013 1014 1015 MODE #eu-opers +l 10 ; Command to set the limit for the 1016 number of users on channel 1017 "#eu-opers" to 10. 1018 1019 :WiZ!jto@tolsun.oulu.fi MODE #eu-opers -l 1020 ; User "WiZ" removing the limit for 1021 the number of users on channel "#eu- 1022 opers". 1023 1024 MODE &oulu +b ; Command to list ban masks set for 1025 the channel "&oulu". 1026 1027 MODE &oulu +b *!*@* ; Command to prevent all users from 1028 joining. 1029 1030 MODE &oulu +b *!*@*.edu +e *!*@*.bu.edu 1031 ; Command to prevent any user from a 1032 hostname matching *.edu from joining, 1033 except if matching *.bu.edu 1034 1035 MODE #bu +be *!*@*.edu *!*@*.bu.edu 1036 ; Comment to prevent any user from a 1037 hostname matching *.edu from joining, 1038 except if matching *.bu.edu 1039 1040 MODE #meditation e ; Command to list exception masks set 1041 for the channel "#meditation". 1042 1043 MODE #meditation I ; Command to list invitations masks 1044 set for the channel "#meditation". 1045 1046 MODE !12345ircd O ; Command to ask who the channel 1047 creator for "!12345ircd" is 1048 1049 3.2.4 Topic message 1050 1051 Command: TOPIC 1052 Parameters: <channel> [ <topic> ] 1053 1054 The TOPIC command is used to change or view the topic of a channel. 1055 The topic for channel <channel> is returned if there is no <topic> 1056 given. If the <topic> parameter is present, the topic for that 1057 channel will be changed, if this action is allowed for the user 1058 requesting it. If the <topic> parameter is an empty string, the 1059 topic for that channel will be removed. 1060 1061 1062 1063 1064 1065 1066 Kalt Informational [Page 19] 1067 1068 RFC 2812 Internet Relay Chat: Client Protocol April 2000 1069 1070 1071 Numeric Replies: 1072 1073 ERR_NEEDMOREPARAMS ERR_NOTONCHANNEL 1074 RPL_NOTOPIC RPL_TOPIC 1075 ERR_CHANOPRIVSNEEDED ERR_NOCHANMODES 1076 1077 Examples: 1078 1079 :WiZ!jto@tolsun.oulu.fi TOPIC #test :New topic ; User Wiz setting the 1080 topic. 1081 1082 TOPIC #test :another topic ; Command to set the topic on #test 1083 to "another topic". 1084 1085 TOPIC #test : ; Command to clear the topic on 1086 #test. 1087 1088 TOPIC #test ; Command to check the topic for 1089 #test. 1090 1091 3.2.5 Names message 1092 1093 Command: NAMES 1094 Parameters: [ <channel> *( "," <channel> ) [ <target> ] ] 1095 1096 By using the NAMES command, a user can list all nicknames that are 1097 visible to him. For more details on what is visible and what is not, 1098 see "Internet Relay Chat: Channel Management" [IRC-CHAN]. The 1099 <channel> parameter specifies which channel(s) to return information 1100 about. There is no error reply for bad channel names. 1101 1102 If no <channel> parameter is given, a list of all channels and their 1103 occupants is returned. At the end of this list, a list of users who 1104 are visible but either not on any channel or not on a visible channel 1105 are listed as being on `channel' "*". 1106 1107 If the <target> parameter is specified, the request is forwarded to 1108 that server which will generate the reply. 1109 1110 Wildcards are allowed in the <target> parameter. 1111 1112 Numerics: 1113 1114 ERR_TOOMANYMATCHES ERR_NOSUCHSERVER 1115 RPL_NAMREPLY RPL_ENDOFNAMES 1116 1117 1118 1119 1120 1121 1122 Kalt Informational [Page 20] 1123 1124 RFC 2812 Internet Relay Chat: Client Protocol April 2000 1125 1126 1127 Examples: 1128 1129 NAMES #twilight_zone,#42 ; Command to list visible users on 1130 #twilight_zone and #42 1131 1132 NAMES ; Command to list all visible 1133 channels and users 1134 1135 3.2.6 List message 1136 1137 Command: LIST 1138 Parameters: [ <channel> *( "," <channel> ) [ <target> ] ] 1139 1140 The list command is used to list channels and their topics. If the 1141 <channel> parameter is used, only the status of that channel is 1142 displayed. 1143 1144 If the <target> parameter is specified, the request is forwarded to 1145 that server which will generate the reply. 1146 1147 Wildcards are allowed in the <target> parameter. 1148 1149 Numeric Replies: 1150 1151 ERR_TOOMANYMATCHES ERR_NOSUCHSERVER 1152 RPL_LIST RPL_LISTEND 1153 1154 Examples: 1155 1156 LIST ; Command to list all channels. 1157 1158 LIST #twilight_zone,#42 ; Command to list channels 1159 #twilight_zone and #42 1160 1161 3.2.7 Invite message 1162 1163 Command: INVITE 1164 Parameters: <nickname> <channel> 1165 1166 The INVITE command is used to invite a user to a channel. The 1167 parameter <nickname> is the nickname of the person to be invited to 1168 the target channel <channel>. There is no requirement that the 1169 channel the target user is being invited to must exist or be a valid 1170 channel. However, if the channel exists, only members of the channel 1171 are allowed to invite other users. When the channel has invite-only 1172 flag set, only channel operators may issue INVITE command. 1173 1174 1175 1176 1177 1178 Kalt Informational [Page 21] 1179 1180 RFC 2812 Internet Relay Chat: Client Protocol April 2000 1181 1182 1183 Only the user inviting and the user being invited will receive 1184 notification of the invitation. Other channel members are not 1185 notified. (This is unlike the MODE changes, and is occasionally the 1186 source of trouble for users.) 1187 1188 Numeric Replies: 1189 1190 ERR_NEEDMOREPARAMS ERR_NOSUCHNICK 1191 ERR_NOTONCHANNEL ERR_USERONCHANNEL 1192 ERR_CHANOPRIVSNEEDED 1193 RPL_INVITING RPL_AWAY 1194 1195 Examples: 1196 1197 :Angel!wings@irc.org INVITE Wiz #Dust 1198 1199 ; Message to WiZ when he has been 1200 invited by user Angel to channel 1201 #Dust 1202 1203 INVITE Wiz #Twilight_Zone ; Command to invite WiZ to 1204 #Twilight_zone 1205 1206 3.2.8 Kick command 1207 1208 Command: KICK 1209 Parameters: <channel> *( "," <channel> ) <user> *( "," <user> ) 1210 [<comment>] 1211 1212 The KICK command can be used to request the forced removal of a user 1213 from a channel. It causes the <user> to PART from the <channel> by 1214 force. For the message to be syntactically correct, there MUST be 1215 either one channel parameter and multiple user parameter, or as many 1216 channel parameters as there are user parameters. If a "comment" is 1217 given, this will be sent instead of the default message, the nickname 1218 of the user issuing the KICK. 1219 1220 The server MUST NOT send KICK messages with multiple channels or 1221 users to clients. This is necessarily to maintain backward 1222 compatibility with old client software. 1223 1224 Numeric Replies: 1225 1226 ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL 1227 ERR_BADCHANMASK ERR_CHANOPRIVSNEEDED 1228 ERR_USERNOTINCHANNEL ERR_NOTONCHANNEL 1229 1230 1231 1232 1233 1234 Kalt Informational [Page 22] 1235 1236 RFC 2812 Internet Relay Chat: Client Protocol April 2000 1237 1238 1239 Examples: 1240 1241 KICK &Melbourne Matthew ; Command to kick Matthew from 1242 &Melbourne 1243 1244 KICK #Finnish John :Speaking English 1245 ; Command to kick John from #Finnish 1246 using "Speaking English" as the 1247 reason (comment). 1248 1249 :WiZ!jto@tolsun.oulu.fi KICK #Finnish John 1250 ; KICK message on channel #Finnish 1251 from WiZ to remove John from channel 1252 1253 3.3 Sending messages 1254 1255 The main purpose of the IRC protocol is to provide a base for clients 1256 to communicate with each other. PRIVMSG, NOTICE and SQUERY 1257 (described in Section 3.5 on Service Query and Commands) are the only 1258 messages available which actually perform delivery of a text message 1259 from one client to another - the rest just make it possible and try 1260 to ensure it happens in a reliable and structured manner. 1261 1262 3.3.1 Private messages 1263 1264 Command: PRIVMSG 1265 Parameters: <msgtarget> <text to be sent> 1266 1267 PRIVMSG is used to send private messages between users, as well as to 1268 send messages to channels. <msgtarget> is usually the nickname of 1269 the recipient of the message, or a channel name. 1270 1271 The <msgtarget> parameter may also be a host mask (#<mask>) or server 1272 mask ($<mask>). In both cases the server will only send the PRIVMSG 1273 to those who have a server or host matching the mask. The mask MUST 1274 have at least 1 (one) "." in it and no wildcards following the last 1275 ".". This requirement exists to prevent people sending messages to 1276 "#*" or "$*", which would broadcast to all users. Wildcards are the 1277 '*' and '?' characters. This extension to the PRIVMSG command is 1278 only available to operators. 1279 1280 Numeric Replies: 1281 1282 ERR_NORECIPIENT ERR_NOTEXTTOSEND 1283 ERR_CANNOTSENDTOCHAN ERR_NOTOPLEVEL 1284 ERR_WILDTOPLEVEL ERR_TOOMANYTARGETS 1285 ERR_NOSUCHNICK 1286 RPL_AWAY 1287 1288 1289 1290 Kalt Informational [Page 23] 1291 1292 RFC 2812 Internet Relay Chat: Client Protocol April 2000 1293 1294 1295 Examples: 1296 1297 :Angel!wings@irc.org PRIVMSG Wiz :Are you receiving this message ? 1298 ; Message from Angel to Wiz. 1299 1300 PRIVMSG Angel :yes I'm receiving it ! 1301 ; Command to send a message to Angel. 1302 1303 PRIVMSG jto@tolsun.oulu.fi :Hello ! 1304 ; Command to send a message to a user 1305 on server tolsun.oulu.fi with 1306 username of "jto". 1307 1308 PRIVMSG kalt%millennium.stealth.net@irc.stealth.net :Are you a frog? 1309 ; Message to a user on server 1310 irc.stealth.net with username of 1311 "kalt", and connected from the host 1312 millennium.stealth.net. 1313 1314 PRIVMSG kalt%millennium.stealth.net :Do you like cheese? 1315 ; Message to a user on the local 1316 server with username of "kalt", and 1317 connected from the host 1318 millennium.stealth.net. 1319 1320 PRIVMSG Wiz!jto@tolsun.oulu.fi :Hello ! 1321 ; Message to the user with nickname 1322 Wiz who is connected from the host 1323 tolsun.oulu.fi and has the username 1324 "jto". 1325 1326 PRIVMSG $*.fi :Server tolsun.oulu.fi rebooting. 1327 ; Message to everyone on a server 1328 which has a name matching *.fi. 1329 1330 PRIVMSG #*.edu :NSFNet is undergoing work, expect interruptions 1331 ; Message to all users who come from 1332 a host which has a name matching 1333 *.edu. 1334 1335 3.3.2 Notice 1336 1337 Command: NOTICE 1338 Parameters: <msgtarget> <text> 1339 1340 The NOTICE command is used similarly to PRIVMSG. The difference 1341 between NOTICE and PRIVMSG is that automatic replies MUST NEVER be 1342 sent in response to a NOTICE message. This rule applies to servers 1343 1344 1345 1346 Kalt Informational [Page 24] 1347 1348 RFC 2812 Internet Relay Chat: Client Protocol April 2000 1349 1350 1351 too - they MUST NOT send any error reply back to the client on 1352 receipt of a notice. The object of this rule is to avoid loops 1353 between clients automatically sending something in response to 1354 something it received. 1355 1356 This command is available to services as well as users. 1357 1358 This is typically used by services, and automatons (clients with 1359 either an AI or other interactive program controlling their actions). 1360 1361 See PRIVMSG for more details on replies and examples. 1362 1363 3.4 Server queries and commands 1364 1365 The server query group of commands has been designed to return 1366 information about any server which is connected to the network. 1367 1368 In these queries, where a parameter appears as <target>, wildcard 1369 masks are usually valid. For each parameter, however, only one query 1370 and set of replies is to be generated. In most cases, if a nickname 1371 is given, it will mean the server to which the user is connected. 1372 1373 These messages typically have little value for services, it is 1374 therefore RECOMMENDED to forbid services from using them. 1375 1376 3.4.1 Motd message 1377 1378 Command: MOTD 1379 Parameters: [ <target> ] 1380 1381 The MOTD command is used to get the "Message Of The Day" of the given 1382 server, or current server if <target> is omitted. 1383 1384 Wildcards are allowed in the <target> parameter. 1385 1386 Numeric Replies: 1387 RPL_MOTDSTART RPL_MOTD 1388 RPL_ENDOFMOTD ERR_NOMOTD 1389 1390 3.4.2 Lusers message 1391 1392 Command: LUSERS 1393 Parameters: [ <mask> [ <target> ] ] 1394 1395 The LUSERS command is used to get statistics about the size of the 1396 IRC network. If no parameter is given, the reply will be about the 1397 whole net. If a <mask> is specified, then the reply will only 1398 1399 1400 1401 1402 Kalt Informational [Page 25] 1403 1404 RFC 2812 Internet Relay Chat: Client Protocol April 2000 1405 1406 1407 concern the part of the network formed by the servers matching the 1408 mask. Finally, if the <target> parameter is specified, the request 1409 is forwarded to that server which will generate the reply. 1410 1411 Wildcards are allowed in the <target> parameter. 1412 1413 Numeric Replies: 1414 1415 RPL_LUSERCLIENT RPL_LUSEROP 1416 RPL_LUSERUNKOWN RPL_LUSERCHANNELS 1417 RPL_LUSERME ERR_NOSUCHSERVER 1418 1419 3.4.3 Version message 1420 1421 Command: VERSION 1422 Parameters: [ <target> ] 1423 1424 The VERSION command is used to query the version of the server 1425 program. An optional parameter <target> is used to query the version 1426 of the server program which a client is not directly connected to. 1427 1428 Wildcards are allowed in the <target> parameter. 1429 1430 Numeric Replies: 1431 1432 ERR_NOSUCHSERVER RPL_VERSION 1433 1434 Examples: 1435 1436 VERSION tolsun.oulu.fi ; Command to check the version of 1437 server "tolsun.oulu.fi". 1438 1439 3.4.4 Stats message 1440 1441 Command: STATS 1442 Parameters: [ <query> [ <target> ] ] 1443 1444 The stats command is used to query statistics of certain server. If 1445 <query> parameter is omitted, only the end of stats reply is sent 1446 back. 1447 1448 A query may be given for any single letter which is only checked by 1449 the destination server and is otherwise passed on by intermediate 1450 servers, ignored and unaltered. 1451 1452 Wildcards are allowed in the <target> parameter. 1453 1454 1455 1456 1457 1458 Kalt Informational [Page 26] 1459 1460 RFC 2812 Internet Relay Chat: Client Protocol April 2000 1461 1462 1463 Except for the ones below, the list of valid queries is 1464 implementation dependent. The standard queries below SHOULD be 1465 supported by the server: 1466 1467 l - returns a list of the server's connections, showing how 1468 long each connection has been established and the 1469 traffic over that connection in Kbytes and messages for 1470 each direction; 1471 m - returns the usage count for each of commands supported 1472 by the server; commands for which the usage count is 1473 zero MAY be omitted; 1474 o - returns a list of configured privileged users, 1475 operators; 1476 u - returns a string showing how long the server has been 1477 up. 1478 1479 It is also RECOMMENDED that client and server access configuration be 1480 published this way. 1481 1482 Numeric Replies: 1483 1484 ERR_NOSUCHSERVER 1485 RPL_STATSLINKINFO RPL_STATSUPTIME 1486 RPL_STATSCOMMANDS RPL_STATSOLINE 1487 RPL_ENDOFSTATS 1488 1489 Examples: 1490 1491 STATS m ; Command to check the command usage 1492 for the server you are connected to 1493 1494 3.4.5 Links message 1495 1496 Command: LINKS 1497 Parameters: [ [ <remote server> ] <server mask> ] 1498 1499 With LINKS, a user can list all servernames, which are known by the 1500 server answering the query. The returned list of servers MUST match 1501 the mask, or if no mask is given, the full list is returned. 1502 1503 If <remote server> is given in addition to <server mask>, the LINKS 1504 command is forwarded to the first server found that matches that name 1505 (if any), and that server is then required to answer the query. 1506 1507 Numeric Replies: 1508 1509 ERR_NOSUCHSERVER 1510 RPL_LINKS RPL_ENDOFLINKS 1511 1512 1513 1514 Kalt Informational [Page 27] 1515 1516 RFC 2812 Internet Relay Chat: Client Protocol April 2000 1517 1518 1519 Examples: 1520 1521 LINKS *.au ; Command to list all servers which 1522 have a name that matches *.au; 1523 1524 LINKS *.edu *.bu.edu ; Command to list servers matching 1525 *.bu.edu as seen by the first server 1526 matching *.edu. 1527 1528 3.4.6 Time message 1529 1530 Command: TIME 1531 Parameters: [ <target> ] 1532 1533 The time command is used to query local time from the specified 1534 server. If the <target> parameter is not given, the server receiving 1535 the command must reply to the query. 1536 1537 Wildcards are allowed in the <target> parameter. 1538 1539 Numeric Replies: 1540 1541 ERR_NOSUCHSERVER RPL_TIME 1542 1543 Examples: 1544 TIME tolsun.oulu.fi ; check the time on the server 1545 "tolson.oulu.fi" 1546 1547 3.4.7 Connect message 1548 1549 Command: CONNECT 1550 Parameters: <target server> <port> [ <remote server> ] 1551 1552 The CONNECT command can be used to request a server to try to 1553 establish a new connection to another server immediately. CONNECT is 1554 a privileged command and SHOULD be available only to IRC Operators. 1555 If a <remote server> is given and its mask doesn't match name of the 1556 parsing server, the CONNECT attempt is sent to the first match of 1557 remote server. Otherwise the CONNECT attempt is made by the server 1558 processing the request. 1559 1560 The server receiving a remote CONNECT command SHOULD generate a 1561 WALLOPS message describing the source and target of the request. 1562 1563 Numeric Replies: 1564 1565 ERR_NOSUCHSERVER ERR_NOPRIVILEGES 1566 ERR_NEEDMOREPARAMS 1567 1568 1569 1570 Kalt Informational [Page 28] 1571 1572 RFC 2812 Internet Relay Chat: Client Protocol April 2000 1573 1574 1575 Examples: 1576 1577 CONNECT tolsun.oulu.fi 6667 ; Command to attempt to connect local 1578 server to tolsun.oulu.fi on port 6667 1579 1580 3.4.8 Trace message 1581 1582 Command: TRACE 1583 Parameters: [ <target> ] 1584 1585 TRACE command is used to find the route to specific server and 1586 information about its peers. Each server that processes this command 1587 MUST report to the sender about it. The replies from pass-through 1588 links form a chain, which shows route to destination. After sending 1589 this reply back, the query MUST be sent to the next server until 1590 given <target> server is reached. 1591 1592 TRACE command is used to find the route to specific server. Each 1593 server that processes this message MUST tell the sender about it by 1594 sending a reply indicating it is a pass-through link, forming a chain 1595 of replies. After sending this reply back, it MUST then send the 1596 TRACE message to the next server until given server is reached. If 1597 the <target> parameter is omitted, it is RECOMMENDED that TRACE 1598 command sends a message to the sender telling which servers the local 1599 server has direct connection to. 1600 1601 If the destination given by <target> is an actual server, the 1602 destination server is REQUIRED to report all servers, services and 1603 operators which are connected to it; if the command was issued by an 1604 operator, the server MAY also report all users which are connected to 1605 it. If the destination given by <target> is a nickname, then only a 1606 reply for that nickname is given. If the <target> parameter is 1607 omitted, it is RECOMMENDED that the TRACE command is parsed as 1608 targeted to the processing server. 1609 1610 Wildcards are allowed in the <target> parameter. 1611 1612 Numeric Replies: 1613 1614 ERR_NOSUCHSERVER 1615 1616 If the TRACE message is destined for another server, all 1617 intermediate servers must return a RPL_TRACELINK reply to indicate 1618 that the TRACE passed through it and where it is going next. 1619 1620 RPL_TRACELINK 1621 1622 1623 1624 1625 1626 Kalt Informational [Page 29] 1627 1628 RFC 2812 Internet Relay Chat: Client Protocol April 2000 1629 1630 1631 A TRACE reply may be composed of any number of the following 1632 numeric replies. 1633 1634 RPL_TRACECONNECTING RPL_TRACEHANDSHAKE 1635 RPL_TRACEUNKNOWN RPL_TRACEOPERATOR 1636 RPL_TRACEUSER RPL_TRACESERVER 1637 RPL_TRACESERVICE RPL_TRACENEWTYPE 1638 RPL_TRACECLASS RPL_TRACELOG 1639 RPL_TRACEEND 1640 1641 Examples: 1642 1643 TRACE *.oulu.fi ; TRACE to a server matching 1644 *.oulu.fi 1645 1646 3.4.9 Admin command 1647 1648 Command: ADMIN 1649 Parameters: [ <target> ] 1650 1651 The admin command is used to find information about the administrator 1652 of the given server, or current server if <target> parameter is 1653 omitted. Each server MUST have the ability to forward ADMIN messages 1654 to other servers. 1655 1656 Wildcards are allowed in the <target> parameter. 1657 1658 Numeric Replies: 1659 1660 ERR_NOSUCHSERVER 1661 RPL_ADMINME RPL_ADMINLOC1 1662 RPL_ADMINLOC2 RPL_ADMINEMAIL 1663 1664 Examples: 1665 1666 ADMIN tolsun.oulu.fi ; request an ADMIN reply from 1667 tolsun.oulu.fi 1668 1669 ADMIN syrk ; ADMIN request for the server to 1670 which the user syrk is connected 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 Kalt Informational [Page 30] 1683 1684 RFC 2812 Internet Relay Chat: Client Protocol April 2000 1685 1686 1687 3.4.10 Info command 1688 1689 Command: INFO 1690 Parameters: [ <target> ] 1691 1692 The INFO command is REQUIRED to return information describing the 1693 server: its version, when it was compiled, the patchlevel, when it 1694 was started, and any other miscellaneous information which may be 1695 considered to be relevant. 1696 1697 Wildcards are allowed in the <target> parameter. 1698 1699 Numeric Replies: 1700 1701 ERR_NOSUCHSERVER 1702 RPL_INFO RPL_ENDOFINFO 1703 1704 Examples: 1705 1706 INFO csd.bu.edu ; request an INFO reply from 1707 csd.bu.edu 1708 1709 INFO Angel ; request info from the server that 1710 Angel is connected to. 1711 1712 3.5 Service Query and Commands 1713 1714 The service query group of commands has been designed to return 1715 information about any service which is connected to the network. 1716 1717 3.5.1 Servlist message 1718 1719 Command: SERVLIST 1720 Parameters: [ <mask> [ <type> ] ] 1721 1722 The SERVLIST command is used to list services currently connected to 1723 the network and visible to the user issuing the command. The 1724 optional parameters may be used to restrict the result of the query 1725 (to matching services names, and services type). 1726 1727 Numeric Replies: 1728 1729 RPL_SERVLIST RPL_SERVLISTEND 1730 1731 1732 1733 1734 1735 1736 1737 1738 Kalt Informational [Page 31] 1739 1740 RFC 2812 Internet Relay Chat: Client Protocol April 2000 1741 1742 1743 3.5.2 Squery 1744 1745 Command: SQUERY 1746 Parameters: <servicename> <text> 1747 1748 The SQUERY command is used similarly to PRIVMSG. The only difference 1749 is that the recipient MUST be a service. This is the only way for a 1750 text message to be delivered to a service. 1751 1752 See PRIVMSG for more details on replies and example. 1753 1754 Examples: 1755 1756 SQUERY irchelp :HELP privmsg 1757 ; Message to the service with 1758 nickname irchelp. 1759 1760 SQUERY dict@irc.fr :fr2en blaireau 1761 ; Message to the service with name 1762 dict@irc.fr. 1763 1764 3.6 User based queries 1765 1766 User queries are a group of commands which are primarily concerned 1767 with finding details on a particular user or group users. When using 1768 wildcards with any of these commands, if they match, they will only 1769 return information on users who are 'visible' to you. The visibility 1770 of a user is determined as a combination of the user's mode and the 1771 common set of channels you are both on. 1772 1773 Although services SHOULD NOT be using this class of message, they are 1774 allowed to. 1775 1776 3.6.1 Who query 1777 1778 Command: WHO 1779 Parameters: [ <mask> [ "o" ] ] 1780 1781 The WHO command is used by a client to generate a query which returns 1782 a list of information which 'matches' the <mask> parameter given by 1783 the client. In the absence of the <mask> parameter, all visible 1784 (users who aren't invisible (user mode +i) and who don't have a 1785 common channel with the requesting client) are listed. The same 1786 result can be achieved by using a <mask> of "0" or any wildcard which 1787 will end up matching every visible user. 1788 1789 The <mask> passed to WHO is matched against users' host, server, real 1790 name and nickname if the channel <mask> cannot be found. 1791 1792 1793 1794 Kalt Informational [Page 32] 1795 1796 RFC 2812 Internet Relay Chat: Client Protocol April 2000 1797 1798 1799 If the "o" parameter is passed only operators are returned according 1800 to the <mask> supplied. 1801 1802 Numeric Replies: 1803 1804 ERR_NOSUCHSERVER 1805 RPL_WHOREPLY RPL_ENDOFWHO 1806 1807 Examples: 1808 1809 WHO *.fi ; Command to list all users who match 1810 against "*.fi". 1811 1812 WHO jto* o ; Command to list all users with a 1813 match against "jto*" if they are an 1814 operator. 1815 1816 3.6.2 Whois query 1817 1818 Command: WHOIS 1819 Parameters: [ <target> ] <mask> *( "," <mask> ) 1820 1821 This command is used to query information about particular user. 1822 The server will answer this command with several numeric messages 1823 indicating different statuses of each user which matches the mask (if 1824 you are entitled to see them). If no wildcard is present in the 1825 <mask>, any information about that nick which you are allowed to see 1826 is presented. 1827 1828 If the <target> parameter is specified, it sends the query to a 1829 specific server. It is useful if you want to know how long the user 1830 in question has been idle as only local server (i.e., the server the 1831 user is directly connected to) knows that information, while 1832 everything else is globally known. 1833 1834 Wildcards are allowed in the <target> parameter. 1835 1836 Numeric Replies: 1837 1838 ERR_NOSUCHSERVER ERR_NONICKNAMEGIVEN 1839 RPL_WHOISUSER RPL_WHOISCHANNELS 1840 RPL_WHOISCHANNELS RPL_WHOISSERVER 1841 RPL_AWAY RPL_WHOISOPERATOR 1842 RPL_WHOISIDLE ERR_NOSUCHNICK 1843 RPL_ENDOFWHOIS 1844 1845 1846 1847 1848 1849 1850 Kalt Informational [Page 33] 1851 1852 RFC 2812 Internet Relay Chat: Client Protocol April 2000 1853 1854 1855 Examples: 1856 1857 WHOIS wiz ; return available user information 1858 about nick WiZ 1859 1860 WHOIS eff.org trillian ; ask server eff.org for user 1861 information about trillian 1862 1863 3.6.3 Whowas 1864 1865 Command: WHOWAS 1866 Parameters: <nickname> *( "," <nickname> ) [ <count> [ <target> ] ] 1867 1868 Whowas asks for information about a nickname which no longer exists. 1869 This may either be due to a nickname change or the user leaving IRC. 1870 In response to this query, the server searches through its nickname 1871 history, looking for any nicks which are lexically the same (no wild 1872 card matching here). The history is searched backward, returning the 1873 most recent entry first. If there are multiple entries, up to 1874 <count> replies will be returned (or all of them if no <count> 1875 parameter is given). If a non-positive number is passed as being 1876 <count>, then a full search is done. 1877 1878 Wildcards are allowed in the <target> parameter. 1879 1880 Numeric Replies: 1881 1882 ERR_NONICKNAMEGIVEN ERR_WASNOSUCHNICK 1883 RPL_WHOWASUSER RPL_WHOISSERVER 1884 RPL_ENDOFWHOWAS 1885 1886 Examples: 1887 1888 WHOWAS Wiz ; return all information in the nick 1889 history about nick "WiZ"; 1890 1891 WHOWAS Mermaid 9 ; return at most, the 9 most recent 1892 entries in the nick history for 1893 "Mermaid"; 1894 1895 WHOWAS Trillian 1 *.edu ; return the most recent history for 1896 "Trillian" from the first server 1897 found to match "*.edu". 1898 1899 3.7 Miscellaneous messages 1900 1901 Messages in this category do not fit into any of the above categories 1902 but are nonetheless still a part of and REQUIRED by the protocol. 1903 1904 1905 1906 Kalt Informational [Page 34] 1907 1908 RFC 2812 Internet Relay Chat: Client Protocol April 2000 1909 1910 1911 3.7.1 Kill message 1912 1913 Command: KILL 1914 Parameters: <nickname> <comment> 1915 1916 The KILL command is used to cause a client-server connection to be 1917 closed by the server which has the actual connection. Servers 1918 generate KILL messages on nickname collisions. It MAY also be 1919 available available to users who have the operator status. 1920 1921 Clients which have automatic reconnect algorithms effectively make 1922 this command useless since the disconnection is only brief. It does 1923 however break the flow of data and can be used to stop large amounts 1924 of 'flooding' from abusive users or accidents. Abusive users usually 1925 don't care as they will reconnect promptly and resume their abusive 1926 behaviour. To prevent this command from being abused, any user may 1927 elect to receive KILL messages generated for others to keep an 'eye' 1928 on would be trouble spots. 1929 1930 In an arena where nicknames are REQUIRED to be globally unique at all 1931 times, KILL messages are sent whenever 'duplicates' are detected 1932 (that is an attempt to register two users with the same nickname) in 1933 the hope that both of them will disappear and only 1 reappear. 1934 1935 When a client is removed as the result of a KILL message, the server 1936 SHOULD add the nickname to the list of unavailable nicknames in an 1937 attempt to avoid clients to reuse this name immediately which is 1938 usually the pattern of abusive behaviour often leading to useless 1939 "KILL loops". See the "IRC Server Protocol" document [IRC-SERVER] 1940 for more information on this procedure. 1941 1942 The comment given MUST reflect the actual reason for the KILL. For 1943 server-generated KILLs it usually is made up of details concerning 1944 the origins of the two conflicting nicknames. For users it is left 1945 up to them to provide an adequate reason to satisfy others who see 1946 it. To prevent/discourage fake KILLs from being generated to hide 1947 the identify of the KILLer, the comment also shows a 'kill-path' 1948 which is updated by each server it passes through, each prepending 1949 its name to the path. 1950 1951 Numeric Replies: 1952 1953 ERR_NOPRIVILEGES ERR_NEEDMOREPARAMS 1954 ERR_NOSUCHNICK ERR_CANTKILLSERVER 1955 1956 1957 1958 1959 1960 1961 1962 Kalt Informational [Page 35] 1963 1964 RFC 2812 Internet Relay Chat: Client Protocol April 2000 1965 1966 1967 NOTE: 1968 It is RECOMMENDED that only Operators be allowed to kill other users 1969 with KILL command. This command has been the subject of many 1970 controversies over the years, and along with the above 1971 recommendation, it is also widely recognized that not even operators 1972 should be allowed to kill users on remote servers. 1973 1974 3.7.2 Ping message 1975 1976 Command: PING 1977 Parameters: <server1> [ <server2> ] 1978 1979 The PING command is used to test the presence of an active client or 1980 server at the other end of the connection. Servers send a PING 1981 message at regular intervals if no other activity detected coming 1982 from a connection. If a connection fails to respond to a PING 1983 message within a set amount of time, that connection is closed. A 1984 PING message MAY be sent even if the connection is active. 1985 1986 When a PING message is received, the appropriate PONG message MUST be 1987 sent as reply to <server1> (server which sent the PING message out) 1988 as soon as possible. If the <server2> parameter is specified, it 1989 represents the target of the ping, and the message gets forwarded 1990 there. 1991 1992 Numeric Replies: 1993 1994 ERR_NOORIGIN ERR_NOSUCHSERVER 1995 1996 Examples: 1997 1998 PING tolsun.oulu.fi ; Command to send a PING message to 1999 server 2000 2001 PING WiZ tolsun.oulu.fi ; Command from WiZ to send a PING 2002 message to server "tolsun.oulu.fi" 2003 2004 PING :irc.funet.fi ; Ping message sent by server 2005 "irc.funet.fi" 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 Kalt Informational [Page 36] 2019 2020 RFC 2812 Internet Relay Chat: Client Protocol April 2000 2021 2022 2023 3.7.3 Pong message 2024 2025 Command: PONG 2026 Parameters: <server> [ <server2> ] 2027 2028 PONG message is a reply to ping message. If parameter <server2> is 2029 given, this message MUST be forwarded to given target. The <server> 2030 parameter is the name of the entity who has responded to PING message 2031 and generated this message. 2032 2033 Numeric Replies: 2034 2035 ERR_NOORIGIN ERR_NOSUCHSERVER 2036 2037 Example: 2038 2039 PONG csd.bu.edu tolsun.oulu.fi ; PONG message from csd.bu.edu to 2040 tolsun.oulu.fi 2041 2042 3.7.4 Error 2043 2044 Command: ERROR 2045 Parameters: <error message> 2046 2047 The ERROR command is for use by servers when reporting a serious or 2048 fatal error to its peers. It may also be sent from one server to 2049 another but MUST NOT be accepted from any normal unknown clients. 2050 2051 Only an ERROR message SHOULD be used for reporting errors which occur 2052 with a server-to-server link. An ERROR message is sent to the server 2053 at the other end (which reports it to appropriate local users and 2054 logs) and to appropriate local users and logs. It is not to be 2055 passed onto any other servers by a server if it is received from a 2056 server. 2057 2058 The ERROR message is also used before terminating a client 2059 connection. 2060 2061 When a server sends a received ERROR message to its operators, the 2062 message SHOULD be encapsulated inside a NOTICE message, indicating 2063 that the client was not responsible for the error. 2064 2065 Numerics: 2066 2067 None. 2068 2069 2070 2071 2072 2073 2074 Kalt Informational [Page 37] 2075 2076 RFC 2812 Internet Relay Chat: Client Protocol April 2000 2077 2078 2079 Examples: 2080 2081 ERROR :Server *.fi already exists ; ERROR message to the other server 2082 which caused this error. 2083 2084 NOTICE WiZ :ERROR from csd.bu.edu -- Server *.fi already exists 2085 ; Same ERROR message as above but 2086 sent to user WiZ on the other server. 2087 2088 4. Optional features 2089 2090 This section describes OPTIONAL messages. They are not required in a 2091 working server implementation of the protocol described herein. In 2092 the absence of the feature, an error reply message MUST be generated 2093 or an unknown command error. If the message is destined for another 2094 server to answer then it MUST be passed on (elementary parsing 2095 REQUIRED) The allocated numerics for this are listed with the 2096 messages below. 2097 2098 From this section, only the USERHOST and ISON messages are available 2099 to services. 2100 2101 4.1 Away 2102 2103 Command: AWAY 2104 Parameters: [ <text> ] 2105 2106 With the AWAY command, clients can set an automatic reply string for 2107 any PRIVMSG commands directed at them (not to a channel they are on). 2108 The server sends an automatic reply to the client sending the PRIVMSG 2109 command. The only replying server is the one to which the sending 2110 client is connected to. 2111 2112 The AWAY command is used either with one parameter, to set an AWAY 2113 message, or with no parameters, to remove the AWAY message. 2114 2115 Because of its high cost (memory and bandwidth wise), the AWAY 2116 message SHOULD only be used for client-server communication. A 2117 server MAY choose to silently ignore AWAY messages received from 2118 other servers. To update the away status of a client across servers, 2119 the user mode 'a' SHOULD be used instead. (See Section 3.1.5) 2120 2121 Numeric Replies: 2122 2123 RPL_UNAWAY RPL_NOWAWAY 2124 2125 2126 2127 2128 2129 2130 Kalt Informational [Page 38] 2131 2132 RFC 2812 Internet Relay Chat: Client Protocol April 2000 2133 2134 2135 Example: 2136 2137 AWAY :Gone to lunch. Back in 5 ; Command to set away message to 2138 "Gone to lunch. Back in 5". 2139 2140 4.2 Rehash message 2141 2142 Command: REHASH 2143 Parameters: None 2144 2145 The rehash command is an administrative command which can be used by 2146 an operator to force the server to re-read and process its 2147 configuration file. 2148 2149 Numeric Replies: 2150 2151 RPL_REHASHING ERR_NOPRIVILEGES 2152 2153 2154 Example: 2155 2156 REHASH ; message from user with operator 2157 status to server asking it to reread 2158 its configuration file. 2159 2160 4.3 Die message 2161 2162 Command: DIE 2163 Parameters: None 2164 2165 An operator can use the DIE command to shutdown the server. This 2166 message is optional since it may be viewed as a risk to allow 2167 arbitrary people to connect to a server as an operator and execute 2168 this command. 2169 2170 The DIE command MUST always be fully processed by the server to which 2171 the sending client is connected and MUST NOT be passed onto other 2172 connected servers. 2173 2174 Numeric Replies: 2175 2176 ERR_NOPRIVILEGES 2177 2178 Example: 2179 2180 DIE ; no parameters required. 2181 2182 2183 2184 2185 2186 Kalt Informational [Page 39] 2187 2188 RFC 2812 Internet Relay Chat: Client Protocol April 2000 2189 2190 2191 4.4 Restart message 2192 2193 Command: RESTART 2194 Parameters: None 2195 2196 An operator can use the restart command to force the server to 2197 restart itself. This message is optional since it may be viewed as a 2198 risk to allow arbitrary people to connect to a server as an operator 2199 and execute this command, causing (at least) a disruption to service. 2200 2201 The RESTART command MUST always be fully processed by the server to 2202 which the sending client is connected and MUST NOT be passed onto 2203 other connected servers. 2204 2205 Numeric Replies: 2206 2207 ERR_NOPRIVILEGES 2208 2209 Example: 2210 2211 RESTART ; no parameters required. 2212 2213 4.5 Summon message 2214 2215 Command: SUMMON 2216 Parameters: <user> [ <target> [ <channel> ] ] 2217 2218 The SUMMON command can be used to give users who are on a host 2219 running an IRC server a message asking them to please join IRC. This 2220 message is only sent if the target server (a) has SUMMON enabled, (b) 2221 the user is logged in and (c) the server process can write to the 2222 user's tty (or similar). 2223 2224 If no <server> parameter is given it tries to summon <user> from the 2225 server the client is connected to is assumed as the target. 2226 2227 If summon is not enabled in a server, it MUST return the 2228 ERR_SUMMONDISABLED numeric. 2229 2230 Numeric Replies: 2231 2232 ERR_NORECIPIENT ERR_FILEERROR 2233 ERR_NOLOGIN ERR_NOSUCHSERVER 2234 ERR_SUMMONDISABLED RPL_SUMMONING 2235 2236 2237 2238 2239 2240 2241 2242 Kalt Informational [Page 40] 2243 2244 RFC 2812 Internet Relay Chat: Client Protocol April 2000 2245 2246 2247 Examples: 2248 2249 SUMMON jto ; summon user jto on the server's 2250 host 2251 2252 SUMMON jto tolsun.oulu.fi ; summon user jto on the host which a 2253 server named "tolsun.oulu.fi" is 2254 running. 2255 2256 4.6 Users 2257 2258 Command: USERS 2259 Parameters: [ <target> ] 2260 2261 The USERS command returns a list of users logged into the server in a 2262 format similar to the UNIX commands who(1), rusers(1) and finger(1). 2263 If disabled, the correct numeric MUST be returned to indicate this. 2264 2265 Because of the security implications of such a command, it SHOULD be 2266 disabled by default in server implementations. Enabling it SHOULD 2267 require recompiling the server or some equivalent change rather than 2268 simply toggling an option and restarting the server. The procedure 2269 to enable this command SHOULD also include suitable large comments. 2270 2271 Numeric Replies: 2272 2273 ERR_NOSUCHSERVER ERR_FILEERROR 2274 RPL_USERSSTART RPL_USERS 2275 RPL_NOUSERS RPL_ENDOFUSERS 2276 ERR_USERSDISABLED 2277 2278 Disabled Reply: 2279 2280 ERR_USERSDISABLED 2281 2282 Example: 2283 2284 USERS eff.org ; request a list of users logged in 2285 on server eff.org 2286 2287 4.7 Operwall message 2288 2289 Command: WALLOPS 2290 Parameters: <Text to be sent> 2291 2292 The WALLOPS command is used to send a message to all currently 2293 connected users who have set the 'w' user mode for themselves. (See 2294 Section 3.1.5 "User modes"). 2295 2296 2297 2298 Kalt Informational [Page 41] 2299 2300 RFC 2812 Internet Relay Chat: Client Protocol April 2000 2301 2302 2303 After implementing WALLOPS as a user command it was found that it was 2304 often and commonly abused as a means of sending a message to a lot of 2305 people. Due to this, it is RECOMMENDED that the implementation of 2306 WALLOPS allows and recognizes only servers as the originators of 2307 WALLOPS. 2308 2309 Numeric Replies: 2310 2311 ERR_NEEDMOREPARAMS 2312 2313 Example: 2314 2315 :csd.bu.edu WALLOPS :Connect '*.uiuc.edu 6667' from Joshua ; WALLOPS 2316 message from csd.bu.edu announcing a 2317 CONNECT message it received from 2318 Joshua and acted upon. 2319 2320 4.8 Userhost message 2321 2322 Command: USERHOST 2323 Parameters: <nickname> *( SPACE <nickname> ) 2324 2325 The USERHOST command takes a list of up to 5 nicknames, each 2326 separated by a space character and returns a list of information 2327 about each nickname that it found. The returned list has each reply 2328 separated by a space. 2329 2330 Numeric Replies: 2331 2332 RPL_USERHOST ERR_NEEDMOREPARAMS 2333 2334 Example: 2335 2336 USERHOST Wiz Michael syrk ; USERHOST request for information on 2337 nicks "Wiz", "Michael", and "syrk" 2338 2339 :ircd.stealth.net 302 yournick :syrk=+syrk@millennium.stealth.net 2340 ; Reply for user syrk 2341 2342 4.9 Ison message 2343 2344 Command: ISON 2345 Parameters: <nickname> *( SPACE <nickname> ) 2346 2347 The ISON command was implemented to provide a quick and efficient 2348 means to get a response about whether a given nickname was currently 2349 on IRC. ISON only takes one (1) type of parameter: a space-separated 2350 list of nicks. For each nickname in the list that is present, the 2351 2352 2353 2354 Kalt Informational [Page 42] 2355 2356 RFC 2812 Internet Relay Chat: Client Protocol April 2000 2357 2358 2359 server adds that to its reply string. Thus the reply string may 2360 return empty (none of the given nicks are present), an exact copy of 2361 the parameter string (all of them present) or any other subset of the 2362 set of nicks given in the parameter. The only limit on the number of 2363 nicks that may be checked is that the combined length MUST NOT be too 2364 large as to cause the server to chop it off so it fits in 512 2365 characters. 2366 2367 ISON is only processed by the server local to the client sending the 2368 command and thus not passed onto other servers for further 2369 processing. 2370 2371 Numeric Replies: 2372 2373 RPL_ISON ERR_NEEDMOREPARAMS 2374 2375 Example: 2376 2377 ISON phone trillian WiZ jarlek Avalon Angel Monstah syrk 2378 ; Sample ISON request for 7 nicks. 2379 2380 5. Replies 2381 2382 The following is a list of numeric replies which are generated in 2383 response to the commands given above. Each numeric is given with its 2384 number, name and reply string. 2385 2386 5.1 Command responses 2387 2388 Numerics in the range from 001 to 099 are used for client-server 2389 connections only and should never travel between servers. Replies 2390 generated in the response to commands are found in the range from 200 2391 to 399. 2392 2393 001 RPL_WELCOME 2394 "Welcome to the Internet Relay Network 2395 <nick>!<user>@<host>" 2396 002 RPL_YOURHOST 2397 "Your host is <servername>, running version <ver>" 2398 003 RPL_CREATED 2399 "This server was created <date>" 2400 004 RPL_MYINFO 2401 "<servername> <version> <available user modes> 2402 <available channel modes>" 2403 2404 - The server sends Replies 001 to 004 to a user upon 2405 successful registration. 2406 2407 2408 2409 2410 Kalt Informational [Page 43] 2411 2412 RFC 2812 Internet Relay Chat: Client Protocol April 2000 2413 2414 2415 005 RPL_BOUNCE 2416 "Try server <server name>, port <port number>" 2417 2418 - Sent by the server to a user to suggest an alternative 2419 server. This is often used when the connection is 2420 refused because the server is already full. 2421 2422 302 RPL_USERHOST 2423 ":*1<reply> *( " " <reply> )" 2424 2425 - Reply format used by USERHOST to list replies to 2426 the query list. The reply string is composed as 2427 follows: 2428 2429 reply = nickname [ "*" ] "=" ( "+" / "-" ) hostname 2430 2431 The '*' indicates whether the client has registered 2432 as an Operator. The '-' or '+' characters represent 2433 whether the client has set an AWAY message or not 2434 respectively. 2435 2436 303 RPL_ISON 2437 ":*1<nick> *( " " <nick> )" 2438 2439 - Reply format used by ISON to list replies to the 2440 query list. 2441 2442 301 RPL_AWAY 2443 "<nick> :<away message>" 2444 305 RPL_UNAWAY 2445 ":You are no longer marked as being away" 2446 306 RPL_NOWAWAY 2447 ":You have been marked as being away" 2448 2449 - These replies are used with the AWAY command (if 2450 allowed). RPL_AWAY is sent to any client sending a 2451 PRIVMSG to a client which is away. RPL_AWAY is only 2452 sent by the server to which the client is connected. 2453 Replies RPL_UNAWAY and RPL_NOWAWAY are sent when the 2454 client removes and sets an AWAY message. 2455 2456 311 RPL_WHOISUSER 2457 "<nick> <user> <host> * :<real name>" 2458 312 RPL_WHOISSERVER 2459 "<nick> <server> :<server info>" 2460 313 RPL_WHOISOPERATOR 2461 "<nick> :is an IRC operator" 2462 2463 2464 2465 2466 Kalt Informational [Page 44] 2467 2468 RFC 2812 Internet Relay Chat: Client Protocol April 2000 2469 2470 2471 317 RPL_WHOISIDLE 2472 "<nick> <integer> :seconds idle" 2473 318 RPL_ENDOFWHOIS 2474 "<nick> :End of WHOIS list" 2475 319 RPL_WHOISCHANNELS 2476 "<nick> :*( ( "@" / "+" ) <channel> " " )" 2477 2478 - Replies 311 - 313, 317 - 319 are all replies 2479 generated in response to a WHOIS message. Given that 2480 there are enough parameters present, the answering 2481 server MUST either formulate a reply out of the above 2482 numerics (if the query nick is found) or return an 2483 error reply. The '*' in RPL_WHOISUSER is there as 2484 the literal character and not as a wild card. For 2485 each reply set, only RPL_WHOISCHANNELS may appear 2486 more than once (for long lists of channel names). 2487 The '@' and '+' characters next to the channel name 2488 indicate whether a client is a channel operator or 2489 has been granted permission to speak on a moderated 2490 channel. The RPL_ENDOFWHOIS reply is used to mark 2491 the end of processing a WHOIS message. 2492 2493 314 RPL_WHOWASUSER 2494 "<nick> <user> <host> * :<real name>" 2495 369 RPL_ENDOFWHOWAS 2496 "<nick> :End of WHOWAS" 2497 2498 - When replying to a WHOWAS message, a server MUST use 2499 the replies RPL_WHOWASUSER, RPL_WHOISSERVER or 2500 ERR_WASNOSUCHNICK for each nickname in the presented 2501 list. At the end of all reply batches, there MUST 2502 be RPL_ENDOFWHOWAS (even if there was only one reply 2503 and it was an error). 2504 2505 321 RPL_LISTSTART 2506 Obsolete. Not used. 2507 2508 322 RPL_LIST 2509 "<channel> <# visible> :<topic>" 2510 323 RPL_LISTEND 2511 ":End of LIST" 2512 2513 - Replies RPL_LIST, RPL_LISTEND mark the actual replies 2514 with data and end of the server's response to a LIST 2515 command. If there are no channels available to return, 2516 only the end reply MUST be sent. 2517 2518 2519 2520 2521 2522 Kalt Informational [Page 45] 2523 2524 RFC 2812 Internet Relay Chat: Client Protocol April 2000 2525 2526 2527 325 RPL_UNIQOPIS 2528 "<channel> <nickname>" 2529 2530 324 RPL_CHANNELMODEIS 2531 "<channel> <mode> <mode params>" 2532 2533 331 RPL_NOTOPIC 2534 "<channel> :No topic is set" 2535 332 RPL_TOPIC 2536 "<channel> :<topic>" 2537 2538 - When sending a TOPIC message to determine the 2539 channel topic, one of two replies is sent. If 2540 the topic is set, RPL_TOPIC is sent back else 2541 RPL_NOTOPIC. 2542 2543 341 RPL_INVITING 2544 "<channel> <nick>" 2545 2546 - Returned by the server to indicate that the 2547 attempted INVITE message was successful and is 2548 being passed onto the end client. 2549 2550 342 RPL_SUMMONING 2551 "<user> :Summoning user to IRC" 2552 2553 - Returned by a server answering a SUMMON message to 2554 indicate that it is summoning that user. 2555 2556 346 RPL_INVITELIST 2557 "<channel> <invitemask>" 2558 347 RPL_ENDOFINVITELIST 2559 "<channel> :End of channel invite list" 2560 2561 - When listing the 'invitations masks' for a given channel, 2562 a server is required to send the list back using the 2563 RPL_INVITELIST and RPL_ENDOFINVITELIST messages. A 2564 separate RPL_INVITELIST is sent for each active mask. 2565 After the masks have been listed (or if none present) a 2566 RPL_ENDOFINVITELIST MUST be sent. 2567 2568 348 RPL_EXCEPTLIST 2569 "<channel> <exceptionmask>" 2570 349 RPL_ENDOFEXCEPTLIST 2571 "<channel> :End of channel exception list" 2572 2573 2574 2575 2576 2577 2578 Kalt Informational [Page 46] 2579 2580 RFC 2812 Internet Relay Chat: Client Protocol April 2000 2581 2582 2583 - When listing the 'exception masks' for a given channel, 2584 a server is required to send the list back using the 2585 RPL_EXCEPTLIST and RPL_ENDOFEXCEPTLIST messages. A 2586 separate RPL_EXCEPTLIST is sent for each active mask. 2587 After the masks have been listed (or if none present) 2588 a RPL_ENDOFEXCEPTLIST MUST be sent. 2589 2590 351 RPL_VERSION 2591 "<version>.<debuglevel> <server> :<comments>" 2592 2593 - Reply by the server showing its version details. 2594 The <version> is the version of the software being 2595 used (including any patchlevel revisions) and the 2596 <debuglevel> is used to indicate if the server is 2597 running in "debug mode". 2598 2599 The "comments" field may contain any comments about 2600 the version or further version details. 2601 2602 352 RPL_WHOREPLY 2603 "<channel> <user> <host> <server> <nick> 2604 ( "H" / "G" > ["*"] [ ( "@" / "+" ) ] 2605 :<hopcount> <real name>" 2606 2607 315 RPL_ENDOFWHO 2608 "<name> :End of WHO list" 2609 2610 - The RPL_WHOREPLY and RPL_ENDOFWHO pair are used 2611 to answer a WHO message. The RPL_WHOREPLY is only 2612 sent if there is an appropriate match to the WHO 2613 query. If there is a list of parameters supplied 2614 with a WHO message, a RPL_ENDOFWHO MUST be sent 2615 after processing each list item with <name> being 2616 the item. 2617 2618 353 RPL_NAMREPLY 2619 "( "=" / "*" / "@" ) <channel> 2620 :[ "@" / "+" ] <nick> *( " " [ "@" / "+" ] <nick> ) 2621 - "@" is used for secret channels, "*" for private 2622 channels, and "=" for others (public channels). 2623 2624 366 RPL_ENDOFNAMES 2625 "<channel> :End of NAMES list" 2626 2627 - To reply to a NAMES message, a reply pair consisting 2628 of RPL_NAMREPLY and RPL_ENDOFNAMES is sent by the 2629 server back to the client. If there is no channel 2630 found as in the query, then only RPL_ENDOFNAMES is 2631 2632 2633 2634 Kalt Informational [Page 47] 2635 2636 RFC 2812 Internet Relay Chat: Client Protocol April 2000 2637 2638 2639 returned. The exception to this is when a NAMES 2640 message is sent with no parameters and all visible 2641 channels and contents are sent back in a series of 2642 RPL_NAMEREPLY messages with a RPL_ENDOFNAMES to mark 2643 the end. 2644 2645 364 RPL_LINKS 2646 "<mask> <server> :<hopcount> <server info>" 2647 365 RPL_ENDOFLINKS 2648 "<mask> :End of LINKS list" 2649 2650 - In replying to the LINKS message, a server MUST send 2651 replies back using the RPL_LINKS numeric and mark the 2652 end of the list using an RPL_ENDOFLINKS reply. 2653 2654 367 RPL_BANLIST 2655 "<channel> <banmask>" 2656 368 RPL_ENDOFBANLIST 2657 "<channel> :End of channel ban list" 2658 2659 - When listing the active 'bans' for a given channel, 2660 a server is required to send the list back using the 2661 RPL_BANLIST and RPL_ENDOFBANLIST messages. A separate 2662 RPL_BANLIST is sent for each active banmask. After the 2663 banmasks have been listed (or if none present) a 2664 RPL_ENDOFBANLIST MUST be sent. 2665 2666 371 RPL_INFO 2667 ":<string>" 2668 374 RPL_ENDOFINFO 2669 ":End of INFO list" 2670 2671 - A server responding to an INFO message is required to 2672 send all its 'info' in a series of RPL_INFO messages 2673 with a RPL_ENDOFINFO reply to indicate the end of the 2674 replies. 2675 2676 375 RPL_MOTDSTART 2677 ":- <server> Message of the day - " 2678 372 RPL_MOTD 2679 ":- <text>" 2680 376 RPL_ENDOFMOTD 2681 ":End of MOTD command" 2682 2683 - When responding to the MOTD message and the MOTD file 2684 is found, the file is displayed line by line, with 2685 each line no longer than 80 characters, using 2686 2687 2688 2689 2690 Kalt Informational [Page 48] 2691 2692 RFC 2812 Internet Relay Chat: Client Protocol April 2000 2693 2694 2695 RPL_MOTD format replies. These MUST be surrounded 2696 by a RPL_MOTDSTART (before the RPL_MOTDs) and an 2697 RPL_ENDOFMOTD (after). 2698 2699 381 RPL_YOUREOPER 2700 ":You are now an IRC operator" 2701 2702 - RPL_YOUREOPER is sent back to a client which has 2703 just successfully issued an OPER message and gained 2704 operator status. 2705 2706 382 RPL_REHASHING 2707 "<config file> :Rehashing" 2708 2709 - If the REHASH option is used and an operator sends 2710 a REHASH message, an RPL_REHASHING is sent back to 2711 the operator. 2712 2713 383 RPL_YOURESERVICE 2714 "You are service <servicename>" 2715 2716 - Sent by the server to a service upon successful 2717 registration. 2718 2719 391 RPL_TIME 2720 "<server> :<string showing server's local time>" 2721 2722 - When replying to the TIME message, a server MUST send 2723 the reply using the RPL_TIME format above. The string 2724 showing the time need only contain the correct day and 2725 time there. There is no further requirement for the 2726 time string. 2727 2728 392 RPL_USERSSTART 2729 ":UserID Terminal Host" 2730 393 RPL_USERS 2731 ":<username> <ttyline> <hostname>" 2732 394 RPL_ENDOFUSERS 2733 ":End of users" 2734 395 RPL_NOUSERS 2735 ":Nobody logged in" 2736 2737 - If the USERS message is handled by a server, the 2738 replies RPL_USERSTART, RPL_USERS, RPL_ENDOFUSERS and 2739 RPL_NOUSERS are used. RPL_USERSSTART MUST be sent 2740 first, following by either a sequence of RPL_USERS 2741 or a single RPL_NOUSER. Following this is 2742 RPL_ENDOFUSERS. 2743 2744 2745 2746 Kalt Informational [Page 49] 2747 2748 RFC 2812 Internet Relay Chat: Client Protocol April 2000 2749 2750 2751 200 RPL_TRACELINK 2752 "Link <version & debug level> <destination> 2753 <next server> V<protocol version> 2754 <link uptime in seconds> <backstream sendq> 2755 <upstream sendq>" 2756 201 RPL_TRACECONNECTING 2757 "Try. <class> <server>" 2758 202 RPL_TRACEHANDSHAKE 2759 "H.S. <class> <server>" 2760 203 RPL_TRACEUNKNOWN 2761 "???? <class> [<client IP address in dot form>]" 2762 204 RPL_TRACEOPERATOR 2763 "Oper <class> <nick>" 2764 205 RPL_TRACEUSER 2765 "User <class> <nick>" 2766 206 RPL_TRACESERVER 2767 "Serv <class> <int>S <int>C <server> 2768 <nick!user|*!*>@<host|server> V<protocol version>" 2769 207 RPL_TRACESERVICE 2770 "Service <class> <name> <type> <active type>" 2771 208 RPL_TRACENEWTYPE 2772 "<newtype> 0 <client name>" 2773 209 RPL_TRACECLASS 2774 "Class <class> <count>" 2775 210 RPL_TRACERECONNECT 2776 Unused. 2777 261 RPL_TRACELOG 2778 "File <logfile> <debug level>" 2779 262 RPL_TRACEEND 2780 "<server name> <version & debug level> :End of TRACE" 2781 2782 - The RPL_TRACE* are all returned by the server in 2783 response to the TRACE message. How many are 2784 returned is dependent on the TRACE message and 2785 whether it was sent by an operator or not. There 2786 is no predefined order for which occurs first. 2787 Replies RPL_TRACEUNKNOWN, RPL_TRACECONNECTING and 2788 RPL_TRACEHANDSHAKE are all used for connections 2789 which have not been fully established and are either 2790 unknown, still attempting to connect or in the 2791 process of completing the 'server handshake'. 2792 RPL_TRACELINK is sent by any server which handles 2793 a TRACE message and has to pass it on to another 2794 server. The list of RPL_TRACELINKs sent in 2795 response to a TRACE command traversing the IRC 2796 network should reflect the actual connectivity of 2797 the servers themselves along that path. 2798 2799 2800 2801 2802 Kalt Informational [Page 50] 2803 2804 RFC 2812 Internet Relay Chat: Client Protocol April 2000 2805 2806 2807 RPL_TRACENEWTYPE is to be used for any connection 2808 which does not fit in the other categories but is 2809 being displayed anyway. 2810 RPL_TRACEEND is sent to indicate the end of the list. 2811 2812 211 RPL_STATSLINKINFO 2813 "<linkname> <sendq> <sent messages> 2814 <sent Kbytes> <received messages> 2815 <received Kbytes> <time open>" 2816 2817 - reports statistics on a connection. <linkname> 2818 identifies the particular connection, <sendq> is 2819 the amount of data that is queued and waiting to be 2820 sent <sent messages> the number of messages sent, 2821 and <sent Kbytes> the amount of data sent, in 2822 Kbytes. <received messages> and <received Kbytes> 2823 are the equivalent of <sent messages> and <sent 2824 Kbytes> for received data, respectively. <time 2825 open> indicates how long ago the connection was 2826 opened, in seconds. 2827 2828 212 RPL_STATSCOMMANDS 2829 "<command> <count> <byte count> <remote count>" 2830 2831 - reports statistics on commands usage. 2832 2833 219 RPL_ENDOFSTATS 2834 "<stats letter> :End of STATS report" 2835 2836 242 RPL_STATSUPTIME 2837 ":Server Up %d days %d:%02d:%02d" 2838 2839 - reports the server uptime. 2840 2841 243 RPL_STATSOLINE 2842 "O <hostmask> * <name>" 2843 2844 - reports the allowed hosts from where user may become IRC 2845 operators. 2846 2847 221 RPL_UMODEIS 2848 "<user mode string>" 2849 2850 - To answer a query about a client's own mode, 2851 RPL_UMODEIS is sent back. 2852 2853 234 RPL_SERVLIST 2854 "<name> <server> <mask> <type> <hopcount> <info>" 2855 2856 2857 2858 Kalt Informational [Page 51] 2859 2860 RFC 2812 Internet Relay Chat: Client Protocol April 2000 2861 2862 2863 235 RPL_SERVLISTEND 2864 "<mask> <type> :End of service listing" 2865 2866 - When listing services in reply to a SERVLIST message, 2867 a server is required to send the list back using the 2868 RPL_SERVLIST and RPL_SERVLISTEND messages. A separate 2869 RPL_SERVLIST is sent for each service. After the 2870 services have been listed (or if none present) a 2871 RPL_SERVLISTEND MUST be sent. 2872 2873 251 RPL_LUSERCLIENT 2874 ":There are <integer> users and <integer> 2875 services on <integer> servers" 2876 252 RPL_LUSEROP 2877 "<integer> :operator(s) online" 2878 253 RPL_LUSERUNKNOWN 2879 "<integer> :unknown connection(s)" 2880 254 RPL_LUSERCHANNELS 2881 "<integer> :channels formed" 2882 255 RPL_LUSERME 2883 ":I have <integer> clients and <integer> 2884 servers" 2885 2886 - In processing an LUSERS message, the server 2887 sends a set of replies from RPL_LUSERCLIENT, 2888 RPL_LUSEROP, RPL_USERUNKNOWN, 2889 RPL_LUSERCHANNELS and RPL_LUSERME. When 2890 replying, a server MUST send back 2891 RPL_LUSERCLIENT and RPL_LUSERME. The other 2892 replies are only sent back if a non-zero count 2893 is found for them. 2894 2895 256 RPL_ADMINME 2896 "<server> :Administrative info" 2897 257 RPL_ADMINLOC1 2898 ":<admin info>" 2899 258 RPL_ADMINLOC2 2900 ":<admin info>" 2901 259 RPL_ADMINEMAIL 2902 ":<admin info>" 2903 2904 - When replying to an ADMIN message, a server 2905 is expected to use replies RPL_ADMINME 2906 through to RPL_ADMINEMAIL and provide a text 2907 message with each. For RPL_ADMINLOC1 a 2908 description of what city, state and country 2909 the server is in is expected, followed by 2910 details of the institution (RPL_ADMINLOC2) 2911 2912 2913 2914 Kalt Informational [Page 52] 2915 2916 RFC 2812 Internet Relay Chat: Client Protocol April 2000 2917 2918 2919 and finally the administrative contact for the 2920 server (an email address here is REQUIRED) 2921 in RPL_ADMINEMAIL. 2922 2923 263 RPL_TRYAGAIN 2924 "<command> :Please wait a while and try again." 2925 2926 - When a server drops a command without processing it, 2927 it MUST use the reply RPL_TRYAGAIN to inform the 2928 originating client. 2929 2930 5.2 Error Replies 2931 2932 Error replies are found in the range from 400 to 599. 2933 2934 401 ERR_NOSUCHNICK 2935 "<nickname> :No such nick/channel" 2936 2937 - Used to indicate the nickname parameter supplied to a 2938 command is currently unused. 2939 2940 402 ERR_NOSUCHSERVER 2941 "<server name> :No such server" 2942 2943 - Used to indicate the server name given currently 2944 does not exist. 2945 2946 403 ERR_NOSUCHCHANNEL 2947 "<channel name> :No such channel" 2948 2949 - Used to indicate the given channel name is invalid. 2950 2951 404 ERR_CANNOTSENDTOCHAN 2952 "<channel name> :Cannot send to channel" 2953 2954 - Sent to a user who is either (a) not on a channel 2955 which is mode +n or (b) not a chanop (or mode +v) on 2956 a channel which has mode +m set or where the user is 2957 banned and is trying to send a PRIVMSG message to 2958 that channel. 2959 2960 405 ERR_TOOMANYCHANNELS 2961 "<channel name> :You have joined too many channels" 2962 2963 - Sent to a user when they have joined the maximum 2964 number of allowed channels and they try to join 2965 another channel. 2966 2967 2968 2969 2970 Kalt Informational [Page 53] 2971 2972 RFC 2812 Internet Relay Chat: Client Protocol April 2000 2973 2974 2975 406 ERR_WASNOSUCHNICK 2976 "<nickname> :There was no such nickname" 2977 2978 - Returned by WHOWAS to indicate there is no history 2979 information for that nickname. 2980 2981 407 ERR_TOOMANYTARGETS 2982 "<target> :<error code> recipients. <abort message>" 2983 2984 - Returned to a client which is attempting to send a 2985 PRIVMSG/NOTICE using the user@host destination format 2986 and for a user@host which has several occurrences. 2987 2988 - Returned to a client which trying to send a 2989 PRIVMSG/NOTICE to too many recipients. 2990 2991 - Returned to a client which is attempting to JOIN a safe 2992 channel using the shortname when there are more than one 2993 such channel. 2994 2995 408 ERR_NOSUCHSERVICE 2996 "<service name> :No such service" 2997 2998 - Returned to a client which is attempting to send a SQUERY 2999 to a service which does not exist. 3000 3001 409 ERR_NOORIGIN 3002 ":No origin specified" 3003 3004 - PING or PONG message missing the originator parameter. 3005 3006 411 ERR_NORECIPIENT 3007 ":No recipient given (<command>)" 3008 412 ERR_NOTEXTTOSEND 3009 ":No text to send" 3010 413 ERR_NOTOPLEVEL 3011 "<mask> :No toplevel domain specified" 3012 414 ERR_WILDTOPLEVEL 3013 "<mask> :Wildcard in toplevel domain" 3014 415 ERR_BADMASK 3015 "<mask> :Bad Server/host mask" 3016 3017 - 412 - 415 are returned by PRIVMSG to indicate that 3018 the message wasn't delivered for some reason. 3019 ERR_NOTOPLEVEL and ERR_WILDTOPLEVEL are errors that 3020 are returned when an invalid use of 3021 "PRIVMSG $<server>" or "PRIVMSG #<host>" is attempted. 3022 3023 3024 3025 3026 Kalt Informational [Page 54] 3027 3028 RFC 2812 Internet Relay Chat: Client Protocol April 2000 3029 3030 3031 421 ERR_UNKNOWNCOMMAND 3032 "<command> :Unknown command" 3033 3034 - Returned to a registered client to indicate that the 3035 command sent is unknown by the server. 3036 3037 422 ERR_NOMOTD 3038 ":MOTD File is missing" 3039 3040 - Server's MOTD file could not be opened by the server. 3041 3042 423 ERR_NOADMININFO 3043 "<server> :No administrative info available" 3044 3045 - Returned by a server in response to an ADMIN message 3046 when there is an error in finding the appropriate 3047 information. 3048 3049 424 ERR_FILEERROR 3050 ":File error doing <file op> on <file>" 3051 3052 - Generic error message used to report a failed file 3053 operation during the processing of a message. 3054 3055 431 ERR_NONICKNAMEGIVEN 3056 ":No nickname given" 3057 3058 - Returned when a nickname parameter expected for a 3059 command and isn't found. 3060 3061 432 ERR_ERRONEUSNICKNAME 3062 "<nick> :Erroneous nickname" 3063 3064 - Returned after receiving a NICK message which contains 3065 characters which do not fall in the defined set. See 3066 section 2.3.1 for details on valid nicknames. 3067 3068 433 ERR_NICKNAMEINUSE 3069 "<nick> :Nickname is already in use" 3070 3071 - Returned when a NICK message is processed that results 3072 in an attempt to change to a currently existing 3073 nickname. 3074 3075 3076 3077 3078 3079 3080 3081 3082 Kalt Informational [Page 55] 3083 3084 RFC 2812 Internet Relay Chat: Client Protocol April 2000 3085 3086 3087 436 ERR_NICKCOLLISION 3088 "<nick> :Nickname collision KILL from <user>@<host>" 3089 3090 - Returned by a server to a client when it detects a 3091 nickname collision (registered of a NICK that 3092 already exists by another server). 3093 3094 437 ERR_UNAVAILRESOURCE 3095 "<nick/channel> :Nick/channel is temporarily unavailable" 3096 3097 - Returned by a server to a user trying to join a channel 3098 currently blocked by the channel delay mechanism. 3099 3100 - Returned by a server to a user trying to change nickname 3101 when the desired nickname is blocked by the nick delay 3102 mechanism. 3103 3104 441 ERR_USERNOTINCHANNEL 3105 "<nick> <channel> :They aren't on that channel" 3106 3107 - Returned by the server to indicate that the target 3108 user of the command is not on the given channel. 3109 3110 442 ERR_NOTONCHANNEL 3111 "<channel> :You're not on that channel" 3112 3113 - Returned by the server whenever a client tries to 3114 perform a channel affecting command for which the 3115 client isn't a member. 3116 3117 443 ERR_USERONCHANNEL 3118 "<user> <channel> :is already on channel" 3119 3120 - Returned when a client tries to invite a user to a 3121 channel they are already on. 3122 3123 444 ERR_NOLOGIN 3124 "<user> :User not logged in" 3125 3126 - Returned by the summon after a SUMMON command for a 3127 user was unable to be performed since they were not 3128 logged in. 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 Kalt Informational [Page 56] 3139 3140 RFC 2812 Internet Relay Chat: Client Protocol April 2000 3141 3142 3143 445 ERR_SUMMONDISABLED 3144 ":SUMMON has been disabled" 3145 3146 - Returned as a response to the SUMMON command. MUST be 3147 returned by any server which doesn't implement it. 3148 3149 446 ERR_USERSDISABLED 3150 ":USERS has been disabled" 3151 3152 - Returned as a response to the USERS command. MUST be 3153 returned by any server which does not implement it. 3154 3155 451 ERR_NOTREGISTERED 3156 ":You have not registered" 3157 3158 - Returned by the server to indicate that the client 3159 MUST be registered before the server will allow it 3160 to be parsed in detail. 3161 3162 461 ERR_NEEDMOREPARAMS 3163 "<command> :Not enough parameters" 3164 3165 - Returned by the server by numerous commands to 3166 indicate to the client that it didn't supply enough 3167 parameters. 3168 3169 462 ERR_ALREADYREGISTRED 3170 ":Unauthorized command (already registered)" 3171 3172 - Returned by the server to any link which tries to 3173 change part of the registered details (such as 3174 password or user details from second USER message). 3175 3176 463 ERR_NOPERMFORHOST 3177 ":Your host isn't among the privileged" 3178 3179 - Returned to a client which attempts to register with 3180 a server which does not been setup to allow 3181 connections from the host the attempted connection 3182 is tried. 3183 3184 464 ERR_PASSWDMISMATCH 3185 ":Password incorrect" 3186 3187 - Returned to indicate a failed attempt at registering 3188 a connection for which a password was required and 3189 was either not given or incorrect. 3190 3191 3192 3193 3194 Kalt Informational [Page 57] 3195 3196 RFC 2812 Internet Relay Chat: Client Protocol April 2000 3197 3198 3199 465 ERR_YOUREBANNEDCREEP 3200 ":You are banned from this server" 3201 3202 - Returned after an attempt to connect and register 3203 yourself with a server which has been setup to 3204 explicitly deny connections to you. 3205 3206 466 ERR_YOUWILLBEBANNED 3207 3208 - Sent by a server to a user to inform that access to the 3209 server will soon be denied. 3210 3211 467 ERR_KEYSET 3212 "<channel> :Channel key already set" 3213 471 ERR_CHANNELISFULL 3214 "<channel> :Cannot join channel (+l)" 3215 472 ERR_UNKNOWNMODE 3216 "<char> :is unknown mode char to me for <channel>" 3217 473 ERR_INVITEONLYCHAN 3218 "<channel> :Cannot join channel (+i)" 3219 474 ERR_BANNEDFROMCHAN 3220 "<channel> :Cannot join channel (+b)" 3221 475 ERR_BADCHANNELKEY 3222 "<channel> :Cannot join channel (+k)" 3223 476 ERR_BADCHANMASK 3224 "<channel> :Bad Channel Mask" 3225 477 ERR_NOCHANMODES 3226 "<channel> :Channel doesn't support modes" 3227 478 ERR_BANLISTFULL 3228 "<channel> <char> :Channel list is full" 3229 3230 481 ERR_NOPRIVILEGES 3231 ":Permission Denied- You're not an IRC operator" 3232 3233 - Any command requiring operator privileges to operate 3234 MUST return this error to indicate the attempt was 3235 unsuccessful. 3236 3237 482 ERR_CHANOPRIVSNEEDED 3238 "<channel> :You're not channel operator" 3239 3240 - Any command requiring 'chanop' privileges (such as 3241 MODE messages) MUST return this error if the client 3242 making the attempt is not a chanop on the specified 3243 channel. 3244 3245 3246 3247 3248 3249 3250 Kalt Informational [Page 58] 3251 3252 RFC 2812 Internet Relay Chat: Client Protocol April 2000 3253 3254 3255 483 ERR_CANTKILLSERVER 3256 ":You can't kill a server!" 3257 3258 - Any attempts to use the KILL command on a server 3259 are to be refused and this error returned directly 3260 to the client. 3261 3262 484 ERR_RESTRICTED 3263 ":Your connection is restricted!" 3264 3265 - Sent by the server to a user upon connection to indicate 3266 the restricted nature of the connection (user mode "+r"). 3267 3268 485 ERR_UNIQOPPRIVSNEEDED 3269 ":You're not the original channel operator" 3270 3271 - Any MODE requiring "channel creator" privileges MUST 3272 return this error if the client making the attempt is not 3273 a chanop on the specified channel. 3274 3275 491 ERR_NOOPERHOST 3276 ":No O-lines for your host" 3277 3278 - If a client sends an OPER message and the server has 3279 not been configured to allow connections from the 3280 client's host as an operator, this error MUST be 3281 returned. 3282 3283 501 ERR_UMODEUNKNOWNFLAG 3284 ":Unknown MODE flag" 3285 3286 - Returned by the server to indicate that a MODE 3287 message was sent with a nickname parameter and that 3288 the a mode flag sent was not recognized. 3289 3290 502 ERR_USERSDONTMATCH 3291 ":Cannot change mode for other users" 3292 3293 - Error sent to any user trying to view or change the 3294 user mode for a user other than themselves. 3295 3296 5.3 Reserved numerics 3297 3298 These numerics are not described above since they fall into one of 3299 the following categories: 3300 3301 1. no longer in use; 3302 3303 3304 3305 3306 Kalt Informational [Page 59] 3307 3308 RFC 2812 Internet Relay Chat: Client Protocol April 2000 3309 3310 3311 2. reserved for future planned use; 3312 3313 3. in current use but are part of a non-generic 'feature' of 3314 the current IRC server. 3315 3316 231 RPL_SERVICEINFO 232 RPL_ENDOFSERVICES 3317 233 RPL_SERVICE 3318 300 RPL_NONE 316 RPL_WHOISCHANOP 3319 361 RPL_KILLDONE 362 RPL_CLOSING 3320 363 RPL_CLOSEEND 373 RPL_INFOSTART 3321 384 RPL_MYPORTIS 3322 3323 213 RPL_STATSCLINE 214 RPL_STATSNLINE 3324 215 RPL_STATSILINE 216 RPL_STATSKLINE 3325 217 RPL_STATSQLINE 218 RPL_STATSYLINE 3326 240 RPL_STATSVLINE 241 RPL_STATSLLINE 3327 244 RPL_STATSHLINE 244 RPL_STATSSLINE 3328 246 RPL_STATSPING 247 RPL_STATSBLINE 3329 250 RPL_STATSDLINE 3330 3331 492 ERR_NOSERVICEHOST 3332 3333 6. Current implementations 3334 3335 The IRC software, version 2.10 is the only complete implementation of 3336 the IRC protocol (client and server). Because of the small amount of 3337 changes in the client protocol since the publication of RFC 1459 3338 [IRC], implementations that follow it are likely to be compliant with 3339 this protocol or to require a small amount of changes to reach 3340 compliance. 3341 3342 7. Current problems 3343 3344 There are a number of recognized problems with the IRC Client 3345 Protocol, and more generally with the IRC Server Protocol. In order 3346 to preserve backward compatibility with old clients, this protocol 3347 has almost not evolved since the publication of RFC 1459 [IRC]. 3348 3349 7.1 Nicknames 3350 3351 The idea of the nickname on IRC is very convenient for users to use 3352 when talking to each other outside of a channel, but there is only a 3353 finite nickname space and being what they are, it's not uncommon for 3354 several people to want to use the same nick. If a nickname is chosen 3355 by two people using this protocol, either one will not succeed or 3356 both will removed by use of a server KILL (See Section 3.7.1). 3357 3358 3359 3360 3361 3362 Kalt Informational [Page 60] 3363 3364 RFC 2812 Internet Relay Chat: Client Protocol April 2000 3365 3366 3367 7.2 Limitation of wildcards 3368 3369 There is no way to escape the escape character "\" (%x5C). While 3370 this isn't usually a problem, it makes it impossible to form a mask 3371 with a backslash character ("\") preceding a wildcard. 3372 3373 7.3 Security considerations 3374 3375 Security issues related to this protocol are discussed in the "IRC 3376 Server Protocol" [IRC-SERVER] as they are mostly an issue for the 3377 server side of the connection. 3378 3379 8. Current support and availability 3380 3381 Mailing lists for IRC related discussion: 3382 General discussion: ircd-users@irc.org 3383 Protocol development: ircd-dev@irc.org 3384 3385 Software implementations: 3386 ftp://ftp.irc.org/irc/server 3387 ftp://ftp.funet.fi/pub/unix/irc 3388 ftp://ftp.irc.org/irc/clients 3389 3390 Newsgroup: alt.irc 3391 3392 9. Acknowledgements 3393 3394 Parts of this document were copied from the RFC 1459 [IRC] which 3395 first formally documented the IRC Protocol. It has also benefited 3396 from many rounds of review and comments. In particular, the 3397 following people have made significant contributions to this 3398 document: 3399 3400 Matthew Green, Michael Neumayer, Volker Paulsen, Kurt Roeckx, Vesa 3401 Ruokonen, Magnus Tjernstrom, Stefan Zehl. 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 Kalt Informational [Page 61] 3419 3420 RFC 2812 Internet Relay Chat: Client Protocol April 2000 3421 3422 3423 10. References 3424 3425 [KEYWORDS] Bradner, S., "Key words for use in RFCs to Indicate 3426 Requirement Levels", BCP 14, RFC 2119, March 1997. 3427 3428 [ABNF] Crocker, D. and P. Overell, "Augmented BNF for Syntax 3429 Specifications: ABNF", RFC 2234, November 1997. 3430 3431 [HNAME] Braden, R., "Requirements for Internet Hosts -- 3432 Application and Support", STD 3, RFC 1123, October 1989. 3433 3434 [IRC] Oikarinen, J. & D. Reed, "Internet Relay Chat Protocol", 3435 RFC 1459, May 1993. 3436 3437 [IRC-ARCH] Kalt, C., "Internet Relay Chat: Architecture", RFC 2810, 3438 April 2000. 3439 3440 [IRC-CHAN] Kalt, C., "Internet Relay Chat: Channel Management", RFC 3441 2811, April 2000. 3442 3443 [IRC-SERVER] Kalt, C., "Internet Relay Chat: Server Protocol", RFC 3444 2813, April 2000. 3445 3446 11. Author's Address 3447 3448 Christophe Kalt 3449 99 Teaneck Rd, Apt #117 3450 Ridgefield Park, NJ 07660 3451 USA 3452 3453 EMail: kalt@stealth.net 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 Kalt Informational [Page 62] 3475 3476 RFC 2812 Internet Relay Chat: Client Protocol April 2000 3477 3478 3479 12. Full Copyright Statement 3480 3481 Copyright (C) The Internet Society (2000). All Rights Reserved. 3482 3483 This document and translations of it may be copied and furnished to 3484 others, and derivative works that comment on or otherwise explain it 3485 or assist in its implementation may be prepared, copied, published 3486 and distributed, in whole or in part, without restriction of any 3487 kind, provided that the above copyright notice and this paragraph are 3488 included on all such copies and derivative works. However, this 3489 document itself may not be modified in any way, such as by removing 3490 the copyright notice or references to the Internet Society or other 3491 Internet organizations, except as needed for the purpose of 3492 developing Internet standards in which case the procedures for 3493 copyrights defined in the Internet Standards process must be 3494 followed, or as required to translate it into languages other than 3495 English. 3496 3497 The limited permissions granted above are perpetual and will not be 3498 revoked by the Internet Society or its successors or assigns. 3499 3500 This document and the information contained herein is provided on an 3501 "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING 3502 TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING 3503 BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION 3504 HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF 3505 MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 3506 3507 Acknowledgement 3508 3509 Funding for the RFC Editor function is currently provided by the 3510 Internet Society. 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 Kalt Informational [Page 63] 3531