PHP - IRC соединение - PullRequest
       2

PHP - IRC соединение

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

Вот мой сценарий:

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

set_time_limit(0);

$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");
            }
        }
    }
} else {
    echo $eS . ": " . $eN;
}

У меня проблема с добавлением функции, которая будет отправлять личное сообщение всем на канале IRC.Я пробовал $ read и другие методы, это не работает, и IRC зависает.

ПРИМЕЧАНИЕ. Это для образовательных / частных целей не причиняет вреда.

1 Ответ

4 голосов
/ 18 ноября 2010

Несколько лет назад я написал несколько IRC-ботов на Perl, и, честно говоря, я не могу их больше помнить. В любом случае, чтобы отправить личное сообщение всем пользователям, сначала нужно получить всех пользователей канала.

В любом случае, команда для отправки личного сообщения:

PRIVMSG #channel :Sup?

Да, это будет эхо "Sup?" на # канале. То же самое относится и к пользователю:

PRIVMSG John :Sup?

Все, что вам нужно сделать, это получить всех пользователей. Для этого:

NAMES #channel

Код зависит от вас. Удачи.

РЕДАКТИРОВАТЬ : Чтобы получить процент пользователей, просто загрузите их в массив, а затем используйте shuffle() shuffle($array);, если вы хотите рандомизировать их позиции. Затем используйте count() $size = count($array); для размера массива, умножьте размер на процент. $target = $size * 0.10; на 10%. Затем используйте round(), чтобы получить округленное число.

Теперь зациклите массив пользователей и установите ограничение $target. Вот оно у тебя.

РЕДАКТИРОВАТЬ : Вот пример кода (остальная часть кода зависит от вас:

...

$msg = $_POST['message'];
$pr = $_POST['percentage'];
$pr /= $100; // if the input is already 0.10 or something, no need to do this.

...

shuffle($users);
$size = count($users);
$target = $size * $pr;
$target = $round($target);

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

...
...