2012-03-03 3 views
1

나는 (아주 간단하게) 만드는 IRC 봇에 약간의 도움이 필요합니다.PHP IRC 봇 연결?

<?php 

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
$yonk = socket_connect($sock, "127.0.0.1", 6667); 

$wut = socket_read($sock, 1024); 
socket_write($sock, "NICK FikesPHPThingy\r\n"); 
socket_write($sock, "USER fikeh fikeh fikeh :Fike's PHP thang.\r\n"); 
socket_write($sock, "JOIN #LightSpike\r\n"); 

echo $wut; 

while (True) { 

} 
?> 

그것은 연결하고

:de.blank.net NOTICE Auth :*** Looking up your hostname... 
:de.blank.net NOTICE 00AAAAAZ4 :*** Skipping host resolution (disabled by server administrator) 

을 읽어하지만 그 이후로 아무것도하지 않습니다. 나는 자습서없이 이것을 나 자신만으로 만들고있다. 그러나 나는 그것을 작동시키는 것처럼 보일 수 없다. 어떤 아이디어?

추 신 : 이상한 변수 이름은 유감스럽게 생각합니다.

+0

무엇을 기대 했습니까? 그리고 왜? –

답변

3

당신은 넣어야 할거야 같이, 당신의 무한 루프 내부에 읽기 (차단) :

while (True) { 
$wut = socket_read($sock, 1024, PHP_NORMAL_READ); // $wut will now be a single line sent by the server 
echo $wut; // Do anything with the line 
} 

클라이언트가 소켓 연결을 잃을 때까지 응답 메시지를 기다리고 및 취급 계속 이런 식으로 나 루프를 수동으로 중단합니다. PHP_NORMAL_READ 매개 변수를 추가 했으므로 클라이언트는 한 번에 한 줄만 읽으므로 처리하는 것이 더 실용적입니다.

관련 메모에서 채널에 바로 참여하지 말고 001 응답 코드를 기다려야합니다. 이렇게하면 서버가 신원을 확인하고 명령을받을 준비가되었습니다. 지금하고있는 방식대로 JOIN이 서버에 의해 거부 될 수 있습니다.

+0

고마워, 나는 그것을 시험해 볼 것이다 :) 응답 코드 등에 관한 문서가 있는가? 나는 RFC의 빠른 스카우트를 가져 갔지만 너무 많이 찾지는 않았다. –

+1

@Fike : RFC 1459 (부분적으로 구형)와 RFC 2812에는 필요한 대부분의 정보가 있어야합니다. 거기에 설명되지 않은 프로토콜에 대한 비공식 확장이 있습니다. RFC는 씹기가 약간 힘들 수 있습니다. 특정 주제에 도움이 될만한 다른 자료가 있습니다. 예는 [이 응답 코드 목록]입니다 (http://www.mirc.net/raws/). 모든 것을 완전히 최신 상태로 유지하는 것은 아니지만 웹을 검색하여 더 많은 것을 찾을 수 있습니다. –