-1

POST リクエストを介してメッセージを取得し、そのメッセージを irc チャネルに送信する単純な php IRC ボットが必要でした。この目的のために、私はPHP - IRC Bot Not sent message Helpからボットを適応させました。次に、メッセージ キューを使用して、IRC 関連のヘルプから POST メッセージをボットに送信しました。

ただし、start.html を使用して php スクリプトを実行すると、ボットはチャネルに参加しません。irc.php ->

<?php
  $ircServer = "irc.freenode.net";
  $ircPort = "6667";
  $ircChannel = "##my-channel";

set_time_limit(0);

$ircSocket = fsockopen($ircServer, $ircPort, $eN, $eS);
$msg = $_POST['msg'];

if ($ircSocket)
{

fwrite($ircSocket, "USER EDI Normandy-SR2 Alliance Dr-Eva\n");
fwrite($ircSocket, "NICK Hit-Hi-Fit-Hai\n");
fwrite($ircSocket, "JOIN " . $ircChannel . "\n");
fwrite($ircSocket, "PRIVMSG $ircChannel :$msg\n");

 $queueKey = 123321;
 $queue = false;

 // Join the IPC queue
 $queue = msg_get_queue($queueKey);
 if(!$queue) echo "ERROR: Could not join IPC queue. Form data will not be received";

while(1)
{
while($data = fgets($ircSocket, 128))
{
echo nl2br($data);
flush();

$ex = explode(' ', $data);

if($ex[0] == "PING") fputs($socket, "PONG ".$ex[1]."\n");

 if (msg_receive($queue, 0, $msgType, 1024, $msgData, true, MSG_IPC_NOWAIT)) {
 //fwrite($ircSocket, "PRIVMSG $ircChannel :$msgData\n");
 echo "callback working";
 }

}

}
}
?>

彼女は私がこのスクリプトをどのように呼んでいるのかを示しています。start.html ->

<html><body>
    <h4>Start Bot</h4>
    <form action="irc.php" method="post">
      Command: <input type="text" name="msg" />
      <input type="submit" />
    </form>
</body></html>

メッセージ キューのコードを削除すると、ボットはチャネルに参加します。

4

1 に答える 1

2

あなたのコメントに基づいて、あなたは拡張子を逃しています。

マシンを制御できる場合は、php-sysvmsg拡張機能をインストールできます。

そうでない場合は、tcpまたはudpを「ipc」または名前付きパイプとして使用する必要が生じる可能性があります。

sysvmsgのパッケージ名:

  • RedHat / CentOS:yum install php-process
  • Debian:すでにphp5-cgiとphp5-cliに含まれています
  • Zend Server / RedHat:yum install php-5.3-sysvmsg-zend-server
  • Zend Server / Debian:apt-get install php-5.3-sysvmsg-zend-server
于 2012-07-13T19:10:32.597 に答える