私は、Phil によって最初に作成された手続き型 PHP で記述された IRC ボットを使用しており、現在は学習目的で使用しています。ボットは動作し、IRC サーバーを設定し、設定されたチャネルに参加します。また、単純なコマンドを処理して、チャネルに何かを返すこともできます。しかし、誰かが「!call wakey wakey 今すぐ目を覚ます時間です」と書き込むたびにコマンドを作成しようとしています。ボットは、ユーザー名のリストと「!call」の後に書かれたメッセージを含むメッセージをチャネル内に送信します名前付きのリストを投稿した後の改行。
例えば:
チャンネルの現在のユーザーは次のとおりです。 foo bar foobar barfoo
人物 A : !call 私のテディベアがどこにあるか知っている人はいますか? ボットの応答: foo、bar、foobar、barfoo ボットの応答: 私のテディベアがどこにあるか知っていますか?
つまり、「!call」がメッセージの先頭にある場合にトリガーされます。次に、チャネルからメッセージを取得し、!call とメッセージを分割する関数 get_data_call を呼び出し、関数はメッセージを返すか、false を返すだけです。これまでのところ、変数に格納されたメッセージを取得しました。
今私の問題は何ですか:
ここで、「NAMES」コマンドを IRC サーバーに送信する必要があります。IRC サーバーは、ボットが存在するチャネルに現在存在するユーザー名のリストを返します。しかし、そのリストを取得できないようです。サーバーからメッセージが戻ってきて、そのようなものを使用しようとしましたが、これが正確な方法ではないと確信しています(そうでなければうまくいくでしょう):
while (!feof($sock))
{
$readCall = fread($sock, 4024);
if ($readCall === true)
{
while (strpos($readCall, ':irc.rizon.no') !== false)
{
echo "irc.rizon.no found!";
break;
}
}
else
{
echo "readCall returns false.";
break;
}
}
これは機能せず、常に false を返します。
完全なコードはここにあります: http://pastebin.com/edit.php?i=F2bAdDmS
この素晴らしいサイトの誰かがこれを手伝ってくれることを願っています。本当に感謝しています。
ありがとうございました。//ゼニオス