出于某种原因,我的机器人不会在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;
频道上的其他人没有收到私信。
答案 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可能会记录它,因此操作员可以看到网络上常见的客户端