PHP IRC бот подключиться? - PullRequest
1 голос
/ 03 марта 2012

Мне нужна небольшая помощь с 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)

Но после этого ничего не происходит. Я создаю это без каких-либо учебных пособий, просто сам. Но я не могу заставить его работать. Есть идеи?

PS: извините за нечетные имена переменных.

1 Ответ

3 голосов
/ 03 марта 2012

Вам нужно поместить (блокирующее) чтение внутри вашего бесконечного цикла, например:

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 может (и, вероятно, будет) отклоняться сервером.

...