PHP - IRC连接

时间:2010-11-18 00:12:13

标签: php irc

这是我的剧本:

$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 个答案:

答案 0 :(得分:4)

几年前我在Perl写过几个IRC机器人,说实话,我再也记不住了。无论如何,要向所有用户发送私人消息,首先需要获得频道中的所有用户。

无论如何,发送私信的命令是:

PRIVMSG #channel :Sup?

是的,它会回应“Sup?”在#channel。对于用户来说也是如此:

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")
}

...