2010-11-18 84 views
1

由于某种原因,我的机器人无法通过私人信息通知IRC频道上的人。这里是我的脚本:PHP - 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"); 
} 
} 
?> 

这里是登录我收到:

:[email protected] PRIVMSG Rawr30566 :VERSION 

我甚至尝试删除后的数据和更换这一部分与此:

$msg = $_POST['message']; 

With

$msg = hello; 

其他频道上的人没有收到私人讯息。

+0

“$一轮”可能是一个问题:) – lheurt 2010-11-18 22:24:24

+0

如何先生?请告诉我确切的。 – Ray 2010-11-18 22:39:09

回答

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可能会记录它,以便OPERS可以看到客户是共同在网络上

+0

它仍然无法正常工作。我的任务是向机器人写入命令,例如我输入命令“Hello Get me”,它应该发送给IRC机器人,以便将消息发送给IRC频道上的许多其他用户。 (使用百分比系统)。 – Ray 2010-11-18 22:20:45

+0

@Raymond你缺少计算出用户的列表在房间里的代码(你可能要发送[NAMES消息](http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_2_5 )),并且你错过了一些处理传入消息的东西 - 想想它,你实际上从来没有摆脱while(1)'循环,你只是坐在它接收消息永远不处理它们 – 2010-11-18 22:25:23

+0

我卡尔顿似乎弄明白了,我尝试了很多方法。也许我的PHP技能不是bril。请给我看看。 – Ray 2010-11-18 22:26:43