PHP - IRC私人消息功能帮助

时间:2010-11-18 22:08:12

标签: php irc

出于某种原因,我的机器人不会在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 个答案:

答案 0 :(得分:1)

这是你的整个剧本吗? $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协议的内容看起来很正确。你担心的接收日志与它没有任何关系; IRC服务器上的StatServ正在向您的机器人发送CTCP VERSION请求。通常客户端会回复他们的名称和版本,而StatServ可能会记录它,因此操作员可以看到网络上常见的客户端