IRC 프로토콜(RFC 1459)
- 메시지 포맷
<message> ::= [':' <prefix> <SPACE> ] <command> <params> <crlf> <prefix> ::= <servername> | <nick> [ '!' <user> ] [ '@' <host> ] <command> ::= <letter> { <letter> } | <number> <number> <number> <SPACE> ::= ' ' { ' ' } <params> ::= <SPACE> [ ':' <trailing> | <middle> <params> ] <middle> ::= <Any *non-empty* sequence of octets not including SPACE or NUL or CR or LF, the first of which may not be ':'> <trailing> ::= <Any, possibly *empty*, sequence of octets not including NUL or CR or LF> <crlf> ::= CR LF <target> ::= <to> [ "," <target> ] <to> ::= <channel> | <user> '@' <servername> | <nick> | <mask> <channel> ::= ('#' | '&') <chstring> <servername> ::= <host> <host> ::= see RFC 952 [DNS:4] for details on allowed hostnames <nick> ::= <letter> { <letter> | <number> | <special> } <mask> ::= ('#' | '$') <chstring> <chstring> ::= <any 8bit code except SPACE, BELL, NUL, CR, LF and comma (',')> <user> ::= <nonwhite> { <nonwhite> } <letter> ::= 'a' ... 'z' | 'A' ... 'Z' <number> ::= '0' ... '9' <special> ::= '-' | '[' | ']' | '\' | '`' | '^' | '{' | '}' <nonwhite> ::= <any 8bit code except SPACE (0x20), NUL (0x0), CR(0xd), and LF (0xa)>
- 접속 과정
- 핑
- PING <msg>
- PONG <msg> 로 보내주면 된다
- PING <msg>
- 로그인
- USER <name> <host> <user> :<Real Name>
- name : 접속하는 사용자의 이름(사용자 정보에서 이메일 형식으로 나옴)
- host, user : 호스트와 유저 이름이지만 실제 영향력은 없는듯..
- Real Name : 사용자 정보에서 나오는 이름
- NICK <nick>
- nick : 실제 대화명(닉네임)
- USER <name> <host> <user> :<Real Name>
- 보통 위의 과정을 거치면 환영 메시지가 나옴
- 핑
- 대화
- PRIVMSG <nick|channel>[,<nick|channel>...] <message>
- 수신자
- channel : 채널명
- message : 대화 내용
- 수신자
- NOTICE 상동
- PRIVMSG와 NOTICE의 차이점 확인할것
- PRIVMSG <nick|channel>[,<nick|channel>...] <message>
- 채널 입장
- JOIN <channel>
- 471 ERR_CHANNELISFULL "<channel> :Cannot join channel (+l)"
- 473 ERR_INVITEONLYCHAN "<channel> :Cannot join channel (+i)"
- 474 ERR_BANNEDFROMCHAN "<channel> :Cannot join channel (+b)"
- 475 ERR_BADCHANNELKEY "<channel> :Cannot join channel (+k)"
- 465 ERR_YOUREBANNEDCREEP ":You are banned from this server"
- 464 ERR_PASSWDMISMATCH ":Password incorrect"
- JOIN <channel>
- 채널 퇴장
- PART <channel>
- 채널 관리(채널 오퍼레이터용)
- MODE <channel> <mode> <nick|params>
- params : 파라메터
- (+|-)mode
- o : 채널의 오퍼레이터 권한을 주거나 뺏는다
- p : 비공개채널
- s : 비밀채널
- i : 초대만 가능한 채널
- m : 제한된 채널
- t : 오퍼레이터만 방제를 바꿀수있게한다
- n : 밖에서 온 클라이언트의 메세지는 채널에 전달되지않는다
- l : 채널에 들어올수있는 사용자의 수를 제한한다
- b : 사용자를 계속 내보낼수있게 금지하는마스크
- v : 제한된 채널에서 말할수있는 권한을 주거나 뺐는다
- k : 채널에 비밀번호를 지정해놓는다
- 324 RPL_CHANNELMODEIS "<channel> <mode> <mode params>"
- 482 ERR_CHANOPRIVSNEEDED "<channel> :You're not channel operator"
- 472 ERR_UNKNOWNMODE "<char> :is unknown mode char to me"
- 467 ERR_KEYSET "<channel> :Channel key already set"
- MODE <channel> <mode> <nick|params>
- 토픽 변경
- TOPIC <params>
- 331 RPL_NOTOPIC "<channel> :No topic is set"
- 332 RPL_TOPIC "<channel> :<topic>"
- TOPIC <params>
- 목록 얻기
- NAMES [<channel>[,<channel>]]
- 채널명과 그 채널의 사용자 목록을 얻음
- 353 RPL_NAMREPLY "<channel> :[[@|+]<nick> [[@|+]<nick> [...]]]"
- 366 RPL_ENDOFNAMES "<channel> :End of /NAMES list"
- 채널명과 그 채널의 사용자 목록을 얻음
- LIST [<channel>[,<channel>]]
- 채널명과 토픽명을 얻음
- 비공개 채널일 경우 토픽명을 얻을수 없음
- 비밀 채널일 경우 목록에 추가되지 않음
- 321 RPL_LISTSTART "Channel :Users Name"
- 322 RPL_LIST "<channel> <# visible> :<topic>"
- 323 RPL_LISTEND ":End of /LIST"
- 채널명과 토픽명을 얻음
- NAMES [<channel>[,<channel>]]
- 접속 종료
- QUIT [message]
- message : 종료시 표시될 메시지
- QUIT [message]