Network Working Group C. Kalt
Request for Comments: 2812 April 2000
Updates: 1459
Category: Informational
Internet Relay Chat: クライアントプロトコル
IRC
- RFC 1459 (Internet Relay Chat Protocol)
- RFC 2810 (Internet Relay Chat: Architecture)
- RFC 2811 (Internet Relay Chat: Channel Management)
- RFC 2812 (Internet Relay Chat: Client Protocol)
- RFC 2813 (Internet Relay Chat: Server Protocol)
- RFC 7194 (Default Port for Internet Relay Chat (IRC) via TLS/SSL)
本メモの位置づけ
このメモは、インターネットコミュニティのための情報を提供するものです。このメモは、いかなる種類のインターネット標準も規定するものではありません。このメモの配布は無制限です。
Copyright Notice
Copyright (C) The Internet Society (2000). All Rights Reserved.
IESG NOTE:
IRC プロトコル自体は、クライアント間のデータ転送のいくつかの可能性を可能にし、電子メールのような他の転送メカニズムと同様に、データの受信者は、データの取り扱いについて注意しなければなりません。IRC プロトコルのセキュリティ問題については、例えば http://www.irchelp.org/irchelp/security/ を参照してください。
概要
IRC(Internet Relay Chat)プロトコルは、テキストベースの会議用で、サーバに接続可能なソケットプログラムであれば、最もシンプルなクライアントとなります。
この文書では、クライアントプロトコルを定義し、読者が IRC アーキテクチャ [IRC-ARCH] に精通していることを想定しています。
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: チャネルマネジメント" [IRC-CHAN] に記載されています。
2. IRC クライアント仕様
2.1 概要
本書で説明するプロトコルは、クライアントがユーザ登録する際のクライアントからサーバへの接続にのみ使用されます。
2.2 文字コード
特定の文字セットは指定しません。プロトコルは、8 ビットで構成されるオクテット(Octet)という符号を基本としています。各メッセージはこのオクテットの数で構成されますが、一部のオクテット値はメッセージの区切りとなる制御コードに使用されます。
8ビットプロトコルであるにもかかわらず、デリミタとキーワードがあるため、US-ASCII の端末と telnet 接続でほとんど使用可能です。
IRC の起源はスカンジナビアンであるため、{}|^
という文字は、それぞれ []\~
という文字に相当する小文字であると考えられています。これは、2つのニックネームやチャネル名の等価性を判断する際に重要な問題です。
2.3 メッセージ
サーバとクライアントは互いにメッセージを送り合い、その応答が発生することもあればしないこともあります。メッセージに有効なコマンドが含まれている場合、後の章で説明するように、クライアントは指定されたとおりの返答を期待すべきですが、返答を永遠に待つことはお勧めできません。クライアントからサーバ、サーバからサーバへの通信は、本質的に非同期です。
各 IRC メッセージは、接頭辞(オプション)、コマンド、コマンドパラメータ(最大15個)の最大3つの主要部分から構成されることができます。接頭辞、コマンド、およびすべてのパラメータは、それぞれ1つの ASCII スペース文字(0x20
)で区切られます。
接頭辞の存在は、先頭の ASCII コロン文字(:
、0x3b
)1つで示され、これはメッセージ自体の最初の文字でなければなりません。コロンと接頭辞の間にギャップ(空白)を入れてはいけません。接頭辞は、サーバがメッセージの本当の出所を示すために使われます。接頭辞がない場合、そのメッセージは受信したコネクションから発信されたものとみなされます。クライアントはメッセージを送るときに接頭辞を使うべきではありません。もし使うなら、有効な接頭辞はそのクライアントに関連付けられた登録済みのニックネームだけです。
コマンドは、有効な IRC コマンドか、ASCII テキストで表現された3桁の数字でなければなりません。
IRC メッセージは常に CR-LF(キャリッジリターン-ラインフィード)のペアで終了する文字の行であり、これらのメッセージは最後の CR-LF を含むすべての文字をカウントして512文字を超えないものとします。従って、コマンドとそのパラメータには最大510文字が許されます。メッセージ行の継続については規定されていません。現在の実装の詳細については、6 章 を参照してください。
2.3.1 拡張 BNF によるメッセージフォーマット
プロトコルメッセージは、オクテットの連続したストリームから抽出されなければなりません。現在の解決策は、CR と LF という2つの文字をメッセージのセパレータとして指定することです。空のメッセージは黙って無視されるので、メッセージ間で CR-LF のシーケンスが余分な問題なく使用できるようになります。
抽出されたメッセージは、<prefix>
、<command>
、パラメータのリスト(<params>
)という構成要素にパースされます。
これに対する拡張 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
; any octet except NUL, CR, LF, " " and ":"
middle = nospcrlfcl *( ":" / nospcrlfcl )
trailing = *( ":" / " " / nospcrlfcl )
SPACE = %x20 ; space character
crlf = %x0D %x0A ; "carriage return" "linefeed"
NOTES:
-
パラメータリスト抽出後、
<middle>
と<trailing>
のどちらでマッチしても、すべてのパラメータは等しくなります。<trailing>
は、パラメータ内のスペースを許容するための構文上のトリックに過ぎません。 -
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 )
; as specified in 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
; see details on allowed masks in section 3.3.1
chanstring = %x01-07 / %x08-09 / %x0B-0C / %x0E-1F / %x21-2B
chanstring =/ %x2D-39 / %x3B-FF
; any octet except NUL, BELL, CR, LF, " ", "," and ":"
channelid = 5( %x41-5A / digit ) ; 5( A-Z / 0-9 )
Other parameter syntaxes are:
user = 1*( %x01-09 / %x0B-0C / %x0E-1F / %x21-3F / %x41-FF )
; any octet except NUL, CR, LF, " " and "@"
key = 1*23( %x01-05 / %x07-08 / %x0C / %x0E-1F / %x21-7F )
; any 7-bit US_ASCII character,
; except NUL, CR, LF, FF, h/v TABs, and " "
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
; "[", "]", "\", "`", "_", "^", "{", "|", "}"
NOTES:
-
<hostaddr>
構文は、IP アドレスのために従うべき形式を示すことのみを目的としてここで与えられています。これは、このプロトコルの唯一の実装が、基礎となるネットワークプロトコルとして TCP/IP を使用しているという事実を反映していますが、他のプロトコルを使用することを妨げるものではありません。 -
<hostname>
の長さは最大63文字です。これは、(特に)インターネット上のホスト名が長くなる可能性があるため、プロトコルの制限事項となっています。IRC のメッセージは512文字に制限されているため、このような制限が必要なのです。63文字より長いホスト名から接続するクライアントは、ホスト名ではなく、ホスト(数字)アドレスを使って登録されます。 -
このドキュメントの以下の章で使用されるいくつかのパラメータは、便宜上使用されている名前以外、特に何もないため、ここでは定義されていません。これらのパラメータは、
<params>
に定義された一般的な構文に従います。
2.4 数値返信
サーバに送信されたメッセージのほとんどは、何らかの応答を生成します。最も一般的な返信は数値による返信で、エラーと正常な返信の両方に使用されます。数値返信は、送信者接頭辞、3桁の数値、リプライのターゲットからなる1つのメッセージとして送信する必要があります。数値返信は,クライアントから発信することはできません。キーワードが文字列ではなく3桁の数字で構成されていることを除けば、その他の点では、数値による返信は通常のメッセージと同じです。さまざまな返信の一覧は、5 章(返信) に記載されています。
2.5 ワイルドカード表現
文字列の中にワイルドカードが許される場合を "マスク" と呼びます。
文字列のマッチングのために、プロトコルは二つの特殊文字を使うことができます。?
(%x3F
)は一文字だけにマッチし、*
(%x2A
)は任意の数の任意の文字にマッチすます。これらの2つの文字は、second
(%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
; matches wildone
matchmany = *matchone
; matches wildmany
Examples:
a?c ; "a" で始まり "c" で終わる3文字以内の文字列に一致する。
a*c ; "a" で始まり "c" で終わる2文字以上の文字列と一致する。
3. メッセージの詳細
次のページでは、IRC サーバとクライアントが認識する各メッセージについて説明します。この章で説明されているすべてのコマンドは、このプロトコルのすべてのサーバで実装されている必要があります。
ERR_NOSUCHSERVER が返信された場合、メッセージのターゲットが見つからなかったことを意味します。サーバは、このエラー以降、そのコマンドに対して他の応答を送ってはなりません。
クライアントが接続されているサーバは、メッセージ全体を解析し、適切なエラーを返すことが要求されます。
複数のパラメータが提示された場合、それぞれのパラメータの有効性を確認し、適切なレスポンスをクライアントに返さなければなりません。カンマで区切られたパラメータリストを使用した不正なメッセージの場合、各項目に対して応答を送信しなければなりません。
3.1 コネクション登録
ここで説明するコマンドは、IRC サーバにユーザとして接続を登録する場合と、正しく切断する場合に使用します。
"PASS" コマンドは、クライアント接続の登録には必要ありませんが、NICK/USER の組み合わせ(ユーザ接続の場合)または SERVICE コマンド(サービス接続の場合)のうち、後者のコマンドの前に置く必要があります。推奨されるクライアントの登録順序は、以下の通りです。
1. Pass message
2. Nick message 2. Service message
3. User message
成功すると、クライアントは RPL_WELCOME(ユーザ用)または RPL_YOURESERVICE(サービス用)メッセージを受け取り、その接続が現在登録されて IRC ネットワーク全体に知られていることを示します。応答メッセージには、登録された完全なクライアント識別子が含まれていなければなりません。
3.1.1 Password メッセージ
Command: PASS
Parameters: <password>
PASS コマンドは、"接続パスワード" を設定するために使用します。オプションのパスワードは、接続を登録しようとする前に設定することができ、また設定しなければなりません。現在、NICK/USER の組み合わせを送信する前に、PASS コマンドを送信することが必要です。
数値返信:
ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED
例:
PASS secretpasswordhere
3.1.2 Nick メッセージ
Command: NICK
Parameters: <nickname>
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 メッセージ
Command: USER
Parameters: <user> <mode> <unused> <realname>
USER コマンドは、接続の最初に使用し、新規ユーザのユーザ名、ホスト名、リアルネームを指定します。
<mode>
パラメータには数値を指定し、サーバに登録する際にユーザモードを自動的に設定することができます。このパラメータはビットマスクで、2ビットだけが意味を持ちます。ビット2が設定されるとユーザモード w
が設定され、ビット3が設定されるとユーザモード i
が設定されます。(3.1.5 User Mode メッセージ を参照)。
<realname>
には空白文字が含まれることがあります。
数値返信:
ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED
例:
USER guest 0 * :Ronnie Reagan
; ユーザ名 "guest"、本名 "Ronnie Reagan" で登録したユーザ。
USER guest 8 * :Ronnie Reagan
; ユーザ名 "guest"、本名 "Ronnie Reagan" で登録し、非表示にすることを依頼するユーザ。
3.1.4 Oper メッセージ
Command: OPER
Parameters: <name> <password>
一般ユーザは、OPER コマンドを使用してオペレータ権限を取得します。オペレータ権限を得るには,<name>
と <password>
の組み合わせが必要です。成功すると、新しいユーザモードを示す MODE メッセージ(3.1.5 項 を参照)がユーザに送信されます。
数値返信:
ERR_NEEDMOREPARAMS RPL_YOUREOPER
ERR_NOOPERHOST ERR_PASSWDMISMATCH
例:
OPER foo bar
; ユーザ名に "foo"、パスワードに "bar" を用いてオペレータ登録を試みる。
3.1.5 User Mode メッセージ
Command: MODE
Parameters: <nickname>
*( ( "+" / "-" ) *( "i" / "w" / "o" / "O" / "r" ) )
ユーザモードは通常、クライアントが他者からどのように見られるか、またはクライアントがどのような "追加" メッセージを送信するかに影響する変更です。
ユーザモードのコマンドは、メッセージの送信者とパラメータとして与えられたニックネームの両方が同じである場合にのみ受け入れられなければなりません。もし他のパラメータが与えられなければ、サーバはニックネームに対する現在の設定を返します。
使用可能なモードは以下の通りです。
a - ユーザが不在であることを示すフラグが立てられる。
i - ユーザを非表示とマークする。
w - ユーザが Wallops を受け取る。
r - ユーザ接続を制限する。
o - オペレータフラグ。
O - ローカルオペレータフラグ。
s - サーバ通知を受信するユーザをマークする。
後日、追加のモードも用意される予定です。
MODE コマンドでフラグ a
をトグルしてはならず、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 メッセージ
Command: SERVICE
Parameters: <nickname> <reserved> <distribution> <type>
<reserved> <info>
新しいサービスを登録するための SERVICE コマンドです。コマンドのパラメータは、新しいサービスのニックネーム、ディストリビューション、タイプ、情報を指定します。
<distribution>
パラメータは,サービスの可視性を指定するために使用します.サービスは,ディストリビューションに一致する名前を持つサーバにのみ知られる可能性があります。名前が一致するサーバがサービスを知るためには,そのサーバとサービスが接続されているサーバとの間のネットワークパスが,すべてマスクに一致するサーバで構成されている必要があります。
<type>
パラメータは現在、将来の使用のために予約されています。
数値返信:
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
Command: QUIT
Parameters: [ <Quit Message> ]
クライアントのセッションは、Quit メッセージで終了します。サーバは、ERROR メッセージをクライアントに送信することでこれを確認します。
数値返信:
None.
例:
QUIT :Gone to have lunch
; 望ましいメッセージの形式。
:syrk!kalt@millennium.stealth.net QUIT :Gone to have lunch
; ユーザ syrk は昼食のために IRC を終了しました。
3.1.8 Squit
Command: SQUIT
Parameters: <server> <comment>
SQUIT コマンドはオペレータのみ使用可能です。サーバのリンクを切断するために使用されます。また、サーバはエラー状態の時に SQUIT メッセージを生成することができます。SQUIT メッセージは、リモートサーバの接続をターゲットにすることもできます。この場合、SQUIT メッセージはオペレータとリモートサーバ間のサーバに影響を与えることなく、単にリモートサーバに送信されます。
<comment>
は、リモートサーバに対して SQUIT を実行するすべてのオペレータによって供給されなければなりません。相手の切断を命じられたサーバは,<comment>
を含む WALLOPS メッセージを生成し,他のユーザがこの動作の理由を知ることができるようにします。
数値返信:
ERR_NOPRIVILEGES ERR_NOSUCHSERVER
ERR_NEEDMOREPARAMS
例:
SQUIT tolsun.oulu.fi :Bad Link ?
; tolson.oulu.fi の uplink に "Bad Link" というコメントで接続を終了させるコマンド。
:Trillian SQUIT cm22.eng.umd.edu :Server out of control
; Trillianからの "Server out of control" というコメントとともに
"cm22.eng.umd.edu" をネットから切断するコマンド。
3.2 チャネル操作
このメッセージ群は,チャネル,そのプロパティ(チャネルモード),およびそのコンテンツ(通常はユーザ)を操作することに関係しています。このため,これらのメッセージはサービスから利用可能であってはなりません。
これらのメッセージはすべて、サーバが許可するかしないかのリクエストです。サーバは、リクエストが許可されたか、拒否されたか、あるいはエラーが発生したかを知らせる応答を送信しなければなりません。サーバがリクエストを許可した場合、メッセージは最終的にユーザ自身に設定された接頭辞で再フォーマットされて送り返されるのが一般的です。
チャネルをどのように管理するかというルールは、サーバによって強制されます。これらのルールは、このドキュメントの範囲外です。詳しくは、"Internet Relay Chat: チャネル管理" [IRC-CHAN] を参照してください。
3.2.1 Join メッセージ
Command: JOIN
Parameters: ( <channel> *( "," <channel> ) [ <key> *( "," <key> ) ] )
/ "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
; キー "fubar "を使ってチャネル "&foo" に参加するコマンド。
JOIN #foo,&bar fubar
; キー "fubar" を使ってチャネル #foo に、キー無しで &bar に参加するコマンド。
JOIN #foo,#bar fubar,foobar
; キー "fubar" を使ってチャネル #foo に、
キー "foobar" を使ってチャネル #bar に参加するコマンド。
JOIN #foo,#bar
; チャネル #foo と #bar に参加するコマンド。
JOIN 0
; 現在参加しているすべてのチャネルを去るコマンド。
:WiZ!jto@tolsun.oulu.fi JOIN #Twilight_zone
; WiZ からのチャンネル #Twilight_zone への JOIN メッセージ。
3.2.2 Part メッセージ
Command: PART
Parameters: <channel> *( "," <channel> ) [ <Part Message> ]
PART コマンドは、メッセージを送信したユーザを、パラメータ文字列で指定されたすべてのチャネルのアクティブメンバリストの対象から除外します。もし "Part メッセージ" が指定された場合、デフォルトメッセージであるニックネームの代わりにこれが送信されます。このリクエストはサーバによって常に許可されます。
サーバは、ターゲットのリスト形式で引数を解析できなければなりませんが、クライアントに PART メッセージを送信する際には、リストを使用すべきではありません。
数値返信:
ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL
ERR_NOTONCHANNEL
例:
PART #twilight_zone
; Command to leave channel "#twilight_zone"
; チャネル "#twilight_zone" を抜けるコマンド。
PART #oz-ops,&group5
; "&group5" と "#oz-ops" の両チャネルを抜けるコマンド。
:WiZ!jto@tolsun.oulu.fi PART #playzone :I lost
; "I lost" というメッセージとともにチャネル "#playzone" を去るユーザ WiZ。
3.2.3 Mode メッセージ
Command: MODE
Parameters: <channel> *( ( "-" / "+" ) *<modes> *<modeparams> )
MODE コマンドは、ユーザがチャネルの特性を照会したり変更したりするために用意されています。利用可能なモードとその用途の詳細については、"Internet Relay Chat: チャンネル管理" [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: チャンネル管理" [IRC-CHAN] で定義されているモードを参照しています。
例:
MODE #Finnish +imI *!*@*.fi
; ホスト名が *.fi に一致するユーザが自動的に招待される、
#Finnish チャネルをモデレートされた '招待制' にするコマンド。
MODE #Finnish +o Kilroy
; チャネル #Finnish の Kilroy に 'chanop' 権限を付与するコマンド。
MODE #Finnish +v Wiz
; WiZ が #Finnish で発言することを許可するコマンド。
MODE #Fins -s
; チャネル #Fins から 'secret' フラグを削除するコマンド。
MODE #42 +k oulu
;チャンネルキーを "ulu" に設定するコマンド。
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
; *.bu.edu にマッチする場合を除き、
*.edu にマッチするホスト名のユーザが参加できないようにするコメント。
MODE #meditation e
; チャネル "#meditation" に設定された例外マスクを一覧表示するコマンド。
MODE #meditation I
; チャネル "#meditation" に設定された招待マスクを一覧表示するコマンド。
MODE !12345ircd O
; "!12345ircd" のチャネル作成者が誰かを問い合わせるコマンド。
3.2.4 Topic メッセージ
Command: TOPIC
Parameters: <channel> [ <topic> ]
TOPIC コマンドは、チャネルのトピックを変更または表示するために使用されます。<topic>
が指定されていない場合は、チャネル <channel>
のトピックが返されます。<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 メッセージ
Command: NAMES
Parameters: [ <channel> *( "," <channel> ) [ <target> ] ]
NAMES コマンドを使用すると、ユーザが表示可能なすべてのニックネームを一覧表示することができます。見えるものと見えないものの詳細については、"Internet Relay Chat: チャネル管理" [IRC-CHAN] を参照してください。<channel>
パラメータは、情報を返すチャネルを指定します。不正なチャネル名に対するエラー返信はありません。
<channel>
パラメータが与えられない場合、すべてのチャネルとその占有者のリストが返されます。このリストの最後には、見えているがどのチャネルにも入っていない、あるいは見えているチャネルにも入っていないユーザのリストが channel
*
にあるとしてリストアップされます。
<target>
パラメータが指定された場合、リクエストをそのサーバに転送し、そのサーバが応答を生成します。
<target>
パラメータには、ワイルドカードを使用できます。
数値返信:
ERR_TOOMANYMATCHES ERR_NOSUCHSERVER
RPL_NAMREPLY RPL_ENDOFNAMES
例:
NAMES #twilight_zone,#42
; #twilight_zone と #42 で表示可能なユーザーをリストアップするコマンド。
NAMES
; 表示可能なすべてのチャネルとユーザを一覧表示するコマンド。
3.2.6 List メッセージ
Command: LIST
Parameters: [ <channel> *( "," <channel> ) [ <target> ] ]
LIST コマンドは、チャネルとそのトピックを一覧表示するために使用されます。<channel>
パラメータを指定した場合は,そのチャネルの状態のみを表示します。
<target>
パラメータが指定された場合、リクエストをそのサーバに転送し、そのサーバが応答を生成します。
<target>
パラメータには、ワイルドカードを使用できます。
数値返信:
ERR_TOOMANYMATCHES ERR_NOSUCHSERVER
RPL_LIST RPL_LISTEND
例:
LIST
; 全チャネルを一覧表示するコマンド。
LIST #twilight_zone,#42
; チャネル #twilight_zone と #42 をリストアップするコマンド。
3.2.7 Invite メッセージ
Command: INVITE
Parameters: <nickname> <channel>
INVITE コマンドは、ユーザをチャネルに招待するために使用します。パラメータ <nickname>
には、対象のチャネル <channel>
に招待する人のニックネームを指定します。ターゲットユーザが招待されるチャネルが存在すること、または有効なチャネルであることは要求されていません。ただし、チャネルが存在する場合、そのチャネルのメンバのみが他のユーザを招待することができます。チャネルに招待専用フラグが設定されている場合、チャネルオペレータのみが INVITE コマンドを発行できます。
招待の通知は、招待したユーザと招待されたユーザのみが受け取ります。他のチャネルメンバには通知されません。(これは MODE 変更と異なり、時々ユーザを悩ませる原因となっています。)
数値返信:
ERR_NEEDMOREPARAMS ERR_NOSUCHNICK
ERR_NOTONCHANNEL ERR_USERONCHANNEL
ERR_CHANOPRIVSNEEDED
RPL_INVITING RPL_AWAY
例:
:Angel!wings@irc.org INVITE Wiz #Dust
; WiZ が Angel からチャネル #Dust に招待されたときのメッセージ。
INVITE Wiz #Twilight_Zone
; WiZ を #Twilight_zone に招待するコマンド
3.2.8 Kick コマンド
Command: KICK
Parameters: <channel> *( "," <channel> ) <user> *( "," <user> )
[<comment>]
KICK コマンドは、チャネルからユーザを強制的に削除することを要求するために使用します。これは <user>
を <channel>
から強制的に PART させます。メッセージが構文的に正しいものであるためには、1つのチャネルパラメータと複数のユーザパラメータ、またはユーザパラメータと同数のチャネルパラメータがなければなりません。"comment" が指定された場合、デフォルトメッセージの代わりに、KICK を発行したユーザのニックネームが送信されます。
サーバは、複数のチャネルまたはユーザを含む KICK メッセージをクライアントに送信してはなりません。これは、古いクライアントソフトウェアとの後方互換性を維持するために必要なことです。
数値返信:
ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL
ERR_BADCHANMASK ERR_CHANOPRIVSNEEDED
ERR_USERNOTINCHANNEL ERR_NOTONCHANNEL
例:
KICK &Melbourne Matthew
; &Melbourne から Matthew を追い出す指令
KICK #Finnish John :Speaking English
; "Speaking English" を理由(コメント)に #Finnish から John を追い出すコマンド。
:WiZ!jto@tolsun.oulu.fi KICK #Finnish John
; チャネル #Finnish から John を外すという WiZ からの KICK メッセージ。
3.3 メッセージの送信
IRC プロトコルの主な目的は、クライアントが互いに通信するための基盤を提供することです。3.5 サービスのクエリとコマンド で説明されている PRIVMSG、NOTICE、SQUERY は、あるクライアントから別のクライアントへのテキストメッセージの配信を実際に実行する唯一のメッセージであり、残りのものはそれを可能にし、それが信頼性と構造化の方法で起こることを保証しようとするだけです。
3.3.1 Private メッセージ
Command: PRIVMSG
Parameters: <msgtarget> <text to be sent>
PRIVMSG は、ユーザ間のプライベートメッセージの送信や、チャネルへのメッセージの送信に使用されます。<msgtarget>
は通常メッセージの受信者のニックネームか、チャネル名です。
<msgtarget>
パラメータには、ホストマスク(#<mask>
)またはサーバマスク($<mask>
)を指定することも可能です。どちらの場合も、サーバはそのマスクに一致するサーバやホストを持つ人にのみ PRIVMSG を送ります。マスクには少なくとも1つの .
を入れなければならず、最後の .
の後にはワイルドカードを入れてはいけません。 この条件は、#*
や $*
にメッセージを送ると、すべてのユーザにブロードキャストされてしまうことを防ぐために存在します。ワイルドカードとは、*
および ?
文字のことです。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 !
; サーバ tolsun.oulu.fi のユーザ名 "jto" のユーザにメッセージを送信するコマンド。
PRIVMSG kalt%millennium.stealth.net@irc.stealth.net :Are you a frog?
; サーバ irc.stealth.net のユーザ名 "kalt" のユーザへのメッセージ。
で、そのユーザはホスト millennium.stealth.net から接続している。
PRIVMSG kalt%millennium.stealth.net :Do you like cheese?
; ローカルサーバのユーザ名 "kalt" のユーザへのメッセージ。
で、そのユーザはホスト millennium.stealth.net から接続している。
PRIVMSG Wiz!jto@tolsun.oulu.fi :Hello !
; ホスト tolsun.oulu.fi から接続している
ニックネーム Wiz、ユーザ名 "jto" のユーザへのメッセージ。
PRIVMSG $*.fi :Server tolsun.oulu.fi rebooting.
; サーバ上の *.fi に一致する名前を持つすべての人へのメッセージ。
PRIVMSG #*.edu :NSFNet is undergoing work, expect interruptions
; *.edu に一致する名前を持つホストから来たすべてのユーザへのメッセージ。
3.3.2 Notice
Command: NOTICE
Parameters: <msgtarget> <text>
NOTICE コマンドは、PRIVMSG と同様に使用されます。NOTICE と PRIVMSG の違いは、NOTICE メッセージに応答して自動返信が決して送られてはならないことです。この規則はサーバにも適用されます。サーバは、NOTICE を受信したときに、クライアントにエラー応答を返してはいけません。このルールの目的は、クライアントが受信した何かに応答して自動的に何かを送るというループを避けることです。
このコマンドは、ユーザだけでなく、サービスでも使用できます。
これは通常、サービスやオートマトン(AI や他の対話型プログラムが行動を制御するクライアント)で使用されます。
返信の詳細および例については、PRIVMSG を参照してください。
3.4 サーバへのクエリとコマンド
サーバクエリコマンド群は、ネットワークに接続されているあらゆるサーバの情報を返すように設計されています。
これらのクエリでは、パラメータが <target>
と表示されている場合、通常ワイルドカードマスクが有効です。しかし、各パラメータに対して、1つのクエリと返信のセットだけが生成されます。ほとんどの場合、ニックネームが与えられると、それはユーザが接続しているサーバを意味します。
これらのメッセージは一般的にサービスにとってほとんど価値がないため、サービスでの利用を禁止することをお勧めします。
3.4.1 Motd メッセージ
Command: MOTD
Parameters: [ <target> ]
MOTD コマンドは、指定されたサーバ(<target>
が省略された場合は現在のサーバ)の "今日のメッセージ" を取得するために使用されます。
<target>
パラメータには、ワイルドカードを使用できます。
数値返信:
RPL_MOTDSTART RPL_MOTD
RPL_ENDOFMOTD ERR_NOMOTD
3.4.2 Lusers メッセージ
Command: LUSERS
Parameters: [ <mask> [ <target> ] ]
LUSERS コマンドは、IRC ネットワークのサイズに関する統計を取るために使用されます。パラメータが与えられない場合、ネット全体についての返答があります。<mask>
が指定された場合、そのマスクに一致するサーバによって形成されたネットワークの一部分に関する情報のみが返信されます。最後に、<target>
パラメータが指定された場合、リクエストは応答を生成するサーバに転送されます。
<target>
パラメータには、ワイルドカードを使用できます。
数値返信:
RPL_LUSERCLIENT RPL_LUSEROP
RPL_LUSERUNKOWN RPL_LUSERCHANNELS
RPL_LUSERME ERR_NOSUCHSERVER
3.4.3 Version メッセージ
Command: VERSION
Parameters: [ <target> ]
VERSION コマンドは、サーバプログラムのバージョンを問い合わせるために使用します。オプションのパラメータ <target>
は、クライアントが直接接続していないサーバプログラムのバージョンを問い合わせるために使用されます。
<target>
パラメータには、ワイルドカードを使用できます。
数値返信:
ERR_NOSUCHSERVER RPL_VERSION
例:
VERSION tolsun.oulu.fi
; サーバ tolsun.oulu.fi のバージョンを確認するコマンド。
3.4.4 Stats メッセージ
Command: STATS
Parameters: [ <query> [ <target> ] ]
STATS コマンドは、特定のサーバの統計情報を問い合わせるために使用します。<query>
パラメータを省略した場合は,統計情報の末尾のみを返送します。
クエリは、任意の1文字について指定することができ、宛先サーバでのみチェックされ、それ以外の中間サーバで無視され、変更されずに渡されます。
<target>
パラメータには、ワイルドカードを使用できます。
以下のものを除き、有効なクエリのリストは実装に依存します。以下の標準的なクエリは、サーバ側でサポートされている必要があります。
l - サーバの接続のリストを返します。
各接続の確立時間、その接続上のトラフィックを Kbyte および各方向のメッセージで表示します。
m - サーバがサポートする各コマンドの使用回数を返します。
使用回数が 0 のコマンドは省略できます。
o - 構成された特権ユーザ、オペレータのリストを返します。
u - サーバが稼働している時間を示す文字列を返します。
また、クライアントやサーバのアクセス設定もこの方法で公開することが推奨されます。
数値返信:
ERR_NOSUCHSERVER
RPL_STATSLINKINFO RPL_STATSUPTIME
RPL_STATSCOMMANDS RPL_STATSOLINE
RPL_ENDOFSTATS
例:
STATS m
; 接続中のサーバのコマンド使用状況を確認するためのコマンド
3.4.5 Links メッセージ
Command: LINKS
Parameters: [ [ <remote server> ] <server mask> ]
LINKS を使用すると、ユーザは、クエリに答えるサーバが知っているすべてのサーバ名をリストアップすることができます。返されるサーバのリストはマスクと一致しなければならず、マスクが与えられない場合は完全なリストが返されます。
<server mask>
に加えて <remote server>
が指定された場合、LINKS コマンドはその名前にマッチする最初のサーバに転送され、そのサーバは問い合わせに答えることが要求されます。
数値返信:
ERR_NOSUCHSERVER
RPL_LINKS RPL_ENDOFLINKS
例:
LINKS *.au
; 名前が *.au に一致するサーバをすべてリストアップするコマンド。
LINKS *.edu *.bu.edu
; *.bu.edu に一致するサーバを、*.edu に一致する最初のサーバから見てリストアップするコマンド。
3.4.6 Time メッセージ
Command: TIME
Parameters: [ <target> ]
TIME コマンドは、指定されたサーバからローカルタイムを問い合わせるために使用されます。<target>
パラメータを指定しない場合、コマンドを受信したサーバは問い合わせに応答する必要があります。
<target>
パラメータには、ワイルドカードを使用できます。
数値返信:
ERR_NOSUCHSERVER RPL_TIME
例:
TIME tolsun.oulu.fi
; サーバ "tolson.oulu.fi" の時刻を確認する。
3.4.7 Connect メッセージ
Command: CONNECT
Parameters: <target server> <port> [ <remote server> ]
CONNECT コマンドは、他のサーバとの新しい接続を直ちに試みるようにサーバに要求するために使用することができます。CONNECT は特権的なコマンドであり、IRC オペレータのみが使用できるようにすべきです。 <remote server>
が与えられ、そのマスクが解析サーバの名前と一致しない場合、CONNECT の試行は最初に一致したリモートサーバに送られます。それ以外の場合は、リクエストを処理するサーバによって CONNECT が試行されます。
リモート CONNECT コマンドを受信したサーバは、リクエストのソースとターゲットを記述する WALLOPS メッセージを生成する必要があります。
数値返信:
ERR_NOSUCHSERVER ERR_NOPRIVILEGES
ERR_NEEDMOREPARAMS
例:
CONNECT tolsun.oulu.fi 6667
; ローカルサーバから tolsun.oulu.fi のポート6667への接続を試行するコマンド。
3.4.8 Trace メッセージ
Command: TRACE
Parameters: [ <target> ]
TRACE コマンドは、特定のサーバへの経路とそのピアの情報を見つけるために使用されます。このコマンドを処理した各サーバは、送信者にそのことを報告しなければなりません。パススルー・リンクからの応答は連鎖を形成し、目的地までの経路を示します。この応答を返した後、与えられた <target>
サーバに到達するまで、次のサーバに問い合わせを送信する必要があります。
TRACE コマンドは、特定のサーバへの経路を検索するために使用されます。このメッセージを処理する各サーバは、パススルーリンクであることを示す応答を送信して送信者に伝え、応答の連鎖を形成する必要があります。この応答を返した後、指定されたサーバに到達するまで、次のサーバに TRACE メッセージを送信しなければなりません。<target>
パラメータが省略された場合、TRACE コマンドはローカルサーバがどのサーバに直接接続しているかを示すメッセージを送信者に送信することを推奨します。
<target>
で指定された宛先が実際のサーバの場合、宛先サーバは接続されている全てのサーバ、サービス、オペレータを報告する必要があります。オペレータによってコマンドが発行された場合、サーバは接続されている全てのユーザを報告してもかまいません。<target>
で指定された宛先がニックネームの場合、そのニックネームに対する応答のみが返されます。<target>
パラメータが省略された場合、TRACE コマンドは処理中のサーバをターゲットとして解析されることが推奨されます。
<target>
パラメータには、ワイルドカードを使用できます。
数値返信:
ERR_NOSUCHSERVER
TRACE メッセージが他のサーバに向けられた場合、すべての中間サーバは RPL_TRACELINK 応答を返して、TRACE がそれを通過したことと次の行き先を示さなければなりません。
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 コマンド
Command: ADMIN
Parameters: [ <target> ]
ADMIN コマンドは、指定されたサーバ(<target>
パラメータが省略された場合は現在のサーバ)の管理者情報を検索するために使用されます。各サーバは、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 コマンド
Command: INFO
Parameters: [ <target> ]
INFO コマンドは、サーバのバージョン、コンパイル日、パッチレベル、起動日、その他関連すると思われる雑多な情報など、サーバに関する情報を返すことが要求されます。
<target>
パラメータには、ワイルドカードを使用できます。
数値返信:
ERR_NOSUCHSERVER
RPL_INFO RPL_ENDOFINFO
例:
INFO csd.bu.edu
; csd.bu.edu からの INFO 応答を要求します。
INFO Angel
; Angel が接続しているサーバに情報を要求します。
3.5 サービスへのクエリとコマンド
サービスクエリコマンド群は、ネットワークに接続されているあらゆるサービスの情報を返すように設計されています。
3.5.1 Servlist メッセージ
Command: SERVLIST
Parameters: [ <mask> [ <type> ] ]
SERVLIST コマンドは、現在ネットワークに接続され、コマンドを発行したユーザから見えるサービスの一覧を表示するために使用されます。オプションのパラメータを使用すると、クエリの結果を一致するサービス名とサービスタイプに制限することができます。
数値返信:
RPL_SERVLIST RPL_SERVLISTEND
3.5.2 Squery
Command: SQUERY
Parameters: <servicename> <text>
SQUERY コマンドは、PRIVMSG と同様の使い方をします。唯一の違いは、受信者がサービスでなければならないことです。これは、テキストメッセージをサービスに配信する唯一の方法です。
返信の詳細および例については、PRIVMSG を参照してください。
例:
SQUERY irchelp :HELP privmsg
; irchelp というニックネームのサービスに対するメッセージ。
SQUERY dict@irc.fr :fr2en blaireau
; Message to the service with name dict@irc.fr.
; 名前 dict@irc.fr のサービスに対するメッセージ。
3.6 ユーザベースのクエリ
ユーザクエリは、特定のユーザまたはグループユーザの詳細を検索することを主目的とするコマンド群です。これらのコマンドでワイルドカードを使用する場合、それらが一致すると、あなたが "見えている" ユーザの情報のみが返されます。ユーザの可視性は、ユーザのモードと、あなたが共にいる共通のチャネルセットの組み合わせで決定されます。
サービスはこのクラスのメッセージを使用するべきではありませんが、使用することは可能です。
3.6.1 Who クエリ
Command: WHO
Parameters: [ <mask> [ "o" ] ]
WHO コマンドは、クライアントが指定した <mask>
パラメータに "一致" する情報のリストを返すクエリを生成するために使用されます。<mask>
パラメータがない場合、すべての可視(不可視(ユーザモード +i
)でなく、要求元のクライアントと共通のチャネルを持っていないユーザ)のリストが表示されます。<mask>
に 0
を指定しても同じ結果が得られますが、ワイルドカードを使用すると、すべての可視ユーザにマッチすることになります。
WHO に渡された <mask>
は、チャネル <mask>
が見つからない場合、ユーザのホスト、サーバ、実名、ニックネームと照合されます。
o
を指定した場合は、指定した <mask>
に従ってオペレータのみが返されます。
数値返信:
ERR_NOSUCHSERVER
RPL_WHOREPLY RPL_ENDOFWHO
例:
WHO *.fi
; "*.fi" にマッチするすべてのユーザをリストアップするコマンド。
WHO jto* o
; "jto*" にマッチするユーザがオペレータである場合に、そのユーザの一覧を表示するコマンド。
3.6.2 Whois クエリ
Command: WHOIS
Parameters: [ <target> ] <mask> *( "," <mask> )
このコマンドは、特定のユーザに関する情報を照会するために使用されます。サーバはこのコマンドに対して、マスクにマッチする各ユーザのさまざまなステータスを示すいくつかの数値メッセージを返します(あなたがそれらを見る権利がある場合)。<mask>
にワイルドカードが含まれていない場合、そのニックネームに関する、閲覧が許可されているすべての情報が表示されます。
<target>
パラメータを指定した場合、特定のサーバーに問い合わせを行います。これは、該当するユーザがどれくらいの時間アイドル状態であったかを知りたい場合に有効で、その情報はローカルサーバ(ユーザが直接接続しているサーバ)のみが知っており、その他の情報はグローバルに知られています。
<target>
パラメータには、ワイルドカードを使用できます。
数値返信:
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
; trillian に関するユーザ情報をサーバ eff.org に問い合わせます。
3.6.3 Whowas
Command: WHOWAS
Parameters: <nickname> *( "," <nickname> ) [ <count> [ <target> ] ]
WHOWAS は、もう存在しないニックネームに関する情報を要求します。これはニックネームの変更か、ユーザが IRC を去ったかのどちらかでしょう。この問い合わせに対して、サーバはニックネームの履歴を検索し、字句的に同じニックネームを探します(ここではワイルドカードによるマッチングは 行なわれません)。履歴は後方から検索され、最新のエントリが最初に返されます。複数のエントリがある場合は、<count>
個までの返答が返されます(<count>
パラメータが与えられていない場合は、それらすべてが返されます)。<count>
として正でない数字が渡された場合、完全な検索が行われます。
<target>
パラメータには、ワイルドカードを使用できます。
数値返信:
ERR_NONICKNAMEGIVEN ERR_WASNOSUCHNICK
RPL_WHOWASUSER RPL_WHOISSERVER
RPL_ENDOFWHOWAS
例:
WHOWAS Wiz
; ニックネーム "WiZ" に関するニックネーム履歴の全ての情報を返します。
WHOWAS Mermaid 9
; "Mermaid" のニックネーム履歴のうち、最大で最新の9件を返します。
WHOWAS Trillian 1 *.edu
; "Trillian" の最新の履歴を、"*.edu" にマッチする最初に見つかったサーバから返します。
3.7 その他のメッセージ
このカテゴリのメッセージは、上記のどのカテゴリにも当てはまりませんが、それでもプロトコルの一部であり、要求されるものです。
3.7.1 Kill メッセージ
Command: KILL
Parameters: <nickname> <comment>
KILL コマンドは、クライアントとサーバの接続を、実際に接続しているサーバによって切断させるために使用します。サーバはニックネームの衝突の際に KILL メッセージを生成します。また、オペレータステータスを持つユーザが利用できるかもしれません。
自動再接続のアルゴリズムを持っているクライアントは、切断が短時間であるため、このコマンドは事実上無意味です。しかし、データの流れを断ち切るので、悪用するユーザや事故から大量の "フラッディング" を止めるのに使うことができます。悪用するユーザは通常、すぐに再接続して悪用行為を再開するので、気にすることはありません。このコマンドが悪用されるのを防ぐために、どのユーザも他のユーザがトラブルスポットを "監視" するために生成される KILL メッセージを受け取ることを選択することができます。
ニックネームは常にグローバルにユニークであることが要求されるため、"重複"(同じニックネームで2人のユーザーを登録しようとすること)が検出されると、KILL メッセージが送られ、2人とも消えて1人だけが再び現れることが期待されています。
KILL メッセージの結果クライアントが削除された場合、サーバはそのニックネームを利用できないニックネームのリストに追加して、クライアントがすぐにこの名前を再利用することを避けるようにすべきです。これは通常、無駄な "KILL ループ" を引き起こす悪用行為のパターンです。この手順に関するより詳しい情報は "IRC サーバプロトコル" ドキュメント [IRC-SERVER] を参照してください。
コメントには、KILL の実際の理由を反映させる必要があります。サーバが生成した KILL の場合は、通常、2つの衝突するニックネームの起源に関する詳細が含まれます。ユーザの場合は、それを見た人が満足するような適切な理由を提供するように任されています。KILLer を隠すために偽の KILL が生成されるのを防ぐために、コメントには 'kill-path' が表示され、通過する各サーバによってそのパスが更新され、それぞれのサーバ名が先頭に追加されます。
数値返信:
ERR_NOPRIVILEGES ERR_NEEDMOREPARAMS
ERR_NOSUCHNICK ERR_CANTKILLSERVER
NOTE:
KILL コマンドで他のユーザをキルすることができるのは、オペレータだけであることが推奨されています。このコマンドは長年にわたって多くの論争の的となっており、上記の推奨事項とともに、オペレータであってもリモートサーバ上のユーザをキルすることは許されるべきではないということも広く認識されています。
3.7.2 Ping メッセージ
Command: PING
Parameters: <server1> [ <server2> ]
PING コマンドは、接続の相手側にアクティブなクライアントまたはサーバが存在するかどうかをテストするために使用されます。サーバは、接続から他のアクティビティが検出されない場合、一定の間隔で PING メッセージを送信します。接続が一定時間内に PING メッセージに応答しない場合、その接続は閉じられます。PING メッセージは、接続がアクティブであっても送信されることがあります。
PING メッセージを受信したら、できるだけ早く適切な PONG メッセージを <server1>
(PING メッセージを発信したサーバ)に返信する必要があります。<server2>
が指定されている場合は、PING の送信先を表し、メッセージはそこに転送されます。
数値返信:
ERR_NOORIGIN ERR_NOSUCHSERVER
例:
PING tolsun.oulu.fi
; サーバに PING メッセージを送信するコマンド。
PING WiZ tolsun.oulu.fii
; WiZ からサーバ "tolsun.oulu.fi" への PING メッセージ送信コマンド
PING :irc.funet.fi
; サーバ "irc.funet.fi" から送信された Ping メッセージ。
3.7.3 Pong メッセージ
Command: PONG
Parameters: <server> [ <server2> ]
PONG メッセージは、Ping メッセージに対する応答です。パラメータ <server2>
が指定された場合、このメッセージは指定されたターゲットに転送されなければなりません。<server>
パラメータには,PING メッセージに応答してこのメッセージを生成したエンティティの名前を指定します。
数値返信:
ERR_NOORIGIN ERR_NOSUCHSERVER
例:
PONG csd.bu.edu tolsun.oulu.fi
; csd.bu.edu から tolsun.oulu.fi への PONG メッセージ
3.7.4 Error
Command: ERROR
Parameters: <error message>
ERROR コマンドは、サーバが重大なエラーや致命的なエラーを仲間に報告するときに使用します。また、あるサーバから別のサーバに送信することもできますが、通常の未知のクライアントからは受け入れてはなりません。
サーバ間のリンクで発生したエラーの報告には、ERROR メッセージのみを使用すべきです。ERROR メッセージは、相手側のサーバ(適切なローカルユーザとログに報告される)と自身の適切なローカルユーザーとログに送信されます。サーバーから受信した場合、サーバから他のサーバに渡されることはありません。
ERROR メッセージは、クライアント接続を終了する前にも使用されます。
サーバが受信した ERROR メッセージをそのオペレータに送るとき、メッセージは NOTICE メッセージの中にカプセル化され、クライアントがエラーに責任がないことを示すべきです。
数値返信:
None.
例:
ERROR :Server *.fi already exists
; このエラーを発生させた相手サーバに ERROR メッセージを送ります。
NOTICE WiZ :ERROR from csd.bu.edu -- Server *.fi already exists
; 上記と同じ ERROR メッセージが、他のサーバのユーザ WiZ に送信されます。
4. オプション機能
この章では、OPTIONAL メッセージについて説明します。これらは、ここで説明するプロトコルの実用的なサーバ実装では必要ありません。この機能がない場合、エラー応答メッセージが生成されるか、未知のコマンドエラーが発生しなければなりません。もしメッセージが他のサーバに応答するように運命づけられているなら、それは渡されなければなりません(初歩的なパースが必要です)。このために割り当てられた数値は、以下のメッセージとともにリストされています。
この章から、USERHOST と ISON のメッセージのみサービスが利用可能です。
4.1 Away
Command: AWAY
Parameters: [ <text> ]
AWAY コマンドを使用すると、クライアントは自分宛の PRIVMSG コマンド(自分がいるチャネル宛ではない)に対して、自動返信文字列を設定することができます。サーバは、PRIVMSG コマンドを送信しているクライアントに自動応答を送ります。返信するサーバは、送信側クライアントが接続しているサーバのみです。
AWAY コマンドは、1つのパラメータで 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" に設定するコマンド。
4.2 Rehash メッセージ
Command: REHASH
Parameters: None
REHASH コマンドは管理用コマンドで、オペレータがサーバに設定ファイルの再読み込みと処理を強制するために使用することができます。
数値返信:
RPL_REHASHING ERR_NOPRIVILEGES
例:
REHASH
; オペレータステータスを持つユーザからサーバに設定ファイルの再読込を依頼するメッセージ。
4.3 Die メッセージ
Command: DIE
Parameters: None
オペレータは、DIE コマンドを使用してサーバをシャットダウンすることができます。任意の人がオペレータとしてサーバに接続し、このコマンドを実行することはリスクとみなされる可能性があるため、このメッセージはオプションです。
DIE コマンドは、常に送信側クライアントが接続しているサーバで完全に処理されなければならず、接続している他のサーバに渡してはなりません。
数値返信:
ERR_NOPRIVILEGES
例:
DIE
; パラメータは必要ありません。
4.4 Restart メッセージ
Command: RESTART
Parameters: None
オペレータは RESTART コマンドを使用して、サーバを強制的に再起動させることができます。任意の人がオペレータとしてサーバに接続してこのコマンドを実行し、(少なくとも)サービスの停止を引き起こすことはリスクとみなされる可能性があるため、このメッセージはオプションとします。
RESTART コマンドは、常に送信側クライアントが接続しているサーバで完全に処理されなければならず、接続している他のサーバに渡してはなりません。
数値返信:
ERR_NOPRIVILEGES
例:
RESTART
; パラメータは必要ありません。
4.5 Summon メッセージ
Command: SUMMON
Parameters: <user> [ <target> [ <channel> ] ]
SUMMON コマンドは、IRC サーバを実行しているホストにいるユーザに、IRC に参加してくださいというメッセージを送るために使用することができます。このメッセージは、ターゲットサーバが (a) SUMMON を有効にしていて、(b) ユーザがログインしていて、(c) サーバプロセスがユーザの tty(または同様のもの)に書き込める場合にのみ送信されます。
<server>
パラメータを指定しない場合、クライアントが接続しているサーバから <user>
を呼び出そうとするものとします。
サーバで SUMMON が有効でない場合、ERR_SUMMONDISABLED の数値を返す必要があります。
数値返信:
ERR_NORECIPIENT ERR_FILEERROR
ERR_NOLOGIN ERR_NOSUCHSERVER
ERR_SUMMONDISABLED RPL_SUMMONING
例:
SUMMON jto
; summon user jto on the server's host
; サーバのホストでユーザ jto を召喚します。
SUMMON jto tolsun.oulu.fi
; "tolsun.ulu.fi" という名前のサーバが動作しているホストで、jto というユーザを召喚します。
4.6 Users
Command: USERS
Parameters: [ <target> ]
USERS コマンドは、UNIX コマンドの who(1), rusers(1), finger(1) と同様のフォーマットで、サーバにログインしているユーザの一覧を返します。無効の場合、それを示す正しい数値が返されなければなりません。
このようなコマンドはセキュリティに影響するため、サーバの実装ではデフォルトで無効化されるべきです。有効にするためには、単にオプションを切り替えてサーバを再起動するのではなく、サーバの再コンパイルや同等の変更が必要になるはずです。このコマンドを有効にする手順には、適切な大きさのコメントを含める必要があります。
数値返信:
ERR_NOSUCHSERVER ERR_FILEERROR
RPL_USERSSTART RPL_USERS
RPL_NOUSERS RPL_ENDOFUSERS
ERR_USERSDISABLED
返信不可:
ERR_USERSDISABLED
例:
USERS eff.org
; request a list of users logged in on server eff.org
; サーバ eff.org にログインしているユーザのリストを要求します。
4.7 Operwall メッセージ
Command: WALLOPS
Parameters: <Text to be sent>
WALLOPS コマンドは、現在接続しているユーザのうち、自分に w
ユーザモードを設定しているユーザ全てにメッセージを送信するために使用されます。(3.1.5 項 "ユーザーモード" 参照)。
WALLOPS をユーザコマンドとして実装した後、多くの人にメッセージを送る手段として、しばしば悪用されることがわかりました。このため、WALLOPS の実装では、サーバのみを WALLOPS の発信元として許可・認識することが推奨されます。
数値返信:
ERR_NEEDMOREPARAMS
例:
:csd.bu.edu WALLOPS :Connect '*.uiuc.edu 6667' from Joshua
; csd.bu.edu からの WALLOPS メッセージは、Joshua から受信した CONNECT メッセージに対応することを告知しています。
4.8 Userhost メッセージ
Command: USERHOST
Parameters: <nickname> *( SPACE <nickname> )
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 メッセージ
Command: ISON
Parameters: <nickname> *( SPACE <nickname> )
ISON コマンドは、与えられたニックネームが現在 IRC 上にあるかどうかについての応答を得るための、迅速かつ効率的な手段を提供するために実装されました。ISON は1種類のパラメータしか受け取りません:空白で区切られたニックネームのリストです。リスト中のそれぞれのニックネームが存在する場合、サーバはその応答文字列にそれを追加します。したがって、応答文字列は空(与えられたニックネームが一つもない)、パラメータ文字列の完全なコピー(すべてのニックネームがある)、パラメータで与えられたニックネームのセットの他のサブセットを返すかもしれません。チェックするニックの数に関する唯一の制限は、サーバが512文字に収まるように切り捨てるほど、ニックの合計の長さが大きすぎてはいけないということです。
ISON は、コマンドを送信したクライアントのローカルサーバでのみ処理されるため、他のサーバに渡されてさらに処理されることはありません。
数値返信:
RPL_ISON ERR_NEEDMOREPARAMS
例:
ISON phone trillian WiZ jarlek Avalon Angel Monstah syrk
; サンプル ISON のリクエストは7ニックスです。
5. 返信
以下は、上記のコマンドに応答して生成される数値返信のリストです。各数値は、番号、名前、返信文字列で示されます。
5.1 コマンド返答
001から099の範囲の数値は、クライアントとサーバの接続にのみ使用され、サーバ間を移動することはありません。コマンドに対する応答として生成されるリプライは、200から399の範囲にあります。
001 RPL_WELCOME
"Welcome to the Internet Relay Network
<nick>!<user>@<host>"
002 RPL_YOURHOST
"Your host is <servername>, running version <ver>"
003 RPL_CREATED
"This server was created <date>"
004 RPL_MYINFO
"<servername> <version> <available user modes>
<available channel modes>"
- サーバは、登録に成功したユーザに対して、返信001~004を送信します。
005 RPL_BOUNCE
"Try server <server name>, port <port number>"
- 代替サーバを提案するために、サーバからユーザに送信されます。これは、サーバがすでに満杯で接続を拒否された場合によく使われます。
302 RPL_USERHOST
":*1<reply> *( " " <reply> )"
-
USERHOST がクエリリストの返信を一覧表示するために使用する返信フォーマット。返信文字列は以下のように構成されます。
reply = nickname [ "*" ] "=" ( "+" / "-" ) hostname
*
は、クライアントがオペレータとして登録されているかどうかを示します。-
,+
は,それぞれクライアントが AWAY メッセージを設定しているか否かを示します。
303 RPL_ISON
":*1<nick> *( " " <nick> )"
- ISON がクエリリストに対する返信を一覧表示するために使用する返信フォーマット。
301 RPL_AWAY
"<nick> :<away message>"
305 RPL_UNAWAY
":You are no longer marked as being away"
306 RPL_NOWAWAY
":You have been marked as being away"
- これらの応答は、AWAY コマンドと一緒に使用されます(許可されている場合)。RPL_AWAY は、離席中のクライアントに PRIVMSG を送信するすべてのクライアントに送信されます。RPL_AWAY は、クライアントが接続されているサーバによってのみ送信されます。応答 RPL_UNAWAY と RPL_NOWAWAY は、クライアントが AWAY メッセージを削除して設定するときに送信されます。
311 RPL_WHOISUSER
"<nick> <user> <host> * :<real name>"
312 RPL_WHOISSERVER
"<nick> <server> :<server info>"
313 RPL_WHOISOPERATOR
"<nick> :is an IRC operator"
317 RPL_WHOISIDLE
"<nick> <integer> :seconds idle"
318 RPL_ENDOFWHOIS
"<nick> :End of WHOIS list"
319 RPL_WHOISCHANNELS
"<nick> :*( ( "@" / "+" ) <channel> " " )"
- 返信 311 - 313, 317 - 319 は、すべて WHOIS メッセージに応答して生成される返信です。十分な数のパラメータが存在する場合、応答サーバは上記の数値から応答を作成するか(クエリニックが見つかった場合)、エラー応答を返す必要があります。RPL_WHOISUSER の
*
はワイルドカードとしてではなく、リテラル文字として存在します。各返事セットについて、RPL_WHOISCHANNELS だけが複数回現れるかもしれません(チャネル名の長いリストの場合)。チャネル名の横にある@
と+
の文字は、クライアントがチャネルオペレータであるか、モデレートされたチャネルで発言する許可を得ているかどうかを示します。RPL_ENDOFWHOIS 応答は、WHOIS メッセージの処理の終了をマークするために使用されます。
314 RPL_WHOWASUSER
"<nick> <user> <host> * :<real name>"
369 RPL_ENDOFWHOWAS
"<nick> :End of WHOWAS"
- WHOWAS メッセージに返信するとき、サーバは提示されたリストの各ニックネームに対して RPL_WHOWASUSER、RPL_WHOISSERVER または ERR_WASNOSUCHNICK の返信を使用しなければなりません。すべての応答バッチの終わりには、たとえ1つの応答しかなく、それがエラーであったとしても、RPL_ENDOFWHOWAS がなければなりません。
321 RPL_LISTSTART
Obsolete. Not used.
322 RPL_LIST
"<channel> <# visible> :<topic>"
323 RPL_LISTEND
":End of LIST"
- 返信 RPL_LIST、RPL_LISTENDは、LIST コマンドに対するサーバの応答のデータと終了を伴う実際の返信をマークします。返送可能なチャネルがない場合は、終了応答のみを送信する必要があります。
325 RPL_UNIQOPIS
"<channel> <nickname>"
324 RPL_CHANNELMODEIS
"<channel> <mode> <mode params>"
331 RPL_NOTOPIC
"<channel> :No topic is set"
332 RPL_TOPIC
"<channel> :<topic>"
- チャネルのトピックを決定する TOPIC メッセージを送信する場合、2つの返信のうち 1つを送信します。トピックが設定されていれば、RPL_TOPIC が返送され、そうでなければ RPL_NOTOPIC が返送されます。
341 RPL_INVITING
"<channel> <nick>"
- 試行された INVITE メッセージが成功し、エンドクライアントに渡されることを示すためにサーバから返されます。
342 RPL_SUMMONING
"<user> :Summoning user to IRC"
- SUMMON メッセージに応答したサーバが、そのユーザを呼び出していることを示すために返されます。
346 RPL_INVITELIST
"<channel> <invitemask>"
347 RPL_ENDOFINVITELIST
"<channel> :End of channel invite list"
- 与えられたチャネルの "招待マスク" をリストするとき、サーバは RPL_INVITELIST と RPL_ENDOFINVITELIST メッセージを使用してリストを送り返すことが要求されます。別々の RPL_INVITELIST が各アクティブマスクに対して送信されます。マスクがリストされた後、または1つも存在しない場合、RPL_ENDOFINVITELIST を送信する必要があります。
348 RPL_EXCEPTLIST
"<channel> <exceptionmask>"
349 RPL_ENDOFEXCEPTLIST
"<channel> :End of channel exception list"
- 与えられたチャネルの "例外マスク" をリストするとき、サーバは RPL_EXCEPTLIST および RPL_ENDOFEXCEPTLIST メッセージを使用してリストを送り返すことが要求されます。アクティブなマスクごとに個別の RPL_EXCEPTLIST が送信されます。マスクがリストアップされた後、または1つも存在しない場合は、RPL_ENDOFEXCEPTLIST を送信する必要があります。
351 RPL_VERSION
"<version>.<debuglevel> <server> :<comments>"
-
サーバがそのバージョンの詳細を示す返信。
<version>
はパッチレベルのリビジョンを含む使用中のソフトウェアのバージョンで、<debuglevel>
はサーバが "デバッグモード" で動作しているかどうかを示すために使用されます。"comments" 欄には、バージョンに関するコメントや、さらなるバージョンに関する詳細情報を入力することができます。
352 RPL_WHOREPLY
"<channel> <user> <host> <server> <nick>
( "H" / "G" > ["*"] [ ( "@" / "+" ) ]
:<hopcount> <real name>"
315 RPL_ENDOFWHO
"<name> :End of WHO list"
- RPL_WHOREPLY と RPL_ENDOFWHO のペアは、WHO メッセージに答えるために使用されます。RPL_WHOREPLY は、WHO クエリに適切なマッチがある場合にのみ送信されます。WHO メッセージで供給されるパラメータのリストがある場合、
<name>
を項目とする各リスト項目を処理した後に RPL_ENDOFWHO を送信する必要があります。
353 RPL_NAMREPLY
"( "=" / "*" / "@" ) <channel>
:[ "@" / "+" ] <nick> *( " " [ "@" / "+" ] <nick> )
- "@" is used for secret channels, "*" for private
channels, and "=" for others (public channels).
366 RPL_ENDOFNAMES
"<channel> :End of NAMES list"
- NAMES メッセージに返信するために、RPL_NAMREPLY と RPL_ENDOFNAMES からなる返信ペアがサーバからクライアントに返送されます。クエリのように見つかったチャネルがない場合、RPL_ENDOFNAMES だけが返されます。この例外は、NAMES メッセージがパラメータなしで送信され、すべての可視チャネルとコンテンツが一連の RPL_NAMEREPLY メッセージで送り返され、RPL_ENDOFNAMES で終了をマークする場合です。
364 RPL_LINKS
"<mask> <server> :<hopcount> <server info>"
365 RPL_ENDOFLINKS
"<mask> :End of LINKS list"
- LINKS メッセージに返信する際、サーバは RPL_LINKS 数値を使用して返信を送り、RPL_ENDOFLINKS 返信を使用してリストの終わりをマークしなければなりません。
367 RPL_BANLIST
"<channel> <banmask>"
368 RPL_ENDOFBANLIST
"<channel> :End of channel ban list"
- 特定のチャネルのアクティブな "禁止" をリストアップする場合、サーバは RPL_BANLIST と RPL_ENDOFBANLIST メッセージを使用してリストを送り返すことが要求されます。アクティブな禁止マスクごとに別々の RPL_BANLIST が送信されます。禁止マスクがリストアップされた後、または1つも存在しない場合は、RPL_ENDOFBANLIST を送信する必要があります。
371 RPL_INFO
":<string>"
374 RPL_ENDOFINFO
":End of INFO list"
- INFO メッセージに応答するサーバは、そのすべての "info" を一連の RPL_INFO メッセージで送信し、返信の終わりを示すために RPL_ENDOFINFO 返信をすることが要求されます。
375 RPL_MOTDSTART
":- <server> Message of the day - "
372 RPL_MOTD
":- <text>"
376 RPL_ENDOFMOTD
":End of MOTD command"
- MOTD メッセージに応答し、MOTD ファイルが見つかった場合、RPL_MOTD 形式の返信で、1行80文字以内で1行ずつ表示されます。これらは、RPL_MOTD の前に RPL_MOTDSTART、後に RPL_ENDOFMOTD で囲む必要があります。
381 RPL_YOUREOPER
":You are now an IRC operator"
- RPL_YOUREOPER は、OPER メッセージを正常に発行し、オペレータ・ステータスを得たばかりのクライアントに返送されます。
382 RPL_REHASHING
"<config file> :Rehashing"
- REHASH オプションが使用され、オペレータが REHASH メッセージを送信する場合、RPL_REHASHING がオペレータに返送されます。
383 RPL_YOURESERVICE
"You are service <servicename>"
- 登録に成功したときにサーバからサービスに送信されます。
391 RPL_TIME
"<server> :<string showing server's local time>"
- TIME メッセージに返信する場合、サーバは上記の RPL_TIME 形式を使用して返信を送信する必要があります。時刻を示す文字列は、そこに正しい曜日と時刻を含むだけでよいです。時刻を示す文字列には、それ以上の要件はありません。
392 RPL_USERSSTART
":UserID Terminal Host"
393 RPL_USERS
":<username> <ttyline> <hostname>"
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 <version & debug level> <destination>
<next server> V<protocol version>
<link uptime in seconds> <backstream sendq>
<upstream sendq>"
201 RPL_TRACECONNECTING
"Try. <class> <server>"
202 RPL_TRACEHANDSHAKE
"H.S. <class> <server>"
203 RPL_TRACEUNKNOWN
"???? <class> [<client IP address in dot form>]"
204 RPL_TRACEOPERATOR
"Oper <class> <nick>"
205 RPL_TRACEUSER
"User <class> <nick>"
206 RPL_TRACESERVER
"Serv <class> <int>S <int>C <server>
<nick!user|*!*>@<host|server> V<protocol version>"
207 RPL_TRACESERVICE
"Service <class> <name> <type> <active type>"
208 RPL_TRACENEWTYPE
"<newtype> 0 <client name>"
209 RPL_TRACECLASS
"Class <class> <count>"
210 RPL_TRACERECONNECT
Unused.
261 RPL_TRACELOG
"File <logfile> <debug level>"
262 RPL_TRACEEND
"<server name> <version & debug level> :End of TRACE"
RPL_TRACE*
はすべて TRACE メッセージに応答してサーバから返されます。いくつ返されるかは、TRACE メッセージとそれがオペレータによって送信されたかどうかに依存します。どれが最初に起こるか、あらかじめ定義された順序はありません。リプライ RPL_TRACEUNKNOWN、RPL_TRACECONNECTING、RPL_TRACEHANDSHAKE はすべて、完全に確立されていない接続、不明、まだ接続しようとしている、または "サーバハンドシェイク" の完了プロセスのいずれかに使用されています。RPL_TRACELINK は、TRACE メッセージを処理し、それを別のサーバに渡す必要があるすべてのサーバによって送信されます。IRC ネットワーク を横断する TRACE コマンドに応答して送信される RPL_TRACELINK のリストは、その経路に沿ったサーバ自身の実際の接続性を反映する必要があります。RPL_TRACENEWTYPE は、他のカテゴリに当てはまらないが、とにかく表示される接続に使用されます。RPL_TRACEEND は、リストの終わりを示すために送信されます。
211 RPL_STATSLINKINFO
"<linkname> <sendq> <sent messages>
<sent Kbytes> <received messages>
<received Kbytes> <time open>"
- 接続に関する統計情報を報告します。
<linkname>
は特定の接続を識別し、<sendq>
はキューに入れられ送信待ちのデータ量、<sent messages>
は送信したメッセージ数、<sent Kbytes>
は送信データ量(Kbytes 単位)を表わします。<received messages>
と<received Kbytes>
は、それぞれ受信データの<sent messages>
と<sent Kbytes>
に相当します。<time open>
は、接続が開かれてから何日経ったかを秒単位で示します。
212 RPL_STATSCOMMANDS
"<command> <count> <byte count> <remote count>"
- コマンドの使用に関する統計情報を報告します。
219 RPL_ENDOFSTATS
"<stats letter> :End of STATS report"
242 RPL_STATSUPTIME
":Server Up %d days %d:%02d:%02d"
- サーバーの稼働時間を報告します。
243 RPL_STATSOLINE
"O <hostmask> * <name>"
- ユーザが IRC オペレータになることを許可するホストを報告します。
221 RPL_UMODEIS
"<user mode string>"
- クライアント自身のモードに関するクエリに答えるために、RPL_UMODEIS が返送されます。
234 RPL_SERVLIST
"<name> <server> <mask> <type> <hopcount> <info>"
235 RPL_SERVLISTEND
"<mask> <type> :End of service listing"
- SERVLIST メッセージに応答してサービスをリストアップするとき、サーバは RPL_SERVLIST と RPL_SERVLISTEND メッセージを使用してリストを送り返すことが要求されます。各サービスに対して別々の RPL_SERVLIST が送信されます。サービスがリストアップされた後、または何も存在しない場合は、RPL_SERVLISTEND を送信する必要があります。
251 RPL_LUSERCLIENT
":There are <integer> users and <integer>
services on <integer> servers"
252 RPL_LUSEROP
"<integer> :operator(s) online"
253 RPL_LUSERUNKNOWN
"<integer> :unknown connection(s)"
254 RPL_LUSERCHANNELS
"<integer> :channels formed"
255 RPL_LUSERME
":I have <integer> clients and <integer>
servers"
- LUSERS メッセージの処理では、サーバは RPL_LUSERCLIENT、RPL_LUSEROP、RPL_USERUNKNOWN、RPL_LUSERCHANNELS および RPL_LUSERME から一式の応答を送信します。返信するとき、サーバは RPL_LUSERCLIENT と RPL_LUSERME を送り返さなければなりません。他の返信は、それらにゼロでないカウントが見つかった場合にのみ送り返されます。
256 RPL_ADMINME
"<server> :Administrative info"
257 RPL_ADMINLOC1
":<admin info>"
258 RPL_ADMINLOC2
":<admin info>"
259 RPL_ADMINEMAIL
":<admin info>"
- ADMIN メッセージに返信する場合、サーバは RPL_ADMINME から RPL_ADMINEMAIL までの返信を使用し、それぞれにテキストメッセージを提供することが期待されています。RPL_ADMINLOC1 には、サーバがある都市、州、国の説明が期待され、次に機関の詳細 RPL_ADMINLOC2、最後にサーバの管理連絡先 RPL_ADMINEMAIL にはメールアドレスが必要です。
263 RPL_TRYAGAIN
"<command> :Please wait a while and try again."
- サーバがコマンドを処理せずにドロップした場合、応答 RPL_TRYAGAIN を使用して発信元クライアントに通知する必要があります。
5.2 エラー返信
400 から 599 の範囲にエラー返信が見られます。
401 ERR_NOSUCHNICK
"<nickname> :No such nick/channel"
- コマンドに与えられたニックネームパラメータが現在未使用であることを示すために使用されます。
402 ERR_NOSUCHSERVER
"<server name> :No such server"
- 指定されたサーバ名が現在存在しないことを示すために使用されます。
403 ERR_NOSUCHCHANNEL
"<channel name> :No such channel"
- 与えられたチャネル名が無効であることを示すために使用されます。
404 ERR_CANNOTSENDTOCHAN
"<channel name> :Cannot send to channel"
- (a)
mode +n
が設定されているチャネルにいない、または (b)mode +m
が設定されているチャネルの chanop(またはmode +v
)でない、またはユーザが禁止されていてそのチャネルに PRIVMSG メッセージを送信しようとしているユーザに対して送信されます。
405 ERR_TOOMANYCHANNELS
"<channel name> :You have joined too many channels"
- ユーザが許可された最大数のチャネルに参加し、さらに別のチャネルに参加しようとしたときに送信されます。
406 ERR_WASNOSUCHNICK
"<nickname> :There was no such nickname"
- WHOWAS により、そのニックネームの履歴情報がないことを示すために返されます。
407 ERR_TOOMANYTARGETS
"<target> :<error code> recipients. <abort message>"
-
PRIVMSG/NOTICE を user@host の宛先フォーマットで、user@host が複数存在する場合に送信しようとしたクライアントに返されます。
-
PRIVMSG/NOTICE をあまりにも多くの受信者に送信しようとしたクライアントに返されます。
-
安全なチャネルに JOIN しようとするクライアントが、そのようなチャネルが複数存在する場合に返されます。
408 ERR_NOSUCHSERVICE
"<service name> :No such service"
- 存在しないサービスに対して SQUERY を送信しようとしたクライアントに返されます。
409 ERR_NOORIGIN
":No origin specified"
- PING または PONG メッセージの発信者パラメータがありません。
411 ERR_NORECIPIENT
":No recipient given (<command>)"
412 ERR_NOTEXTTOSEND
":No text to send"
413 ERR_NOTOPLEVEL
"<mask> :No toplevel domain specified"
414 ERR_WILDTOPLEVEL
"<mask> :Wildcard in toplevel domain"
415 ERR_BADMASK
"<mask> :Bad Server/host mask"
- 412 - 415は、何らかの理由でメッセージが届かなかったことを示すために PRIVMSG が返すものです。ERR_NOTOPLEVEL と ERR_WILDTOPLEVEL は
PRIVMSG $<server>
またはPRIVMSG #<host>
を不正に使用しようとしたときに返されるエラーです。
421 ERR_UNKNOWNCOMMAND
"<command> :Unknown command"
- 送信されたコマンドがサーバによって不明であることを示すために、登録されたクライアントに返されます。
422 ERR_NOMOTD
":MOTD File is missing"
- サーバーの MOTD ファイルを開くことができませんでした。
423 ERR_NOADMININFO
"<server> :No administrative info available"
- ADMIN メッセージの応答として、適切な情報の検索に失敗した場合にサーバから返されます。
424 ERR_FILEERROR
":File error doing <file op> on <file>"
- メッセージの処理中にファイル操作の失敗を報告するために使用される一般的なエラーメッセージです。
431 ERR_NONICKNAMEGIVEN
":No nickname given"
- コマンドに期待したニックネームパラメータが見つからなかった場合に返されます。
432 ERR_ERRONEUSNICKNAME
"<nick> :Erroneous nickname"
- 定義された文字セットに該当しない文字を含む NICK メッセージを受信した後に返されます。有効なニックネームの詳細については、2.3.1 項 を参照してください。
433 ERR_NICKNAMEINUSE
"<nick> :Nickname is already in use"
- NICK メッセージが処理された結果、現在存在するニックネームを変更しようとしたときに返されます。
436 ERR_NICKCOLLISION
"<nick> :Nickname collision KILL from <user>@<host>"
- ニックネームの衝突(他のサーバによってすでに存在する NICK の登録)を検出したときにサーバからクライアントに返されます。
437 ERR_UNAVAILRESOURCE
"<nick/channel> :Nick/channel is temporarily unavailable"
-
チャネル遅延メカニズムによって現在ブロックされているチャネルに参加しようとするユーザに対してサーバから返されます。
-
ニックネーム遅延メカニズムによって希望するニックネームがブロックされた場合に、ニックネームを変更しようとするユーザにサーバから返されます。
441 ERR_USERNOTINCHANNEL
"<nick> <channel> :They aren't on that channel"
- コマンドのターゲットユーザが指定されたチャネルにいないことを示すために、サーバから返されます。
442 ERR_NOTONCHANNEL
"<channel> :You're not on that channel"
- クライアントがメンバでないチャネルに影響を与えるコマンドを実行しようとしたときに、サーバから返されます。
443 ERR_USERONCHANNEL
"<user> <channel> :is already on channel"
- クライアントが、既に参加しているチャネルにユーザを招待しようとしたときに返されます。
444 ERR_NOLOGIN
"<user> :User not logged in"
- あるユーザに対する SUMMON コマンドがログインしていないために実行できなかった場合に、SUMMON から返されます。
445 ERR_SUMMONDISABLED
":SUMMON has been disabled"
- SUMMON コマンドの応答として返されます。これを実装していないサーバは必ず返さなければなりません。
446 ERR_USERSDISABLED
":USERS has been disabled"
- USERS コマンドの応答として返されます。これを実装していないサーバは必ず返さなければなりません。
451 ERR_NOTREGISTERED
":You have not registered"
- サーバが返す値で、サーバが詳細な解析を許可する前にクライアントを登録する必要があることを示します。
461 ERR_NEEDMOREPARAMS
"<command> :Not enough parameters"
- サーバが多数のコマンドで返すもので、クライアントに十分なパラメータが供給されていないことを示します。
462 ERR_ALREADYREGISTRED
":Unauthorized command (already registered)"
- 2つ目の USER メッセージからパスワードやユーザ情報などの登録情報の一部を変更しようとするリンクに対して、サーバから返されるメッセージです。
463 ERR_NOPERMFORHOST
":Your host isn't among the privileged"
- 接続しようとしたホストからの接続を許可するように設定されていないサーバに登録しようとしたクライアントに返されます。
464 ERR_PASSWDMISMATCH
":Password incorrect"
- パスワードが要求された接続の登録に失敗したことを示すために返されるもので、パスワードが与えられなかったか、不正確であったためです。
465 ERR_YOUREBANNEDCREEP
":You are banned from this server"
- 接続を明示的に拒否するように設定されたサーバに接続し、自分自身を登録しようとした後に返されます。
466 ERR_YOUWILLBEBANNED
- サーバからユーザに送信され、間もなくサーバへのアクセスが拒否されることを知らせます。
467 ERR_KEYSET
"<channel> :Channel key already set"
471 ERR_CHANNELISFULL
"<channel> :Cannot join channel (+l)"
472 ERR_UNKNOWNMODE
"<char> :is unknown mode char to me for <channel>"
473 ERR_INVITEONLYCHAN
"<channel> :Cannot join channel (+i)"
474 ERR_BANNEDFROMCHAN
"<channel> :Cannot join channel (+b)"
475 ERR_BADCHANNELKEY
"<channel> :Cannot join channel (+k)"
476 ERR_BADCHANMASK
"<channel> :Bad Channel Mask"
477 ERR_NOCHANMODES
"<channel> :Channel doesn't support modes"
478 ERR_BANLISTFULL
"<channel> <char> :Channel list is full"
481 ERR_NOPRIVILEGES
":Permission Denied- You're not an IRC operator"
- 操作にオペレータ権限が必要なコマンドは、試行に失敗したことを示すためにこのエラーを返さなければなりません。
482 ERR_CHANOPRIVSNEEDED
"<channel> :You're not channel operator"
- MODE メッセージのような "chanop" 権限を必要とするコマンドは、試行するクライアントが指定されたチャネルの chanop でない場合、このエラーを返さなければなりません。
483 ERR_CANTKILLSERVER
":You can't kill a server!"
- サーバ上で KILL コマンドを使用しようとすると、拒否され、このエラーが直接クライアントに返されます。
484 ERR_RESTRICTED
":Your connection is restricted!"
- 接続時にサーバからユーザに送信され、接続の制限を示します(ユーザモード
+r
)。
485 ERR_UNIQOPPRIVSNEEDED
":You're not the original channel operator"
- "チャネル作成者" 権限を必要とする MODE は、試行するクライアントが指定されたチャネルのチャノップでない場合、このエラーを返さなければなりません。
491 ERR_NOOPERHOST
":No O-lines for your host"
- クライアントが OPER メッセージを送信し、サーバがクライアントのホストからの接続をオペレータとして許可するように設定されていない場合、このエラーを返さなければなりません。
501 ERR_UMODEUNKNOWNFLAG
":Unknown MODE flag"
- ニックネームパラメータを持つ MODE メッセージが送信され、送信されたモードフラグが認識されなかったことを示すためにサーバによって返されます。
502 ERR_USERSDONTMATCH
":Cannot change mode for other users"
- 自分以外のユーザのユーザーモードを表示または変更しようとしたユーザに送られるエラー。
5.3 予約済み数値
これらの数値は、以下のいずれかに該当するため、上記では説明していません。
-
使われなくなった。
-
将来の計画的な使用のために予約されている。
-
現在使用されているが、現在の IRC サーバの非一般的な "機能" の一部である。
231 RPL_SERVICEINFO 232 RPL_ENDOFSERVICES
233 RPL_SERVICE
300 RPL_NONE 316 RPL_WHOISCHANOP
361 RPL_KILLDONE 362 RPL_CLOSING
363 RPL_CLOSEEND 373 RPL_INFOSTART
384 RPL_MYPORTIS
213 RPL_STATSCLINE 214 RPL_STATSNLINE
215 RPL_STATSILINE 216 RPL_STATSKLINE
217 RPL_STATSQLINE 218 RPL_STATSYLINE
240 RPL_STATSVLINE 241 RPL_STATSLLINE
244 RPL_STATSHLINE 244 RPL_STATSSLINE
246 RPL_STATSPING 247 RPL_STATSBLINE
250 RPL_STATSDLINE
492 ERR_NOSERVICEHOST
6. 現在の実装
IRC ソフトウェア、バージョン 2.10 は、IRC プロトコル(クライアントとサーバ)の唯一の完全な実装です。RFC 1459 [IRC] の発行以来、クライアントプロトコルの変更はわずかであるため、それに続く実装はこのプロトコルに準拠するか、準拠に達するためにわずかな変更を必要とする可能性があります。
7. 現在の問題点
IRC クライアントプロトコル、そしてより一般的な IRC サーバプロトコルには、認識されている多くの問題があります。古いクライアントとの後方互換性を維持するために、このプロトコルは RFC 1459 [IRC] の発行以来ほとんど進化していません。
7.1 ニックネーム
IRC におけるニックネームの考え方は、ユーザがチャネル外で会話する際に非常に便利ですが、ニックネームのスペースは有限であり、そのようなものである以上、複数の人が同じニックネームを使いたいと思うことは珍しいことではありません。もしこのプロトコルを使って二人がニックネームを選んだ場合、どちらかが成功しないか、または両方がサーバの KILL(3.7.1 項 参照)を使うことによって削除されるでしょう。
7.2 ワイルドカードの制限
エスケープ文字 \
(%x5C
)をエスケープする方法がありません。通常は問題ありませんが、ワイルドカードの前にバックスラッシュ文字(\
)を付けたマスクを作成することができなくなります。
7.3 セキュリティへの配慮
このプロトコルに関連するセキュリティの問題は、ほとんどが接続のサーバ側の問題であるため、"IRC サーバプロトコル" [IRC-SERVER] で説明されています。
8. 現在のサポートと可用性
IRC関連の議論を行うためのメーリングリスト:
- General discussion: ircd-users@irc.org
- Protocol development: ircd-dev@irc.org
ソフトウェアの実装:
Newsgroup: alt.irc
9. 謝辞
この文書の一部は、IRC プロトコルを最初に正式に文書化した RFC 1459 [IRC] からコピーされたものです。また、多くのレビューとコメントから恩恵を受けています。特に、以下の方々がこの文書に大きな貢献をされました。
Matthew Green, Michael Neumayer, Volker Paulsen, Kurt Roeckx, Vesa Ruokonen, Magnus Tjernstrom, Stefan Zehl.
10. 参考
KEYWORDS Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
ABNF Crocker, D. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", RFC 2234, November 1997.
HNAME Braden, R., "Requirements for Internet Hosts -- Application and Support", STD 3, RFC 1123, October 1989.
IRC Oikarinen, J. & D. Reed, "Internet Relay Chat Protocol", RFC 1459, May 1993.
IRC-ARCH Kalt, C., "Internet Relay Chat: Architecture", RFC 2810, April 2000.
IRC-CHAN Kalt, C., "Internet Relay Chat: Channel Management", RFC 2811, April 2000.
IRC-SERVER Kalt, C., "Internet Relay Chat: Server Protocol", RFC 2813, April 2000.
11 Author's Address
Christophe Kalt 99 Teaneck Rd, Apt #117 Ridgefield Park, NJ 07660 USA
EMail: kalt@stealth.net
12. Full Copyright Statement
Copyright (C) The Internet Society (2000). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any
kind, provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this
document itself may not be modified in any way, such as by removing
the copyright notice or references to the Internet Society or other
Internet organizations, except as needed for the purpose of
developing Internet standards in which case the procedures for
copyrights defined in the Internet Standards process must be
followed, or as required to translate it into languages other than
English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Acknowledgement
Funding for the RFC Editor function is currently provided by the
Internet Society.