ネットワーキンググループ C. Kalt Request for Comments: 2812 1459のアップデート カテゴリ: インフォメーション インターネットリレーチャット:クライアントプロトコル この文章について この文章は、インターネットコミュニティのための情報を提供します。インターネ ットの基準を定義するものではありません。この文章の配布に制限はありません。 コピーライト Copyright (C) The Internet Society (2000). All Rights Reserved. IESG NOTE: IRCプロトコルはクライアント間のいくつかのデータ転送方法を可能にしますが、Eメ ールのようなほかのメカニズムを使う場合と同様、データの受け取り手はデータがど のように扱われるか注意しなくてはなりません。IRCプロトコルのセキュリティにつ いての詳細は、たとえば http://www.irchelp.org/irchelp/security/にあります。 概要 IRC(Internet Relay Chat)プロトコルは、テキストベースの会話のために使われる プロトコルです。サーバに接続するタイプのソケットプログラムのなかでは、もっと もシンプルなクライアントです。 この文書はクライントのプロトコルを定義しており、読者がIRCの構造(IRC:構造)を 理解しているものと想定されています。 目次 * 1 ラベル o 1.1 サーバ o 1.2 クライアント + 1.2.1 ユーザ + 1.2.2.1 オペレータ + 1.2.2 サービス + 1.3 チャンネル * 2 IRCクライアントの仕様 o 2.1 概要 o 2.2 文字コード o 2.3 メッセージ + 2.3.1 疑似BNFによるメッセージ形式 o 2.4 ニューメリックリプライ o 2.5 ワイルドカードの表現 * 3 メッセージの詳細 o 3.1 接続の開始 + 3.1.1 Passwordメッセージ + 3.1.2 Nickメッセージ + 3.1.3 Userメッセージ + 3.1.4 Operメッセージ + 3.1.5 User modeメッセージ + 3.1.6 サービス メッセージ + 3.1.7 Quit + 3.1.8 Squit o 3.2 チャンネル操作 + 3.2.1 Joinメッセージ + 3.2.2 Partメッセージ + 3.2.3 Channel modeメッセージ + 3.2.4 Topicメッセージ + 3.2.5 Namesメッセージ + 3.2.6 Listメッセージ + 3.2.7 Inviteメッセージ + 3.2.8 Kickコマンド o 3.3 メッセージの送信 + 3.2.1 Privateメッセージ + 3.2.2 Notice o 3.4 サーバクエリーとコマンド + 3.4.1 Motdメッセージ + 3.4.2 Lusersメッセージ + 3.4.3 Versionメッセージ + 3.4.4 Statsメッセージ + 3.4.5 Linksメッセージ + 3.4.6 Timeメッセージ + 3.4.7 Connectメッセージ + 3.4.8 Traceメッセージ + 3.4.9 Adminコマンド + 3.4.10 Infoコマンド o 3.5 サービスクエリーとコマンド + 3.5.1 Servlistメッセージ + 3.5.2 Notice o 3.6 ユーザベースのクエリー + 3.6.2 Whoクエリー + 3.6.2 Whoisクエリー + 3.6.3 Whowas o 3.7 Miscellaneousメッセージ + 3.7.1 Killメッセージ + 3.7.2 Pingメッセージ + 3.7.3 Pongメッセージ + 3.7.4 Error * 4 オプションの機能 o 4.1 Away o 4.2 Rehashメッセージ o 4.3 Dieメッセージ o 4.4 Restartメッセージ o 4.5 Rehashメッセージ o 4.6 Users o 4.7 Operwallメッセージ o 4.8 Userhostメッセージ o 4.9 Isonメッセージ * 5 リプライ o 5.1 コマンドレスポンス o 5.2 エラーリプライ o 5.3 予約ニューメリック * 6 現在の実装 * 7 現状の問題点 o 7.1 ニックネーム o 7.2 ワイルドカードの限界 o 7.3 セキュリティに対する配慮 * 8 現在のサポートおよび入手先 * 9 謝辞 * 10 リファレンス * 11 筆者の連絡先 * 12 コピーライトの完全記述 1. ラベル この章ではIRCプロトコルのさまざまなコンポーネントに使われる識別子を定義し ます。 1.1 サーバ サーバーの名前はそれぞれユニークなものでなければなりません。名前の長さは最 大63キャラクタです。サーバの名前に使ってよいもの、いけないものについては、プ ロトコルの文法ルール(2.3.1)を見てください。 1.2 クライアント 各々のクライアントに対してすべてのサーバは、一つのネットワーク内でユニーク な識別子(フォーマットはクライアントのタイプによります)と、そのクライアントを 紹介したサーバの情報をもた「なくてはなりません」。 1.2.1 ユーザ おのおののユーザはほかのユーザから最高9文字までのユニークなニックネームで 区別されます。ニックネーム内で何を使ってよくて何を使っていけないかは、プロト コルの文法ルール(2.3.1)を参照してください。 長さは最高9文字に制限されていますが、このプロトコルが将来進化したときに は、クライアントはより長い文字列を受け入れる「べき」でしょう。 1.2.1.1 オペレータ IRCネットワーク内に常識的な秩序が保たれるように、特別な立場のユーザ(オペレ ータ)がネットワーク上の一般的なメンテナンスの機能を実行することが許されてい ます。オペレータに許可された力は'危険'であると考えられ得るのですが、それにも かかわらずしばしば必要なのです。オペレータは、必要なときにサーバを切断したり 再接続したりといった、基本的なネットワーク上の作業を行うことができる「べき」 です。この必要性の認識により、ここで議論されるプロトコルはこのような機能のみ を実行できる権利をオペレータに与えます。3.1.8(SQUIT)と、3.4.7(CONNECT)を参照 してください。 よく論争になるオペレータの力は、ネットワークからユーザを'無理やり'追い出す 能力です。たとえば、オペレータはどんなクライアント-サーバ間の接続でも終了さ せられます。このようなことの正当化は大変デリケートな問題です。この能力の乱用 は破壊的で迷惑であり、その効用はほとんどないに等しいからです。このタイプのア クションについての詳細は、3.7.1(KILL)を参照してください。 1.2.2 サービス どのサービスも、ニックネームとサーバの名前を結合したサービス名によってほか のサービスから区別されています。ユーザにとっては、ニックネームは最高9文字の 長さです。ニックネームで何を使ってよくて何を使ってはいけないかは、プロトコル の文法規則(2.3.1)を参照してください。 1.3 チャンネル チャンネルの名前は、('&'、'#'、'+'、'!'という文字で始まる)50文字までの長さ の文字列です。先頭の文字が'&'か'#'か'+'か'!'(今後"チャンネルプレフィックス" と呼びます)であること以外には、スペース(' ')やコントロールG(^GもしくはASCII 文字コードの7番)、コンマ(','。このプロトコルではリストアイテムセパレータとし て使われます)を「含まない」というのがチャンネルネームの唯一の制限です。ま た、コロン(':')はチャンネルマスクのデリミターとして使われます。チャンネルの 名前はケースセンシティブではありません(英文字の大文字小文字を区別しません)。 チャンネルの名前の文法の詳細については、プロトコルの文法規則(2.3.1)を参照 してください。 各々のプレフィックスはチャンネルを違ったタイプに性格付けます。チャンネルタ イプの明確化は、クライアント-サーバプロトコルには関係ありませんので、この文 書の範囲の話ではありません。"Internet Relay Chat: Channel Management" [IRC-CHAN](RFC2811)に詳しく述べられています。 2. IRCクライアントの仕様 2.1 概要 ここで述べられるプロトコルは、クライアントがユーザとして登録するときのクラ イアントからサーバへの接続にのみ使われます。 2.2 文字コード 具体的な文字セットの仕様は定められていません。このプロトコルでは1オクテッ ト(=8ビット)のコードのセットをベースとしています。各メッセージは、このオクテ ットをいくつかまとめたものから成り立っています。しかし、オクテットの値のうち いくつかはメッセージデリミターとして働くコントロールコードに使われています。 8ビットプロトコルという点をのぞけば、デリミターとキーワードは大抵の US-ASCIIターミナルやtelnet接続から主として使われるプロトコルと同じようなもの です。 IRCはスカンジナビアで生まれたため、文字{ } |はそれぞれ文字[ ] \の小文字に 当たるものとみなされます。これは2つのニックネームやチャンネルの名前が同じの ものかどうかを識別するときに面倒な問題ととなることがあります。 2.3 メッセージ サーバとクライアントは互いにメッセージを送信し合います。これらのうちには、 リプライが引き起こされるものもそうでないものもあります。メッセージが正しいコ マンドを含んでいた場合、後に述べますが、クライアントは仕様通りのリプライを期 待します。しかし、リプライを永久に待たなくてはならないわけではありません。ク ライアント-サーバ間、サーバ-サーバ間の通信は基本的に非同期です。 どのIRCメッセージも最大3つの主な部分から成り立っています。プレフィックス (prefix)(オプション)、コマンド(command)、コマンドパラメータ(command parameters)(最大15個まで)です。プレフィックスやコマンド、すべてのパラメータ ーは、各々1つのASCIIコードのスペース文字(0x20)によって区切られます。 プレフィックスが存在しているかどうかは、先頭のコロン(':',0x3b)によって表さ れます。そしてこれはメッセージ自体の先頭の文字と「ならなくてはなりません」。 コロンとプレフィックスの間には空き(空白文字)があっては「いけません」。プレフ ィックスはメッセージの本来の送信元を表すために、サーバが使用します。 メッセ ージにプレフィックスが存在しない場合、送信してきた接続先が送信者であると仮定 します。 クライアントはメッセージを送信するときにプレフィックスを使用「すべ きではありません」。クライアントがプレフィックスを使用するとすれば、唯一の妥 当なプレフィックスは、そのクライアントと関連付けて登録されているニックネーム のみです。 コマンドは正しいIRCコマンド、またはASCIIテキストを表す3桁の10進数のどちら かでなくてはいけません。 IRCメッセージは常にCR-LF(キャリッジリターン-ラインフィード)のペアで終わる 文字の列です。これらのメッセージは、最後のCR-LFも含めて512文字を超え「てはな りません」。従って、コマンドとそのパラメータに使えるのは最大510文字です。メ ッセージを複数の行に分割して送信するための規定はありません。詳細と現在の実装 については、6を参照してください。 2.3.1 疑似BNFによるメッセージ形式 プロトコルのメッセージは、連続したオクテットのストリームから抽出される必要 があります。現在の解決策はメッセージの区切りとして、2文字(CRとLF)を使用する ことです。空のメッセージは黙って無視されますので、特に問題なくメッセージの間 でCR-LFシーケンスを使用できます。 抽出されたメッセージは、パラメータのリストの成 分に構文解析されます。 このための増やされたBNFの表現は、以下のとおりです。 message = [ ":" prefix SPACE ] command [ params ] crlf prefix = servername / ( nickname [ [ "!" user ] "@" host ] ) command = 1*letter / 3digit params = *14( SPACE middle ) [ SPACE ":" trailing ] =/ 14( SPACE middle ) [ SPACE [ ":" ] trailing ] nospcrlfcl = %x01-09 / %x0B-0C / %x0E-1F / %x21-39 / %x3B-FF ; NUL、CR、LF、" "、":"以外のオクテットどれでも middle = nospcrlfcl *( ":" / nospcrlfcl ) trailing = *( ":" / " " / nospcrlfcl ) SPACE = %x20 ; スペース文字 crlf = %x0D %x0A ; "キャリッジリターン" "ラインフィード" 注: 1) パラメータリストを抽出した後は、,のいずれにマッ チしても、全てのパラメータは同等のものとなります。 は単にパラ メータの範囲内でSPACEを許すための文法上の方便です。 2) NUL(%x00)文字は、メッセージフレームの中では特別なものではなく、基 本的にはパラメータ内の終端に使用できます。しかし、これは普通のCの文字列 操作で余計な複雑さを引き起こすことになります。したがって、NULのメッセー ジの中で使用することは認められていません。 ほとんどのプロトコルメッセージは、リストからパラメータ文字列を抽出するにあ たり、追加の意味と構文を定義しています。 例えば、多くのサーバコマンドは、コ マンドの後の最初のパラメータが送信先のリストであると仮定するでしょう。そのリ ストは以下のように表せます。 target = nickname / server msgtarget = msgto *( "," msgto ) msgto = channel / ( user [ "%" host ] "@" servername ) msgto =/ ( user "%" host ) / targetmask msgto =/ nickname / ( nickname "!" user "@" host ) channel = ( "#" / "+" / ( "!" channelid ) / "&" ) chanstring [ ":" chanstring ] servername = hostname host = hostname / hostaddr hostname = shortname *( "." shortname ) shortname = ( letter / digit ) *( letter / digit / "-" ) *( letter / digit ) ; RFC 1123 [HNAME]で定義されているように。 hostaddr = ip4addr / ip6addr ip4addr = 1*3digit "." 1*3digit "." 1*3digit "." 1*3digit ip6addr = 1*hexdigit 7( ":" 1*hexdigit ) ip6addr =/ "0:0:0:0:0:" ( "0" / "FFFF" ) ":" ip4addr nickname = ( letter / special ) *8( letter / digit / special / "-" ) targetmask = ( "$" / "#" ) mask ; 使ってよいマスクについての詳細は3.3.1を参照。 chanstring = %x01-07 / %x08-09 / %x0B-0C / %x0E-1F / %x21-2B chanstring =/ %x2D-39 / %x3B-FF ; NUL、BELL、CR、LF、" "、","、":"以外のオクテットどれでも。 channelid = 5( %x41-5A / digit ) ; 5( A-Z / 0-9 ) ほかのパラメータの構文は以下のようになります。 user = 1*( %x01-09 / %x0B-0C / %x0E-1F / %x21-3F / %x41-FF ) ; NUL、CR、LF、" "、"@"以外のオクテットどれでも。 key = 1*23( %x01-05 / %x07-08 / %x0C / %x0E-1F / %x21-7F ) ; 7ビットのUS_ASCIIキャラクタどれでも。 ; NUL、CR、LF、FF、h/v TAB、" "以外。 letter = %x41-5A / %x61-7A ; A-Z / a-z digit = %x30-39 ; 0-9 hexdigit = digit / "A" / "B" / "C" / "D" / "E" / "F" special = %x5B-60 / %x7B-7D ; "["、"]"、"\"、"`"、"_"、"^"、"{"、"|"、"}" 注: 1) の構文がここで記載されている唯一の目的は、IPアドレスを記 述するフォーマットを述べることです。このことは、現在のところ、このプロ トコルの唯一の使用可能な実装は、TCP/IPを基礎となるネットワークプロトコ ルとして利用しているものだけであるという事実を示唆しています。しかし、 ほかのプロトコルを使ってはいけないということではありません。 2) の最高の長さは63文字です。これは(特に)インターネットホス トネームがそれより長くなることが多いことによる、このプロトコルの制限で す。IRCメッセージは512文字までと制限されているので、このような制限が必 要なのです。63文字より長い名前のホストから接続しているクライアントは、 ホストの名前のかわりにホストの(数字の)アドレスで登録されます。 3) 後の章で出てくるパラメータのいくつかは、ここでは定義されません。そ れらについては、利便のために使われる名前以外に特に定めなければならない ことがなにもないからです。これらのパラメータは用に定義されてい る通常の構文にしがたいます。 2.4 ニューメリックリプライ サーバに送信された大抵のメッセージが、なんらかのリプライを生成します。もっ とも一般的なリプライはニューメリックリプライ(numeric reply)です。これはエラ ーにも通常のリプライにも使用されます。ニューメリックリプライは、送信元のプレ フィックスと3桁の数字とリプライのターゲットからなる一つのメッセージとして送 られ「なければなりません」。クライアントはニューメリックリプライを発信しては いけません。他の点では、ニューメリックリプライは、キーワードが文字列ではなく て3桁の数字である以外には、通常のメッセージと同様です。ほかのリプライのリス トが5(リプライ)にあります。 2.5 ワイルドカードの表現 文字列中にワイルドカードが許されている場合、それは"マスク"として参照されま す。 文字列のマッチング処理で、このプロトコルでは二つの特別な文字の使用が許され ています。'?'(%x3F)は1文字のみにマッチし、'*'(%x2A)は任意の数の文字にマッチ します。'\'(%x5C)を使えば、これらの二つの文字をエスケープできます。 これについてのBNF構文は以下のとおりです。 mask = *( nowild / noesc wildone / noesc wildmany ) wildone = %x3F wildmany = %x2A nowild = %x01-29 / %x2B-3E / %x40-FF ; NUL、"*"、"?"以外のオクテットどれでも。 noesc = %x01-5B / %x5D-FF ; NUL、"\"以外のオクテットどれでも。 matchone = %x01-FF ; wildoneにマッチする。 matchmany = *matchone ; wildmanyにマッチする。 例: a?c ; "a"で始まり"c"で終わる3文字のキャラクタすべてにマッチします。 a*c ; "a"で始まり"c"で終わる、長さ2文字以上のキャラクタすべてにマッチします。 3. メッセージの詳細 ここから、IRCサーバ及びクライアントに認識される各々のメッセージについて記 述します。この章で述べられるすべてのコマンドは、このプロトコルのすべてのサー バで実装され「なくてはなりません」。 リプライとしてERR_NOSUCHSERVERが帰ってきた場合、メッセージの送付先が見つか らなかったという意味です。サーバはそのコマンドに対するエラーのあとでは、ほか のどんなリプライも送っては「いけません」。 クライアントが接続しているサーバは、メッセージの隅々まで文法的に解釈し、適 切なエラーを返す必要があります。 複数のパラメータがある場合、それぞれが正当性をチェックされ「なくてはなら ず」、適切なレスポンスがクライアントに返され「なくてはなりません」。コンマを アイテムセパレータとして使っているパラメータリストを使っている、正しくないメ ッセージの場合、リプライは各々のアイテムに対して送られ「なくてはなりませ ん」。 3.1 接続の開始 ここで説明されるメッセージは、ユーザとしてIRCサーバに接続を開始したり、正 常に接続を切ったりすることにも使用します。 "PASS"コマンドはクライアントの接続の登録に必須ではありません。しかし使用す るならば、NICK/USERの組み合わせ(ユーザ接続の場合)や、SERVICE(サービス接続の 場合)コマンドに先だって使用しなければなりません。クライアントが登録を行う場 合の推奨される順番は、以下のとおりです。 1. Passメッセージ 2. Nickメッセージ 2. Serviceメッセージ 3. Userメッセージ 成功したら、クライアントはRPL_WELCOME(ユーザー向け)もしくは RPL_YOURESERVICE(サービス向け)メッセージを受け取ります。これは接続が登録され て、すべてのIRCネットワークに認知されたということを表します。 リプライメッセ ージはレジストされたときのクライアント識別子をすべて含んで「いなくてはなりま せん」。 3.1.1 Passwordメッセージ コマンド: PASS パラメータ: PASSコマンドは'接続パスワード'を設定するために使います。パスワードはオプシ ョンですが、設定するならば接続を開始しようとする前に送信することが可能です し、送信し「なくてはなりません」。このため現在では、ユーザはNICK/USERの組み 合わせを送る前にPASSコマンドを送る必要があります。 ニューメリックリプライ: ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED 例: PASS ここに秘密のパスワード 3.1.2 Nickメッセージ コマンド: NICK パラメータ: NICKコマンドはユーザにニックネームを与えたり、いまのニックネームを変更した りするのに使います。 ニューメリックリプライ: ERR_NONICKNAMEGIVEN ERR_ERRONEUSNICKNAME ERR_NICKNAMEINUSE ERR_NICKCOLLISION ERR_UNAVAILRESOURCE ERR_RESTRICTED 例: NICK Wiz ;セッションがまだ登録されていないか、 ;ユーザが自分のニックネームを"Wiz"に変更する ;場合、新しいニックネーム"Wiz"を紹介します。 :WiZ!jto@tolsun.oulu.fi NICK Kilroy ;サーバがWiZはニックネームをKilroyに変更した ;ことを示している。 3.1.3 Userメッセージ コマンド: USER パラメータ: USERコマンドは新しいユーザのユーザ名やホスト名、本名を指定するために、接続 のはじめに使われます。 パラメータは数字でなくてはならず、サーバに登録するときに自動的にユー ザモードを設定したい場合に使用可能です。このパラメータは2ビットのみが意味を 持つビットマスクです。ビット2が設定されていたら、ユーザモード'w'が設定され、 ビット3が設定されていたら、ユーザモード'i'が設定されます(3.1.5 "ユーザモード "参照)。 はスペースを含んでもかまいません。 ニューメリックリプライ: ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED 例: USER guest 0 * :Ronnie Reagan ;ユーザは自身をユーザーネーム"guets"、 本名"Ronnie Reagan"として登録。 USER guest 8 * :Ronnie Reagan ;ユーザは自身をユーザーネーム"guest"、 本名"Ronnie Reagan"、不可視設定で登録。 3.1.4 Operメッセージ コマンド: OPER パラメータ: OPERコマンドは通常のユーザがオペレータ権限を得るために使います。オペレータ 権限を手に入れるためには、の組み合わせが「必要です」。成功 すると、ユーザは新しいユーザモードを示すMODEメッセージ(3.1.5参照)を受け取り ます。 ニューメリックリプライ: ERR_NEEDMOREPARAMS RPL_YOUREOPER ERR_NOOPERHOST ERR_PASSWDMISMATCH 例: OPER foo bar ; "foo"というユーザネームで、"bar"という パスワードでオペレータとして登録 しようとしている。 3.1.5 User modeメッセージ コマンド: MODE パラメータ: *( ( "+" / "-" ) *( "i" / "w" / "o" / "O" / "r" ) ) ユーザモードは通常、クライアントが他の人からどのように見えるかや、どんな 「余分な」メッセージがそのクライアントに送られたかといったことにかかわる変更 を行います。 MODEコマンドは、メッセージの送り手とパラメータとして与えられたニックネーム が両方とも同じである場合にのみ、受け入れられ「なくてはなりません」。ほかのパ ラメータが何も与えられなかった場合、サーバはニックネームの現在の設定のみを返 します。 使えるモードは以下のとおりです: a - ユーザに席はずし(away)のフラグがたっている。 i - ユーザを不可視であるとマークする。 w - ユーザはwallopを受け取る。 r - 制限されたユーザコネクション。 o - オペレータフラグ。 O - ローカルオペレータフラグ。 s - ユーザにサーバの通知受け取りのマークをする。 将来、他のモードも使えるようになるかもしれません。 'a'というフラグはMODEコマンドでユーザにトグルされては「いけません」。その 代わり、AWAYコマンドの使用が「必要です」。 ユーザが"+o"か"+O"フラグを使って自分をオペレータにしようとした場合、それは 無視される「べき」です。OPERコマンドのメカニズムの認証をバイパスすることがで きるからです。しかし、"-o"や"-O"を使って「特権を放棄する」ことになんら制限は ありません。 一方、ユーザが"-r"フラグを使って自分の制限を取り払おうとした場合には、それ は無視される「べき」です。しかし"+r"を使って「特権を放棄する」ことになんら制 限はありません。このフラグは通常、管理上の理由で接続時にサーバによって設定さ れます。これらの制限をどのように実装するかは自由ですが、制限のあるユーザはニ ックネームを変更したり、チャンネル上のチャンネルオペレータステータスの使用を 許されない、とするのが一般的です。 's'というフラグは使われなくなってきていますが、まだ使われる「こともありま す」。 ニューメリックリプライ: ERR_NEEDMOREPARAMS ERR_USERSDONTMATCH ERR_UMODEUNKNOWNFLAG RPL_UMODEIS 例: MODE WiZ -w ;WiZが送った、WALLOPSメッセージの 受け取りをオフにするコマンド。 MODE Angel +i ;Angelが送った、自分を不可視にするコマンド。 MODE WiZ -o ;WiZが'特権を放棄' (オペレータ権限を放棄している)。 3.1.6 Serviceメッセージ コマンド: SERVICE パラメータ: <将来の拡張用> SERVICEは新しいサービスを登録するコマンドです。コマンドパラメータは新しい サービスのサービスニックネーム、配信先、タイプ、情報を定義します。 パラメータは、サービスがどこまで見えるかを定義します。サービ スはdistributionに名前がマッチするサーバにのみ認識されます。そのサービスを認 識するべき、マッチするサーバにとって、そのサーバと件のサービスが接続されてい るサーバの間のネットワークパスは、すべてマスクに名前がマッチするサーバで構成 されて「いなくてはなりません」。 パラメータはいまのところ、将来の使用のために予約されています。 ニューメリックリプライ: ERR_ALREADYREGISTRED ERR_NEEDMOREPARAMS ERR_ERRONEUSNICKNAME RPL_YOURESERVICE RPL_YOURHOST RPL_MYINFO 例: SERVICE dict * *.fr 0 0 :French Dictionary ; "dict"という名前で登録されている サービス。このサービスは"*.fr"と いう名前にマッチするサーバでのみ 使用可能。 3.1.7 Quitメッセージ コマンド: QUIT パラメータ: [ ] クライアントセッションはquitメッセージによって終了します。サーバはクライア ントにERRORメッセージを送ることでこれを承認します。 ニューメリックリプライ: なし。 例: QUIT :Gone to have lunch ; 好まれるメッセージフォーマット。 :syrk!kalt@millennium.stealth.net QUIT :Gone to have lunch ; syrkというユーザがお昼を食べにいって IRCを抜けた。 3.1.8 Squitメッセージ コマンド: SQUIT パラメータ: SQUITコマンドはオペレータのみが使えます。サーバリンクの切断に使います。ま た、エラーが起きた場合、サーバもSQUITメッセージを発することがあります。SQUIT メッセージはリモートサーバの接続を切断することもできます。このような場合、 SQUITメッセージは、オペレータとリモートサーバの間にあるほかのサーバに影響を 及ぼすことなく、単純にリモートサーバに送られます。 はリモートサーバにSQUITを実行するすべてのオペレータが送信する「べ き」です。切断するよう要求されたサーバは、ほかのユーザがこのアクションの理由 を知ることができるように、を含むWALLOPSメッセージを発します。 ニューメリックリプライ: ERR_NOPRIVILEGES ERR_NOSUCHSERVER ERR_NEEDMOREPARAMS 例: SQUIT tolsun.oulu.fi :Bad Link ? ; tolson.oulu.fiというサーバの アップリンクに対する切断のコマンド。 "Bad Link"というコメントがついている。 :Trillian SQUIT cm22.eng.umd.edu :Server out of control ; ネットから"cm22.eng.umd.edu"を切断 するというTrillianからのコマンド。 "Server out of control"というコメント がついている。 3.2 チャンネル操作 このグループのメッセージは、チャンネル、チャンネルの設定(チャンネルモー ド)、およびその内容(通常ユーザ)を扱うものです。そのためこれらのメッセージは サービスが使用できるようにしては「いけません」。 これらのメッセージはすべて、サーバに対するリクエストです。その内容がサーバ に許諾されるかどうかは、状況によります。サーバはユーザに、リクエストが許諾さ れたか拒否されたか、エラーになったかどうかを伝えるリプライを返さ「なくてはな りません」。サーバがそのリクエストを許諾すれば、メッセージは通常(場合によっ てはフォーマットを変更されて)、プレフィックスで指定されているユーザに返送さ れます。 チャンネルがどのように運営されるかを定めるルールは、サーバによってきめられ ます。こういったルールについてはこの文書の範疇外です。詳細は"Internet Relay Chat: Channel Management" [IRC-CHAN]にあります。 3.2.1 Joinメッセージ コマンド: JOIN パラメータ: ( *( "," ) [ *( "," ) ] )/ "0" JOINコマンドはユーザによって、特定のチャンネルに接続するリクエストを行なう ために使用されます。サーバ側は、引数として複数のチャンネルが指定されても、こ れを正しく処理「できなければなりません」が、クライアントに対してJOINメッセー ジを送る場合には、複数のチャンネルを指定する「べきではありません」。 ユーザがチャンネルに入ると、そのチャンネルに関してサーバーが受けつける、す べてのコマンドに関する情報を受け取ることになります。そういったコマンドには、 JOIN、MODE、KICK、PART、QUIT、そしてもちろん、PRIVMSG/NOTICEを含みます。この ことで、チャンネルメンバーは、ほかのチャンネルメンバーやチャンネルモードを把 握することが可能になります。 JOINが成功すると、ユーザはその確認としてJOINメッセージを受け取り、チャンネ ルのトピックが(RPL_TOPICを使って)送られ、そのチャンネルにいるユーザのリスト が(RPL_NAMREPLYを使って)送られます。このリストには自分自身も含まれます。 注意してほしいのは、このメッセージでは特別な引数("0")が使用可能で、この場 合、このユーザーがメンバーとなっているすべてのチャンネルの接続を終了したいと いう意味になることです。サーバはこのメッセージを、ユーザが自分がメンバーにな っている各々のチャンネルにPARTコマンド(3.2.2参照)を送ったというふうに処理し ます。 ニューメリックリプライ: ERR_NEEDMOREPARAMS ERR_BANNEDFROMCHAN ERR_INVITEONLYCHAN ERR_BADCHANNELKEY ERR_CHANNELISFULL ERR_BADCHANMASK ERR_NOSUCHCHANNEL ERR_TOOMANYCHANNELS ERR_TOOMANYTARGETS ERR_UNAVAILRESOURCE RPL_TOPIC 例: JOIN #foobar ; #foobarというチャンネルに入るコマンド。 JOIN &foo fubar ; &fooというチャンネルに"fubar"という キーを使って入るコマンド。 JOIN #foo,&bar fubar ; #fooというチャンネルに"fubar"というキー を使って入り、&barというチャンネルにキ ーをつかわずに入るというコマンド。 JOIN #foo,#bar fubar,foobar ; #fooというチャンネルに"fubar"というキー を使って入り、#barというチャンネルに "foobar"というキーを使って入るという コマンド。 JOIN #foo,#bar ; #fooというチャンネルと#barという チャンネルに入るコマンド。 JOIN 0 ; いま入っているすべてのチャンネルから 抜けるコマンド。 :WiZ!jto@tolsun.oulu.fi JOIN #Twilight_zone ; WiZからの#Twilight_zoneと いうチャンネルへのJOINメッセージ。 3.2.2 Partメッセージ コマンド: PART パラメータ: *( "," ) [ ] PARTコマンドによって、パラメータに指定されているすべてのチャンネル上で、ア クティブなメンバーのリストから自分を除去してほしいというメッセージが送れま す。"Partメッセージ"が与えられると、デフォルトメッセージのかわりに、ニックネ ームを送ります。このリクエストは常にサーバに承認されます。 サーバ側は、引数として複数のチャンネルが指定されても、これを正しく処理でき なければ「なりませんが」、クライアントに対してPartメッセージを送る場合には、 複数のチャンネルを指定する「べきではありません」。 ニューメリックリプライ: ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL ERR_NOTONCHANNEL 例: PART #twilight_zone ; "#twilight_zone"というチャンネルから 抜けるコマンド。 PART #oz-ops,&group5 ; "&group5"と"#oz-ops"両方のチャンネル から抜けるコマンド。 :WiZ!jto@tolsun.oulu.fi PART #playzone :I lost ; WiZというユーザが"#playzone"という チャンネルから"I lost"というメッセージを 出して抜けるコマンド。 3.2.3 Channel modeメッセージ コマンド: MODE パラメータ: *( ( "-" / "+" ) * * ) MODEコマンドは、ユーザがチャンネルの状態を問い合わせたり、変更したりするた めのコマンドです。使用可能なモードや使い方についての詳細は、"Internet Relay Chat: Channel Management" [IRC-CHAN]にあります。なお、1回のコマンドにつき、 パラメータとして最大3つのモード変更しか指定できないことになっているので、ご 注意ください。 ニューメリックリプライ: ERR_NEEDMOREPARAMS ERR_KEYSET ERR_NOCHANMODES ERR_CHANOPRIVSNEEDED ERR_USERNOTINCHANNEL ERR_UNKNOWNMODE RPL_CHANNELMODEIS RPL_BANLIST RPL_ENDOFBANLIST RPL_EXCEPTLIST RPL_ENDOFEXCEPTLIST RPL_INVITELIST RPL_ENDOFINVITELIST RPL_UNIQOPIS 以下の例はMODEコマンドの文法の理解を助けるために掲載しているものですが、モー ドの定義については"Internet Relay Chat: Channel Management" [IRC-CHAN]を参照 してください。 例: MODE #Finnish +imI *!*@*.fi ; #Finnishという、モデレートで'招待のみ'で、 ホストネームが*.fiにマッチしている人は 自動的に招待されるチャンネルを作るコマンド。 MODE #Finnish +o Kilroy ; #FinnishというチャンネルのKilroyに 'chanop'権限を与えるコマンド。 MODE #Finnish +v Wiz ; #FinnishというチャンネルでWiZの発言を 許すコマンド。 MODE #Fins -s ; #Finsというチャンネルから'シークレット' フラグを取り去るコマンド。 MODE #42 +k oulu ; "oulu"というチャンネルにチャンネルキー を設定するコマンド。 MODE #42 -k oulu ; チャンネル42の"oulu"というチャンネル からチャンネルキーを無効にするコマンド。 MODE #eu-opers +l 10 ; "#eu-opers"というチャンネルのユーザ数 の制限を10人までとするコマンド。 :WiZ!jto@tolsun.oulu.fi MODE #eu-opers -l ; "WiZ"というユーザが"#eu-opers"という チャンネルのユーザ数制限を外している。 MODE &oulu +b ; "&oulu"というチャンネルに設定されている 禁止マスクのリストを表示するコマンド。 MODE &oulu +b *!*@* ; すべてのユーザが入れなくするコマンド。 MODE &oulu +b *!*@*.edu +e *!*@*.bu.edu ; ホストネームが*.eduにマッチするユーザ すべてが入れなくするコマンド。ただしホス トネームが*.bu.eduにマッチするユーザは 例外。 MODE #bu +be *!*@*.edu *!*@*.bu.edu ; ホストネームが*.eduにマッチするユーザ すべてが入れなくするコメント。ただしホス トネームが*.bu.eduにマッチするユーザは 例外。 MODE #meditation e ; "#meditation"というチャンネルに設定され ている例外マスクのリストを表示する コマンド。 MODE #meditation I ; "#meditation"というチャンネルに設定され ている招待マスクのリストを表示する コマンド。 MODE !12345ircd O ; "!12345ircd"というチャンネルの クリエータは誰か聞くコマンド。 3.2.4 Topicメッセージ コマンド: TOPIC パラメータ: [ ] TOPICコマンドは、チャンネルのトピックを変更したり、確認するのに使われま す。が指定されていない場合、チャンネルのトピックが返されま す。パラメータがあって、このアクションを要求したユーザがトピックの変 更を許されていれば、このチャンネルのトピックは変更されます。パラメー タが空白であった場合、チャンネルのトピックは削除されます。 ニューメリックリプライ: ERR_NEEDMOREPARAMS ERR_NOTONCHANNEL RPL_NOTOPIC RPL_TOPIC ERR_CHANOPRIVSNEEDED ERR_NOCHANMODES 例: :WiZ!jto@tolsun.oulu.fi TOPIC #test :New topic ; Wizというユーザが トピックを設定している。 TOPIC #test :another topic ; #testというチャンネルのトピックを "another topic"にするコマンド。 TOPIC #test : ; #testというチャンネルのトピックを クリアするコマンド。 TOPIC #test ; #testというチャンネルのトピックを チェックするコマンド。 3.2.5 Namesメッセージ コマンド: NAMES パラメータ: [ *( "," ) [ ] ] NAMESコマンドを使えば、ユーザは自分に対して可視になっているニックネームを 一覧表示することができます。何が見えて何が見えないかについての詳細は、 "Internet Relay Chat: Channel Management" [IRC-CHAN]を参照してください。 パラメータはどのチャンネル(複数指定も可能)が情報を返すかを定義しま す。不正なチャンネル名へのエラーリプライは行われません。 パラメータが与えられていない場合、すべてのチャンネルのリストとそ の中のユーザが返されます。このリストの最後には、可視にはなっているがどのチャ ンネルにも接続していない、もしくは可視のチャンネルに接続していないユーザが' チャンネル'"*"上にいるとしてリスト表示されます。 パラメータがある場合、リクエストはそのサーバーに転送され、そちらで リプライが生成されます。 パラメータ内ではワイルドカードが使えます。 ニューメリック: ERR_TOOMANYMATCHES ERR_NOSUCHSERVER RPL_NAMREPLY RPL_ENDOFNAMES 例: NAMES #twilight_zone,#42 ; #twilight_zone及び#42上の可視のユーザを リスト表示するコマンド。 NAMES ; すべての可視のチャンネルとユーザを 一覧表示するコマンド。 3.2.6 Listメッセージ コマンド: LIST パラメータ: [ *( "," ) [ ] ] LISTコマンドは、チャンネルとそのトピックを一覧表示するのに使います。 パラメータが指定された場合、チャンネルの状態だけが表示されます。 パラメータがある場合、リクエストはそのサーバーに転送され、そちらで リプライが生成されます。 パラメータ内ではワイルドカードが使えます。 ニューメリックリプライ: ERR_TOOMANYMATCHES ERR_NOSUCHSERVER RPL_LIST RPL_LISTEND 例: LIST ; すべてのチャンネルを一覧表示するコマンド。 LIST #twilight_zone,#42 ; #twilight_zone及び#42というチャンネルを 一覧表示するコマンド。 3.2.7 Inviteメッセージ コマンド: INVITE パラメータ: INVITEコマンドは、チャンネルにユーザを招待するのに使います。パラ メータは、招待先のチャンネルに招待される人物のニックネームです。招 待先のチャンネルは、必ずしも実際に存在していたり、有効なチャンネルである必要 はありません。ただし、チャンネルが実際に存在している場合は、そのチャンネルの メンバーのみがほかのユーザを招待できます。チャンネルに"招待のみ"フラグが設定 されている場合は、チャンネルオペレータのみがINVITEコマンドを使うことができま す。 招待しているユーザと招待されているユーザにのみ、招待の通知が送信されます。 ほかのチャンネルメンバーには送られません(この点がMODE変更と違い、ユーザ同士 のトラブルの原因にもなりがちです)。 ニューメリックリプライ: ERR_NEEDMOREPARAMS ERR_NOSUCHNICK ERR_NOTONCHANNEL ERR_USERONCHANNEL ERR_CHANOPRIVSNEEDED RPL_INVITING RPL_AWAY 例: :Angel!wings@irc.org INVITE Wiz #Dust ; WiZが#DustというチャンネルにAngelという ユーザによって招待されたときの WiZへのメッセージ INVITE Wiz #Twilight_Zone ; #Twilight_zoneにWiZを招待するコマンド。 3.2.8 Kickコマンド コマンド: KICK パラメータ: *( "," ) *( "," ) [] KICKコマンドはユーザをチャンネルから強制的に追い出すために使います。このコ マンドにより、から強制的にPARTします。このメッセージを文法 的に正しく使用するには、ひとつのチャンネルと複数のユーザを指定するか、ユーザ ーと同数のチャンネルを指定し「なければなりません」。"コメント"があれば、それ がデフォルトメッセージ(KICKされるユーザのニックネーム)の代わりに送られます。 サーバはクライアントに複数のチャンネルやユーザのKICKメッセージを送っては 「いけません」。これは、古いクライアントソフトウェアとの下位互換のためです。 ニューメリックリプライ: ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL ERR_BADCHANMASK ERR_CHANOPRIVSNEEDED ERR_USERNOTINCHANNEL ERR_NOTONCHANNEL 例: KICK &Melbourne Matthew ; Matthewを&MelbourneからKICKするコマンド。 KICK #Finnish John :Speaking English ; "Speaking English"を理由(コメント)として、 Johnを#FinnishからKICKするコマンド。 :WiZ!jto@tolsun.oulu.fi KICK #Finnish John ; チャンネル#Finnish上のJohnを、 チャンネルから追い出すWiZのKICKメッセージ。 3.3 メッセージの送信 IRCプロトコルの主目的は、クライアントがお互いにコミュニケーションする基盤 を提供することです。PRIVMSGやNOTICE、SQUERY(サービスクエリーとコマンドについ ては3.5で書かれています)のみが、実際にテキストメッセージをクライアントからク ライアントへ届けることに使えるメッセージです。残りのメッセージは、信頼性を高 め、確実にテキストメッセージを届けるためにあります。 3.3.1 Privateメッセージ コマンド: PRIVMSG パラメータ: PRIVMSGはユーザ間のプライベートメッセージを送るのに使います。また、メッセ ージをチャンネルに送るのにも使われます。は通常、メッセージの受け 取り手のニックネームか、チャンネル名です。 パラメータにはホストマスク(#)やサーバマスク($)も指 定可能です。いずれかの場合で、サーバはマスクにマッチするサーバかホスト名をも つ人にだけPRIVMSGを送ります。マスクは最低一つの"."を含んで「いなくてはなら ず」、また最後の"."のあとにはワイルドカードがあっては「いけません」。これは メッセージが"#*"とか"$*"に送られるのを防ぐためで、こういった指定が許されてし まうと、すべてのユーザにブロードキャストされてしまうからです。ワイルドカード は'*'と'?'です。このPRIVMSGコマンドの拡張機能は、オペレータのみが使えます。 ニューメリックリプライ: ERR_NORECIPIENT ERR_NOTEXTTOSEND ERR_CANNOTSENDTOCHAN ERR_NOTOPLEVEL ERR_WILDTOPLEVEL ERR_TOOMANYTARGETS ERR_NOSUCHNICK RPL_AWAY 例: :Angel!wings@irc.org PRIVMSG Wiz :Are you receiving this message ? ; AngelからWizへのメッセージ。 PRIVMSG Angel :yes I'm receiving it ! ; Angelにメッセージを送るコマンド。 PRIVMSG jto@tolsun.oulu.fi :Hello ! ; "jto"というユーザネームでtolsun.oulu.fi というサーバのユーザにメッセージを送る コマンド。 PRIVMSG kalt%millennium.stealth.net@irc.stealth.net :Are you a frog? ; irc.stealth.netというサーバ上のユーザに、 millennium.stealth.netというホストから接 続している"kalt"というユーザネームでメッ セージを送るコマンド。 PRIVMSG kalt%millennium.stealth.net :Do you like cheese? ; millennium.stealth.netというホストから 接続している"kalt"というユーザネームで、 ローカルサーバ上のユーザに対する メッセージ。 PRIVMSG Wiz!jto@tolsun.oulu.fi :Hello ! ; "jto"というユーザネームでtolsun.oulu.fi というホストから接続しているニックネーム がWizというユーザに対するメッセージ。 PRIVMSG $*.fi :Server tolsun.oulu.fi rebooting. ; *.fiにマッチするサーバ上のすべての ユーザに対するメッセージ。 PRIVMSG #*.edu :NSFNet is undergoing work, expect interruptions ; *.eduにマッチするホストから接続している すべてのユーザに対するメッセージ。 3.3.2 Notice コマンド: NOTICE パラメータ: NOTICEコマンドはPRIVMSGと似たような感じで使われます。NOTICEとPRIVMSGの違い は、NOTICEメッセージに対して自動的なリプライが返されては「絶対にいけない」と いう点です。このルールはサーバにも当てはまります。サーバはクライアントが NOTICEを受け取ったとき、エラーリプライを返送しては「いけません」。このルール の目的は、クライアントがなにかを受信したとき、自動的に返答を送ることによっ て、ループが発生することを避けることです。 このコマンドはユーザだけでなくサービスも使用可能です。 このコマンドは通常、サービスやロボット(AIなどの、動作をコントロールするイ ンタラクティブプログラムをもつクライアント)に使われます。 詳細なリプライや例については、PRIVMSGを見てください。 3.4 サーバクエリーとコマンド サーバクエリーのグループに属するコマンドは、ネットワークに接続しているサー バに関する情報を返すために作られました。 これらのクエリーでは通常、パラメータにが存在する場合、ワイルドカー ドのマスクが有効です。しかし各々のパラメータに対しては、一つだけのクエリーと 一セットのリプライのみが生成されます。ほとんどのケースでは、ニックネームが指 定されると、そのユーザが接続しているサーバを指定したことになります。 これらのメッセージは普通、サービスにとってはあまり価値が無いので、サービス がこれらメッセージを使うのを禁止することが「推奨」されます。 3.4.1 Motdメッセージ コマンド: MOTD パラメータ: [ ] MOTDコマンドは指定されたサーバ、もしくは、がない場合は現在のサーバ の"本日のメッセージ(Message Of The Day)"を取得するためのものです。 パラメータにはワイルドカードが使えます。 ニューメリックリプライ: RPL_MOTDSTART RPL_MOTD RPL_ENDOFMOTD ERR_NOMOTD 3.4.2 Lusersメッセージ コマンド: LUSERS パラメータ: [ [ ] LUSERSコマンドはIRCネットワークのサイズに関する統計を取るのに使います。パ ラメータが指定されなければ、リプライはネット全体に関するものになります。 が定義されていれば、ネットワーク上でマスクにマッチするサーバで構成され る部分のみに関するリプライが返ります。そしてパラメータがある場合は、 リクエストはそのサーバに転送され、そちらでリプライが生成されます。 パラメータ内ではワイルドカードが使えます。 ニューメリックリプライ: RPL_LUSERCLIENT RPL_LUSEROP RPL_LUSERUNKOWN RPL_LUSERCHANNELS RPL_LUSERME ERR_NOSUCHSERVER 3.4.3 Versionメッセージ コマンド: VERSION パラメータ: [ ] VERSIONコマンドはサーバプログラムのバージョンを問い合わせるのに使います。 オプションのパラメータであるは、クライアントが直接つながっていないサ ーバプログラムのバージョン問い合わせに使います。 パラメータ内ではワイルドカードが使えます。 ニューメリックリプライ: ERR_NOSUCHSERVER RPL_VERSION 例: VERSION tolsun.oulu.fi ; "tolsun.oulu.fi"というサーバの バージョンをチェックするコマンド。 3.4.4 Statsメッセージ コマンド: STATS パラメータ: [ [ ] ] statsコマンドは特定のサーバの統計をとるのに使います。パラメータがな ければ、statsリプライの末尾のみが送り返されます。 クエリー部分は1文字のアルファベットで指定し、これは目的のサーバによっての みチェックされ、経路途中にある各サーバは取り扱わず、変更することもなしに転送 します。 パラメータ内ではワイルドカードが使えます。 下に挙げるものを除いて、どんなクエリーを有効にするのかは実装側にまかされて います。下記のクエリーは標準のクエリーとされ、すべてのサーバがサポートする 「べき」です: l - サーバの接続のリストを返します。各々の接続がどのくらいの時間 続いているか、どれだけのトラフィックががあるか(Kbyte単位)、 各々の方向へのメッセージが入っています。 m - サーバがサポートしているコマンドの一つ一つの使用回数をカウント した値を返します。一回も使われていないコマンドについては報告さ れない可能性があります。 o - 特権のあるユーザ、オペレータのリストを返します。 u - サーバの稼動時間を返します。 クライアントとサーバのアクセスに関する設定がこのように広報されること も、「推奨」されます。 ニューメリックリプライ: ERR_NOSUCHSERVER RPL_STATSLINKINFO RPL_STATSUPTIME RPL_STATSCOMMANDS RPL_STATSOLINE RPL_ENDOFSTATS 例: STATS m ; 自分が接続しているサーバのコマンドの 使用状況をチェックするコマンド。 3.4.5 Linksメッセージ コマンド: LINKS パラメータ: [ [ ] ] ユーザはLINKSを使って、このクエリーに答えるサーバが認識しているすべてのサ ーバの名前をすべて取得できます。マスクにマッチしているサーバのみが返されま す。マスクが指定されていない場合には、すべてのサーバが返されます。 に加えてが指定されていれば、LINKSコマンドは名 前が一致する最初に見つかったサーバ(があれば)に転送され、そのサーバが返答しな くてはなりません。 ニューメリックリプライ: ERR_NOSUCHSERVER RPL_LINKS RPL_ENDOFLINKS 例: LINKS *.au ; *.auに名前がマッチするすべてのサーバ名を 取得するコマンド。 LINKS *.edu *.bu.edu ; 最初に見つかった*.eduに属するサーバから見える、*.bu.edu に名前がマッチするすべてのサーバ名を取得する コマンド。 3.4.6 Timeメッセージ コマンド: TIME パラメータ: [ ] TIMEコマンドは指定したサーバからローカルタイムを聞き出すコマンドです。 パラメータがなければ、クエリーを受け取ったサーバが返答しなくてはなり ません。 パラメータ内ではワイルドカードが使えます。 ニューメリックリプライ: ERR_NOSUCHSERVER RPL_TIME 例: TIME tolsun.oulu.fi ; "tolson.oulu.fi"というサーバのローカル タイムをチェックする。 3.4.7 Connectメッセージ コマンド: CONNECT パラメータ: [ ] CONNECTコマンドはサーバに、ほかのサーバに新しい接続をすぐに確立するよう要 求するのに使います。CONNECTは特権的なコマンドで、IRCオペレータのみ使用可能と する「べき」です。パラメータが指定されていて、そのマスクがメ ッセージを処理しているサーバの名前にマッチしなかったら、リモートサーバのうち 最初にマッチしたものに対して接続が試みられます。マッチしている場合は、リクエ ストを処理しているサーバ自身が接続を試みます。 リモートサーバからCONNECTコマンドを受けとったサーバは、そのリクエストの元 とターゲットを述べるWALLOPSメッセージを出す「べき」です。 ニューメリックリプライ: ERR_NOSUCHSERVER ERR_NOPRIVILEGES ERR_NEEDMOREPARAMS 例: CONNECT tolsun.oulu.fi 6667 ; ローカルサーバをtolsun.oulu.fiに ポート6777で接続しようとしている コマンド。 3.4.8 Traceメッセージ コマンド: TRACE パラメータ: [ ] TRACEコマンドは特定のサーバへの経路とそのその途中にあるサーバについての情 報を検出するのに使います。このメッセージを処理するどのサーバも、送り手にレポ ートを「戻さなくてはなりません」。リンク経路上のリプライはチェーン状に連なっ て、それによって目的のサーバへの経路が判明します。このリプライを送り返したあ とは、サーバにたどりつくまで、このクエリーを次のサーバに送ら「なくて はなりません」。 TRACEコマンドは特定のサーバへの経路を検出するのに使います。このメッセージ を実行する各々のサーバは、送り手に対し、自身が経路のリンク上にあるというリプ ライを送ら「なくてはなりません」。この結果、リプライのチェーンが得られます。 このリプライを返したあとは、目的のサーバにたどりつくまで、TRACEメッセージを 次のサーバに送ら「なくてはなりません」。パラメータが指定されていなけ れば、TRACEコマンドは、ローカルサーバがどのサーバに直接接続しているかを示す メッセージを、送り手に返すことが「推奨」されます。 で指定されたサーバが実在しているなら、そのサーバは自分に接続してい るすべてのサーバ、サービス、オペレータをレポートすることが「要求されます」。 そのコマンドがオペレータによって出されたものであれば、サーバは自分に接続して いるすべてのユーザをレポートしてもいいでしょう。で指定された対象がニ ックネームであれば、そのニックネームに関するリプライのみが生成されます。 パラメータが指定されていない場合には、TRACEコマンドを処理しているサ ーバ自身に向けられたものであると解釈することが「推奨」されます。 パラメータ内ではワイルドカードが使えます。 ニューメリックリプライ: ERR_NOSUCHSERVER TRACEメッセージがほかのサーバに向けられているとき、TRACEが自分を通り、 次にどこへ行ったかということを知らせるため、すべての中間のサーバは RPL_TRACELINKリプライを返さなくてはなりません。 RPL_TRACELINK TRACEリプライには以下のニューメリックリプライのいずれかを自由に組み合わせられます。 RPL_TRACECONNECTING RPL_TRACEHANDSHAKE RPL_TRACEUNKNOWN RPL_TRACEOPERATOR RPL_TRACEUSER RPL_TRACESERVER RPL_TRACESERVICE RPL_TRACENEWTYPE RPL_TRACECLASS RPL_TRACELOG RPL_TRACEEND 例: TRACE *.oulu.fi ; *.oulu.fiに当てはまるサーバへのTRACE。 3.4.9 Adminコマンド コマンド: ADMIN パラメータ: [ ] adminコマンドは、指定されたサーバ(パラメータがない場合にはカレント サーバ)の管理者についての情報を得るのに使います。どのサーバも、ADMINメッセー ジをほかのサーバに転送でき「なくてはなりません」。 パラメータ内ではワイルドカードが使えます。 ニューメリックリプライ: ERR_NOSUCHSERVER RPL_ADMINME RPL_ADMINLOC1 RPL_ADMINLOC2 RPL_ADMINEMAIL 例: ADMIN tolsun.oulu.fi ; tolsun.oulu.fiからのADMINリプライの要求。 ADMIN syrk ; syrkというユーザが接続しているサーバへ のADMINリクエスト。 3.4.10 Infoコマンド コマンド: INFO パラメータ: [ ] INFOコマンドはサーバについての情報を返すことが「要求されます」。この情報と は、サーバのバージョンや、コンパイルされた日時、パッチのレベル、起動した日 時、その他関係あるかもしれない情報です。 パラメータ内ではワイルドカードが使えます。 ニューメリックリプライ: ERR_NOSUCHSERVER RPL_INFO RPL_ENDOFINFO 例: INFO csd.bu.edu ; csd.bu.eduからのINFOリプライの要求。 INFO Angel ; Angelが接続しているサーバからのINFO の要求。 3.5 サービスクエリーとコマンド サービスクエリーに属するコマンドは、ネットワークに接続されている、あらゆる 種類のサービスに関する情報を戻すように設計されています。 3.5.1 Servlistメッセージ コマンド: SERVLIST パラメータ: [ [ ] ] SERVLISTコマンドは、現在ネットワークに接続されていて、コマンドを発したユー ザに見えるサービスをリストアップするのに使います。オプションのパラメータは、 結果を絞り込むのに使えます(マッチするサービス名や、サービスのタイプなど)。 ニューメリックリプライ: RPL_SERVLIST RPL_SERVLISTEND 3.5.2 Squery コマンド: SQUERY パラメータ: SQUERYコマンドの使い方はPRIVMSGと同様です。唯一の違いは、受け取り手がサー ビスで「なくてはならない」という点です。これがサービスにテキストメッセージを 送信する、唯一の方法です。 リプライや使用例について詳しくは、PRIVMSGの項目を見てください。 例: SQUERY irchelp :HELP privmsg ; irchelpというニックネームのサービスへの メッセージ。 SQUERY dict@irc.fr :fr2en blaireau ; dict@irc.frというサービスへのメッセージ。 3.6 ユーザベースのクエリー ユーザクエリーに属するコマンドは、当初、特定のユーザやグループユーザーたち の詳細を知るためのものでした。これらのコマンドにワイルドカードを使うとマッチ したユーザ名のうち、あなたから'見える'ユーザについての情報のみを返します。ユ ーザが見えるかどうかについては、ユーザモードと、相手とあなたの両方が接続して いるチャンネルの組み合わせによって決まります。 サービスはこれらのメッセージを使う「べきではありません」が、使うことが禁じ られてるわけではありません。 3.6.1 Whoクエリー コマンド: WHO パラメータ: [ [ "o" ] ] WHOコマンドはクライアントが、クライアントが指定したパラメータに'マッ チする'、情報のリストを求めるクエリーを発行するのに使われます。パラメ ータが指定されていない場合には、すべての可視(不可視状態(ユーザモードが+iであ る)ではなく、なおかつ、リクエストを出しているクライアントと共通のチャンネル にいない)ユーザがリストアップされます。同様の結果は、を"0"にするか、す べての見えるユーザにマッチするワイルドカードを使っても得られます。 WHOに渡されるは、チャンネルが見当たらない場合、ユーザのホス ト、サーバ、本名、ニックネームと照合されます。 "o"パラメータが指定された場合には、に合致するオペレータのみが返され ます。 ニューメリックリプライ: ERR_NOSUCHSERVER RPL_WHOREPLY RPL_ENDOFWHO 例: WHO *.fi ; "*.fi"にマッチするすべてのユーザを リストアップするコマンド。 WHO jto* o ; "jto*"にマッチするすべてのオペレータを リストアップするコマンド。 3.6.2 Whoisクエリー コマンド: WHOIS パラメータ: [ ] *( "," ) このコマンドはユーザ個別の情報を問い合わせるのに使います。サーバはこのコマ ンドに対し、マスクにマッチするユーザそれぞれの状態を表す、複数のニューメリッ クメッセージを(それらの情報を見る権限があるならば)返します。にワイルド カードが使用されていなければ、そのニックネームについてあなたが見る権限を持っ ているすべての情報が返されます。 パラメータが指定された場合、クエリーは指定されたサーバに送られま す。これは、あるユーザがどのくらいの時間アイドル状態になっているかを知りたい というような場合に有用です。 ほかの情報はグローバルに公開されていますが、こ の情報はローカルサーバ(そのユーザが直接接続しているサーバ)にしかわからないか らです。 パラメータ内ではワイルドカードが使えます。 ニューメリックリプライ: ERR_NOSUCHSERVER ERR_NONICKNAMEGIVEN RPL_WHOISUSER RPL_WHOISCHANNELS RPL_WHOISCHANNELS RPL_WHOISSERVER RPL_AWAY RPL_WHOISOPERATOR RPL_WHOISIDLE ERR_NOSUCHNICK RPL_ENDOFWHOIS 例: WHOIS wiz ; WiZというニックネームのユーザについての 閲覧可能な情報を返します。 WHOIS eff.org trillian ; eff.orgというサーバにtrillianについての ユーザ情報を問い合わせ。 3.6.3 Whowas コマンド: WHOWAS パラメータ: *( "," ) [ [ ] ] Whowasはすでに存在しないニックネームについての情報を問い合わせます。ニック ネームは、ユーザがニックネームを変更したり、IRCを終了した場合に消滅すること があります。このクエリーに対する返答として、サーバはニックネームのヒストリー を検索し、完全に一致するニックネームを探します(ここではワイルドカード照合は しません)。ヒストリーは過去方向に検索されるので、一番最近のエントリーが最初 に返されます。複数のエントリーがあった場合には、最大でパラメータの数 まで(パラメータが指定されていない場合にはすべて)のリプライが返されま す。としてプラスでない数が指定された場合にも全検索が行われます。 パラメータ内ではワイルドカードが使えます。 ニューメリックリプライ: ERR_NONICKNAMEGIVEN ERR_WASNOSUCHNICK RPL_WHOWASUSER RPL_WHOISSERVER RPL_ENDOFWHOWAS 例: WHOWAS Wiz ; "WiZ"というニックネームについて、 ニックネームヒストリー中のすべての 情報を返します。 WHOWAS Mermaid 9 ; ニックネームヒストリーの中で、 "Mermaid"について最近から9つまでの エントリーを返します。 WHOWAS Trillian 1 *.edu ; "*.edu"にマッチする、発見された最初のサーバから接続 している"Trillian"の一番新しいヒストリー を返します。 3.7 そのほかのメッセージ このカテゴリーのメッセージは、上記のカテゴリーのどれにも当てはまりません が、それでも、プロトコルの一部であり、対応が「要求される」ものです。 3.7.1 Killメッセージ コマンド: KILL パラメータ: KILLコマンドは、クライアント-サーバの接続を、実際に接続しているサーバによ って切断するのに使います。サーバは、ニックネームの重複が発生するとKILLメッセ ージを発します。これはオペレータ権限を持つユーザにも使用「可能」です。 自動的に再接続するアルゴリズムを持つクライアントにとっては、このコマンドは 結果として無意味です。なぜなら、切断の時間は非常に短いからです。それでも、こ のコマンドはデータの流れを切断できるので、悪意のあるユーザや、事故による大量 の'洪水'を止めるのに使用できます。悪意のあるユーザは通常、すぐに再接続できる し、自分の妨害行為を再開できるので、気にしません。このコマンドの悪用を避ける には、ユーザの誰かがほかのユーザに対するKILLメッセージを受信する役目を引き受 けて、トラブルの原因となりそうな場所を見張る方法があります。 ニックネームが常にグローバルにユニークであることが「要求される」場では、' 重複'が発生した(同じニックネームで二人のユーザが登録しようとしている)場合に は必ずKILLメッセージが発行され、両方のユーザが消滅し、一人だけがまた現れるこ とが期待されます。 KILLメッセージの結果クライアントが消滅したら、サーバはそのニックネームを、 使えないニックネームのリストに加える「べき」です。これは、クライアントがこの ニックネームをすぐに再使用することを止めるのが目的です。ニックネームの再使用 はよくある妨害行為のパターンで、無用な"KILLループ"を引き起こします。このやり 方については、"IRC Server Protocol"文書の[IRC-SERVER]に情報があります。 コメントにはKILLを行った実際の理由を記述「しなくてはなりません」。サーバが 発行するKILLに対しては、通常、二つのニックネームが重複していて、その出所に関 する詳細が記載されます。ユーザが出した場合は、それを見たほかの人を納得させる ような、もっともな理由を出すかどうかは、ユーザに任されています。KILLを行なっ た人物を特定するてがかりを隠す目的で、偽のKILLが発行されるのを避けるあるいは やる気をなくさせるため、コメントには'killパス'も表示されます。これは経路上に ある各サーバーが、それぞれ自分の名前を行頭に追加していったものです。 ニューメリックリプライ: ERR_NOPRIVILEGES ERR_NEEDMOREPARAMS ERR_NOSUCHNICK ERR_CANTKILLSERVER 注: オペレータのみがKILLコマンドでほかのユーザKILLできるようにすることが「推奨されます」。 このコマンドは長年、多くの論争の種になっており、またオペレータであってもリモート サーバのユーザをKILLすることが許されるべきではない、ということも広く認識されています。 3.7.2 Pingメッセージ コマンド: PING パラメータ: [ ] PINGコマンドは、ネットワーク上のアクティブなクライアントやサーバが、実際に つながって動いているかどうかをテストするのに使われます。サーバは、ネットワー クからほかのアクションが届かない場合、一定間隔でPINGメッセージを送出します。 指定時間内にPINGメッセージに返答がない場合、その接続はクローズされます。PING メッセージは、接続がアクティブな場合でも送られる「可能性があります」。 PINGメッセージを受け取ったら、(PINGメッセージを送ったサーバ)への リプライとして、可能な限り早く正しいPONGメッセージを送ら「なくてはなりませ ん」。パラメータが指定されていれば、それがpingのターゲットとなり、 メッセージはそこに転送されます。 ニューメリックリプライ: ERR_NOORIGIN ERR_NOSUCHSERVER 例: PING tolsun.oulu.fi ; サーバにPINGメッセージを送るコマンド。 PING WiZ tolsun.oulu.fi ; "tolsun.oulu.fi"というサーバにPING メッセージを送る、WiZからのコマンド。 PING :irc.funet.fi ; "irc.funet.fi"というサーバから出された Pingメッセージ。 3.7.3 Pongメッセージ コマンド: PONG パラメータ: [ ] PONGメッセージはPINGメッセージへのリプライです。パラメータが指定 されれば、メッセージはそこに転送され「なくてはなりません」。パラメー タはPINGメッセージに応答してこのメッセージを生成したサーバの名前です。 ニューメリックリプライ: ERR_NOORIGIN ERR_NOSUCHSERVER 例: PONG csd.bu.edu tolsun.oulu.fi ; csd.bu.edu toからtolsun.oulu.fiへの PONGメッセージ。 3.7.4 Error コマンド: ERROR パラメータ: ERRORコマンドは、重大な、または致命的なエラーをほかの複数のサーバにレポー トするときに、サーバが使うものです。一つのサーバからもう一つのサーバに送られ ることもありますが、一般の出所の知れないクライアントから送信されても受け付け ては「いけません」。 サーバ対サーバ間で発生したエラーをレポートするには、ERRORメッセージのみが 使われる「べき」です。ERRORメッセージはまず経路の先にあるサーバに送られ、そ こからそのサーバがメッセージを該当するローカルユーザやログにレポートします。 メッセージがあるサーバから送られたら、ほかのサーバに渡されることはありませ ん。 ERRORメッセージは、クライアントの接続を終了する前にも使われます。 サーバが受け取ったERRORメッセージをオペレータに送るとき、そのメッセージは NOTICEメッセージに埋め込む形にして、クライアントにはそのエラーに責任がないこ とを明示する「べき」です。 ニューメリック: なし。 例: ERROR :Server *.fi already exists ; このエラーのもとになったほかのサーバ へのERRORメッセージ。 NOTICE WiZ :ERROR from csd.bu.edu -- Server *.fi already exists ; 上記と同じERRORメッセージだが、他の サーバのユーザであるWiZに送られたもの。 4. オプションの機能 この章ではオプションのメッセージについて述べます。ここで述べられるプロトコ ルを、すでに稼動しているサーバに実装する必要はありません。機能がない場合は、 エラーリプライメッセージか、アンノウンコマンドエラーが出され「なくてはなりま せん」。メッセージがほかのサーバに向けてのものならば、そのサーバに渡され「な くてはなりません」(本質的には内容の解釈が「必要とされます」)。これらのメッセ ージに割り当てられているニューメリックは、以下にメッセージごとにリストアップ してあります。 このセクションの中でサービスが使用可能なのは、USERHOSTとISONメッセージのみ です。 4.1 Away コマンド: AWAY パラメータ: [ ] AWAYコマンドを使うと、クライアントは自分(自分がいるチャンネルではない)あて にPRIVMSGコマンドが送られたときの、自動リプライ用文章を設定できます。サーバ は、PRIVMSGコマンドを出したクライアントに自動リプライを送ります。返答を送れ るサーバは、送り手のクライアントが接続しているサーバのみです。 AWAYコマンドをひとつのパラメータとともに使用した場合、AWAYメッセージを設定 することとなり、パラメータが指定されていない場合は、AWAYメッセージの取り消し を意味します。 AWAYメッセージはコスト(メモリやバンド幅)が高いため、クライアント-サーバ間 のコミュニケーションにのみ使う「べき」です。サーバは、ほかのサーバから送られ たAWAYメッセージを、単に無視するだけにするという選択も「可能です」。ほかのサ ーバ経由でクライアントのAWAYステータスを変更するには、ユーザモード'a'を代わ りに使用する「べき」です(3.1.5参照)。 ニューメリックリプライ: RPL_UNAWAY RPL_NOWAWAY 例: AWAY :Gone to lunch. Back in 5 ; "Gone to lunch. Back in 5"という awayメッセージを設定するコマンド。 4.2 Rehashメッセージ コマンド: REHASH パラメータ: なし rehashコマンドは、オペレータがサーバに設定ファイルを再読み込みさせ、実行さ せる管理コマンドです。 ニューメリックリプライ: RPL_REHASHING ERR_NOPRIVILEGES 例: REHASH ; オペレータ権限のあるユーザから サーバに設定ファイルを再読み込みするよう にというメッセージ。 4.3 Dieメッセージ コマンド: DIE パラメータ: None オペレータはDIEコマンドを使ってサーバをシャットダウンすることができます。 このメッセージは、誰もがオペレータとしてサーバに接続して、このコマンドを実行 することを許すリスクを負うため、オプション扱いとなっています。 DIEコマンドは常に、送り手であるクライアントが接続しているサーバが完全に実 行「しなくてはなりません」。ほかのサーバに渡しては「いけません」。 ニューメリックリプライ: ERR_NOPRIVILEGES 例: DIE ; パラメータはありません。 4.4 Restartメッセージ コマンド: RESTART パラメータ: なし オペレータはrestartコマンドを使ってサーバを再起動できます。このメッセージ は、誰もがオペレータとしてサーバに接続してこのコマンドを実行することを許し、 サービスが(少なくとも)分断する原因になるリスクを負うため、オプション扱いとな っています。 RESTARTコマンドは常に、送り手であるクライアントが接続しているサーバが完全 に実行「しなくてはなりません」。ほかのサーバに渡しては「いけません」。 ニューメリックリプライ: ERR_NOPRIVILEGES 例: RESTART ; パラメータはありません。 4.5 Summonメッセージ コマンド: SUMMON パラメータ: [ [ ] SUMMONコマンドはIRCサーバが動いているホストにいるユーザに、IRCに参加してく ださい、というメッセージを送るのに使えます。このメッセージは、ターゲットサー バが(a)SUMMONをを使用可にしていて、(b)ユーザがログインしており、(c)サーバプ ロセスがユーザのttyに書き込める(か、似たようなことができる)場合にのみ、送ら れます。 パラメータがなければ、クライアントが接続しているサーバをターゲット とみなし、その上のを呼び出そうとします。 SUMMONがサーバ上で使用可になっていない場合、ERR_SUMMONDISABLEDニューメリッ クを返さ「なくてはなりません」。 ニューメリックリプライ: ERR_NORECIPIENT ERR_FILEERROR ERR_NOLOGIN ERR_NOSUCHSERVER ERR_SUMMONDISABLED RPL_SUMMONING 例: SUMMON jto ; サーバのホスト上のjtoを呼び出す。 SUMMON jto tolsun.oulu.fi ; "tolsun.oulu.fi"というホスト名のサーバが動いて いるホスト上のjtoを呼び出す。 4.6 Users コマンド: USERS パラメータ: [ ] USERSコマンドはサーバにログインしたユーザのリストを、who(1)、rusers(1)、 finger(1)といったUNIXコマンドに似た形で返します。使用不可の場合、そのことを 表す正しいニューメリックが返され「なくてはなりません」。 このようなコマンドにはセキュリティ面での潜在的な問題があるので、サーバへの 実装においてはデフォルトで使用不可にしておく「べき」です。使用可にするには、 単にオプションを変更して再起動するのではなく、サーバの再コンパイルか、それに 近い変更を必要とする「べき」です。また、このコマンドを使用可にする手続きに は、適切なコメントが提示される「べき」です。 ニューメリックリプライ: ERR_NOSUCHSERVER ERR_FILEERROR RPL_USERSSTART RPL_USERS RPL_NOUSERS RPL_ENDOFUSERS ERR_USERSDISABLED 使用不可時のリプライ: ERR_USERSDISABLED 例: USERS eff.org ; eff.orgというサーバにログインした ユーザのリストの要求 4.7 Operwallメッセージ コマンド: WALLOPS パラメータ: WALLOPSコマンドは、現在接続していて、'w'ユーザモードを設定しているすべての ユーザにメッセージを送るのに使われます(3.1.5の"ユーザモード"参照)。 ユーザコマンドとしてWALLOPSメッセージを実装した後、広く、また頻繁に、多く の人々にメッセージを送る手段として乱用されるということが判明しました。このた め、WALLOPSの実装においては、サーバのみをWALLOPSの送信元として許可し、認める ことが「推奨されます」。 ニューメリックリプライ: ERR_NEEDMOREPARAMS 例: :csd.bu.edu WALLOPS :Connect '*.uiuc.edu 6667' from Joshua ; Joshuaから受け取り、実行したCONNECT メッセージをアナウンスするcsd.bu.edu からのWALLOPSメッセージ。 4.8 Userhostメッセージ コマンド: USERHOST パラメータ: *( SPACE ) USERHOSTコマンドは、5つまでのニックネームのリストをパラメータとします。 各々空白文字で区切られ、各々のニックネームについての情報のリストが返されま す。返されたリストは各々のリプライを空白で区切ったものです。 ニューメリックリプライ: RPL_USERHOST ERR_NEEDMOREPARAMS 例: USERHOST Wiz Michael syrk ; USERHOSTリクエスト。"Wiz"、"Michael"、 "syrk"というニックネームについての情報。 :ircd.stealth.net 302 yournick :syrk=+syrk@millennium.stealth.net ; syrkというユーザへのリプライ。 4.9 Isonメッセージ コマンド: ISON パラメータ: *( SPACE ) ISONコマンドは、あるニックネームが現在IRC上にあるかどうかを、すばやく効果 的に知る手段を提供するために実装されました。ISONに指定するパラメータは空白で 区切られたニックネームのリストの、一種類のみです。リスト中のニックネームのう ち存在するもの各々について、サーバはそのリプライ文字列にそのニックネームを加 えます。このため、リプライ文字列は空である可能性もあります(リストのうちに実 在するニックネームがない場合)し、パラメータ文字列の完全なコピーであることも ある(すべて実在している場合)し、そのほかパラメータの中にある一部のニックネー ムだけが含まれる場合もあります。指定できるニックネームの数には制限はなく、た だメッセージの全体長が512文字を越えてしまい、サーバーによって切断され「ては ならない」という点だけはチェックしておいてください。 ISONはコマンドを送ったクライアントのローカルサーバによってのみ処理され、ほ かのサーバに渡されてさらに処理されることはありません。 ニューメリックリプライ: RPL_ISON ERR_NEEDMOREPARAMS 例: ISON phone trillian WiZ jarlek Avalon Angel Monstah syrk ; 7つのニックネームに対するISONリクエスト のサンプル。 5. リプライ 以下は、これまでに解説されたコマンドに対するレスポンスとして生成される、ニ ューメリックリプライのリストです。各々のニューメリックはその数値と、名前と、 リプライ文字列の形で構成されます。 5.1 コマンドレスポンス 001から099までのニューメリックは、クライアント-サーバ接続にのみ使われ、サ ーバ同士でやり取りされることはありません。コマンドの結果生成されるリプライ は、200から399の間になります。 001 RPL_WELCOME "Welcome to the Internet Relay Network !@" 002 RPL_YOURHOST "Your host is , running version " 003 RPL_CREATED "This server was created " 004 RPL_MYINFO " " - サーバはユーザが登録に成功すると、001から004のリプライをユーザに 送ります。 005 RPL_BOUNCE "Try server , port " - サーバによってユーザに送られた、ほかのサーバを案内するリプライ。 これはサーバが込み合っているために、接続が拒否される場合によく使わ れます。 302 RPL_USERHOST ":*1 *( " " )" - クエリーリストに対するリプライをリストアップするのに、USERHOSTが 使うリプライフォーマット。リプライ文字列は下記のように生成されま す: reply = nickname [ "*" ] "=" ( "+" / "-" ) hostname '*'はクライアントがオペレータとして登録したかどうかを表します。'-' か'+'の文字は、クライアントが各々AWAYメッセージを設定したかどうか を表します。 303 RPL_ISON ":*1 *( " " )" - リプライをリストアップするのに、ISONが使うリプライフォーマット。 301 RPL_AWAY " :" 305 RPL_UNAWAY ":You are no longer marked as being away" 306 RPL_NOWAWAY ":You have been marked as being away" - これらのリプライはAWAYコマンド(が使用可能ならば)との組み合わせで 使われます。AWAY状態のクライアントにPRIVMSGを送ったクライアントに 対して、RPL_AWAYが送られます。RPL_AWAYは、クライアントが接続してい るサーバのみが送ります。リプライRPL_UNAWAYとRPL_NOWAWAYは、クライ アントが終了してAWAYメッセージを設定したときに送られます。 311 RPL_WHOISUSER " * :" 312 RPL_WHOISSERVER " :" 313 RPL_WHOISOPERATOR " :is an IRC operator" 317 RPL_WHOISIDLE " :seconds idle" 318 RPL_ENDOFWHOIS " :End of WHOIS list" 319 RPL_WHOISCHANNELS " :*( ( "@" / "+" ) " " )" - 311〜313、317〜319のリプライは、すべてWHOISメッセージに対するレ スポンスです。適切なパラメータが指定されたとき、問い合わせられたサ ーバは、上記のニューメリックを組み合わせて返答するか(問い合わせら れたニックネームが見つかった場合)、さもなければエラーリプライを返 さ「なければなりません」。 RPL_WHOISUSER中の'*'は、文字であって、 ワイルドカードではありません。これらのリプライのなかで、 RPL_WHOISCHANNELSだけが複数回送信される可能性があります(長いチャン ネル名のリストを送るため)。チャンネル名に続く'@'や'+'という文字 は、クライアントがチャンネルオペレータであるかどうか、モデレートチ ャンネルで話す許可をもらっているかどうかを表します。RPL_ENDOFWHOIS リプライは実行されているWHOISメッセージ処理の終端を示すのに使われ ます。 314 RPL_WHOWASUSER " * :" 369 RPL_ENDOFWHOWAS " :End of WHOWAS" - WHOWASメッセージにリプライするとき、サーバはリスト中のニックネー ム各々に対して、RPL_WHOWASUSER、RPL_WHOISSERVER、ERR_WASNOSUCHNICK のいずれかを使わ「なくてはなりません」。一連のリプライをすべて送り 終えたら、終端にRPL_ENDOFWHOWASを送ら「なくてはなりません」(たとえ リプライが一個しかなく、しかもそれがエラーであっても)。 321 RPL_LISTSTART 古くてもう使われていません。 322 RPL_LIST " <# visible> :" 323 RPL_LISTEND ":End of LIST" - RPL_LISTとRPL_LISTENDというリプライは、LISTコマンドに対する、実 際のデータを含むリプライ、およびサーバーからの返答完了を示します。 返答するべきチャンネルが存在しない場合、終了リプライのみが送られ 「なくてはなりません」。 325 RPL_UNIQOPIS " " 324 RPL_CHANNELMODEIS " " 331 RPL_NOTOPIC " :No topic is set" 332 RPL_TOPIC " :" - チャンネルトピックを決めるのにTOPICメッセージを送ったとき、二つ のうちどちらかのリプライが送られます。トピックが設定されれば RPL_TOPICが返送され、設定されなければRPL_NOTOPICが返ります。 341 RPL_INVITING " " - INVITEメッセージが成功し、ターゲットのクライアントに渡されること を表すため、サーバが返します。 342 RPL_SUMMONING " :Summoning user to IRC" - サーバから、SUMMONメッセージを受けてユーザを呼び出していることを 示すために返されます。 346 RPL_INVITELIST " " 347 RPL_ENDOFINVITELIST " :End of channel invite list" - 特定のチャンネルに対する'招待マスク'を列挙するには、サーバは RPL_INVITELISTとRPL_ENDOFINVITELISTメッセージを使ってリストを送り 返さなければなりません。各々のアクティブなマスクに対し、個別に RPL_INVITELISTが送られます。マスクを列挙し終えたら(もしくはひとつ も無ければ)、RPL_ENDOFINVITELISTが送られ「なくてはなりません」。 348 RPL_EXCEPTLIST " " 349 RPL_ENDOFEXCEPTLIST " :End of channel exception list" - 特定のチャンネルに対する'例外マスク'を列挙するには、サーバは RPL_EXCEPTLISTとRPL_ENDOFEXCEPTLISTメッセージを使ってリストを送り 返さなければなりません。各々のアクティブなマスクに対して個別に RPL_EXCEPTLISTが送られます。マスクを列挙し終えたら(もしくはひとつ も無ければ)、RPL_ENDOFEXCEPTLISTが送られ「なくてはなりません」。 351 RPL_VERSION ". :" - サーバがバージョンの詳細を伝えるリプライです。は使われ ているソフトウェアのバージョン(パッチレベルのリビジョンも含む)で、 はサーバが"デバッグモード"で動いているかどうかを表しま す。 "comments"フィールドにはバージョンに関することや、そのバージョンに 関するそのほか詳細情報を記述できます。 352 RPL_WHOREPLY " ( "H" / "G" > ["*"] [ ( "@" / "+" ) ] : " 315 RPL_ENDOFWHO " :End of WHO list" - RPL_WHOREPLYとRPL_ENDOFWHOのペアは、WHOメッセージへの返答に使い ます。RPL_WHOREPLYは、WHOクエリーに該当する項目があったときにだけ 送られます。WHOメッセージに複数のパラメータが指定されていた場合に はを含む項目を処理し終わるたびに、RPL_ENDOFWHOが送られ「なく てはなりません」。 353 RPL_NAMREPLY "( "=" / "*" / "@" ) :[ "@" / "+" ] *( " " [ "@" / "+" ] ) - "@"はシークレットチャンネルに、"*"はプライベートチャンネルに、そ して"="がほかのチャンネル(パブリックチャンネル)に使われます。 366 RPL_ENDOFNAMES " :End of NAMES list" - NAMESメッセージへのリプライとして、RPL_NAMREPLYとRPL_ENDOFNAMES のペアがクライアントに送り返されます。クエリー内にチャンネルが見当 たらない場合は、RPL_ENDOFNAMESだけを返します。これに関する例外は、 NAMESメッセージがパラメータなしで送られたときに、すべての可視チャ ンネルやその内容が、一連のRPL_NAMEREPLYメッセージの形で送り返さ れ、最後にRPL_ENDOFNAMESが送られる場合です。 364 RPL_LINKS " : " 365 RPL_ENDOFLINKS " :End of LINKS list" - LINKSメッセージへのリプライでは、サーバはMUSTRPL_LINKSニューメリ ックを使ってリプライを返し、RPL_ENDOFLINKSリプライを使ってリストの 終わりをマークし「なくてはなりません」。 367 RPL_BANLIST " " 368 RPL_ENDOFBANLIST " :End of channel ban list" - 特定のチャンネルに対する'禁止'を列挙するには、サーバは RPL_BANLISTとRPL_ENDOFBANLISTメッセージを使ってリストを送り返さな ければなりません。各々のアクティブなマスクに対して個別に RPL_BANLISTが送られます。禁止マスクを列挙し終えたら(もしくはひとつ も無ければ)、RPL_ENDOFBANLISTが送られ「なくてはなりません」。 371 RPL_INFO ":" 374 RPL_ENDOFINFO ":End of INFO list" - サーバがINFOメッセージにリプライするときは、そのすべての情報を一 連のRPL_INFOメッセージとして送り、最後にリプライの終わりを示す RPL_ENDOFINFOを送る必要があります。 375 RPL_MOTDSTART ":- Message of the day - " 372 RPL_MOTD ":- " 376 RPL_ENDOFMOTD ":End of MOTD command" - MOTDメッセージへリプライする際、MOTDファイルが存在するなら、その ファイルがRPL_MOTD形式のリプライで、一行ずつ送信されます。一行は80 文字以内です。これらのメッセージの前後には、RPL_MOTDSTART(RPL_MOTD の前)とRPL_ENDOFMOTD(後ろ)が送信され「なくてはなりません」。 381 RPL_YOUREOPER ":You are now an IRC operator" - RPL_YOUREOPERは、OPERメッセージによってオペレータ権限を得ること に成功したクライアントに返されます。 382 RPL_REHASHING " :Rehashing" - REHASHオプションが使われ、オペレータがREHASHメッセージを送った場 合、RPL_REHASHINGがオペレータに返されます。 383 RPL_YOURESERVICE "You are service " - サービスがうまく登録されると、サーバからサービスに送られます。 391 RPL_TIME " :" - TIMEメッセージに応答する際には、サーバは上記のRPL_TIME形式でリプ ライを送ら「なくてはなりません」。時刻を示す文字列には、ただその場 所での正しい日付と時間を含む必要のみがあります。時刻の文字列に関し ては、それ以上の要求はありません。 392 RPL_USERSSTART ":UserID Terminal Host" 393 RPL_USERS ": " 394 RPL_ENDOFUSERS ":End of users" 395 RPL_NOUSERS ":Nobody logged in" - USERSメッセージをサーバーが取り扱う際には、RPL_USERSTART、 RPL_USERS、RPL_ENDOFUSERS、RPL_NOUSERSのリプライが使われることにな ります。RPL_USERSSTARTは最初に「送られなくてはなりません」。そのあ とに一連のRPL_USERS、あるいはRPL_NOUSERがひとつだけ続きます。そし てそのあとにRPL_ENDOFUSERSが続きます。 200 RPL_TRACELINK "Link V " 201 RPL_TRACECONNECTING "Try. " 202 RPL_TRACEHANDSHAKE "H.S. " 203 RPL_TRACEUNKNOWN "???? []" 204 RPL_TRACEOPERATOR "Oper " 205 RPL_TRACEUSER "User " 206 RPL_TRACESERVER "Serv S C @ V" 207 RPL_TRACESERVICE "Service " 208 RPL_TRACENEWTYPE " 0 " 209 RPL_TRACECLASS "Class " 210 RPL_TRACERECONNECT Unused. 261 RPL_TRACELOG "File " 262 RPL_TRACEEND " :End of TRACE" - RPL_TRACE〜リプライは、どれもTRACEメッセージへのリプライとしてサ ーバから返されるものです。そのうちいくつが返されるかは、TRACEメッ セージの内容や、オペレータによって送信されたものかどうかによりま す。リプライの発生する順番は決まっていません。RPL_TRACEUNKNOWN、 RPL_TRACECONNECTING、RPL_TRACEHANDSHAKEの三つはすべて、完全に確立 していない接続で、未知のもの、接続しようとしている途上のもの、'サ ーバハンドシェイク'を完了しようとする過程にあるもののいずれかに対 して使われます。RPL_TRACELINKは、TRACEメッセージに対応していて、 TRACEメッセージをほかのサーバに渡さなくてはならないサーバから送ら れます。TRACEメッセージに応じて、IRCネットワークを横断する RPL_TRACELINKのリストは、パスに沿ったサーバの実際の接続状況を反映 していなくてはなりません。RPL_TRACENEWTYPEは、ほかのカテゴリーに分 類できないけれど、表示される必要のある接続に使われます。 RPL_TRACEENDはリストの終わりを示すために送られます。 211 RPL_STATSLINKINFO "