PHP - IRC Справка по функциям приватных сообщений - PullRequest
1 голос
/ 19 ноября 2010

По какой-то причине мой бот не отправляет личное сообщение% людей на IRC-канале. Вот мой сценарий:

<?php

$ircServer = "///";
$ircPort = "6667";
$ircChannel = "#bots";

set_time_limit(0);


$msg = $_POST['message'];
$pr = $_POST['percentage'];
$pr /= 100;

$ircSocket = fsockopen($ircServer, $ircPort, $eN, $eS);

if ($ircSocket)
{

    fwrite($ircSocket, "USER Lost rawr.test lol :code\n");
    fwrite($ircSocket, "NICK Rawr" . rand() . "\n");
    fwrite($ircSocket, "JOIN " . $ircChannel . "\n");

    while(1)
    {
        while($data = fgets($ircSocket, 128))
        {
            echo nl2br($data);
            flush();

            // Separate all data
            $exData = explode(' ', $data);

            // Send PONG back to the server
            if($exData[0] == "PING")
            {
                fwrite($ircSocket, "PONG ".$exData[1]."\n");
            }
}
    echo $eS . ": " . $eN;
}
shuffle($users);
$size = count($users);
$target = $size * $pr;
$target = $round($target);

for ($i = 0; $i <= $target; $i++) {
    fwrite($ircSocket, "PRIVMSG " . $users[$i] . " :" . $msg . "\n");
}
}
?>

Вот журнал, который я получаю:

:StatServ!stats@Mazzzzz.com PRIVMSG Rawr30566 :VERSION

Я даже пытался удалить данные Post и заменил эту часть на:

$msg = $_POST['message'];

С

$msg = hello;

Другие люди на канале не получают личное сообщение.

1 Ответ

1 голос
/ 19 ноября 2010

Это весь ваш сценарий? $users ничего не установлено; Вы, вероятно, хотели установить его в массив имен пользователей. $round также не установлено; Вы, вероятно, хотели просто вызвать встроенную функцию round(). Если вы добавите строку отладки в цикл for, вы по крайней мере сможете указать, какие пользователи (если они есть) должны получать сообщения:

for ($i = 0; $i <= $target; $i++) {
    echo "Sending message to ${users[$i]}\n";
    fwrite($ircSocket, "PRIVMSG " . $users[$i] . " :" . $msg . "\n");
}

Материал протокола IRC выглядит правильно. Журнал получения, о котором вы беспокоились, не имеет к этому никакого отношения; StatServ на IRC-сервере отправляет вашему боту запрос CTCP VERSION. Обычно клиенты отвечают своим именем и версией, и StatServ, вероятно, регистрирует их, чтобы операторы могли видеть, какие клиенты распространены в сети

...