2010-11-18 2 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']; 

여기 내 스크립트입니다 함께

$msg = hello; 

채널의 사용자는 비공개 메시지를받지 못합니다.

+0

"$ round"가 문제 일 수 있습니다. – lheurt

+0

어떻게? 정확한 것을 보여주세요. – Ray

답변

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는 아마도 네트워크에서 클라이언트가 어떤 클라이언트인지 알 수 있도록 로그를 기록합니다.

+0

여전히 작동하지 않습니다. 내 임무는 봇에 명령을 쓰는 것입니다. 명령 "Hello Get me"를 입력하면 IRC 봇으로 보내 져서 IRC 채널의 다른 많은 사용자에게 메시지를 보냅니다. (백분율 시스템 사용). – Ray

+0

@Raymond 방 안에있는 사용자 목록을 찾아내는 코드가 없습니다 ([NAMES 메시지]를 보내고 싶을 것입니다 (http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_2_5)), 당신은 들어오는 메시지를 다룰 무언가를 놓치고있다. 생각 해보니, 실제로 while while (1) 루프에서 빠져 나오지 않는다. 메시지를 처리하지 않고 영원히 메시지를 받는다. –

+0

I carnt는 그것을 이해하는 것처럼 보인다, 나는 많은 방법을 시도했다. 어쩌면 내 PHP 기술이 훌륭하지 않을 수도 있습니다. 제발 보여줘. – Ray