【问题标题】:PHP IRC Bot - Wait for 001PHP IRC Bot - 等待 001
【发布时间】:2012-03-19 20:22:27
【问题描述】:

好的。我知道问题所在,我会尝试描述它,但我终生无法找到问题的答案。

好的,所以,我的机器人将正常连接到服务器。但是这个特定的服务器你必须等待这个:

:vervet.foonetic.net 001 Eve :Welcome to the Foonetic IRC Network Eve!~Eve@*-*-*-*.*.*.*.net<br />
:vervet.foonetic.net 002 Eve :Your host is vervet.foonetic.net, running version Unreal3.2.8.1<br />
:vervet.foonetic.net 003 Eve :This server was created Thu Feb 24 2011 at 00:34:28 EST<br />

注意第一行。 “001”。 我的机器人需要等待该行出现,然后才能运行 JOIN 命令。它不会 D: 我尝试在 while(1){} 之前创建一个 while(){},我尝试了一个 do{}while() 和一个简单的 if()。

这是我的代码。

<?php
    set_time_limit(0);

    $conf = array('server' => 'irc.foonetic.net', 'port' => '6667', 'channel' => '#lingubender', 'nick' => 'Eve', 'name' => 'EveBot_1.0', 'description' => 'An IRC bot created by PHP scripter Kinz');
    $replies = array('ver' => 'Eve 1.0', 'part' => 'Good-bye!', 'quit' => 'Shutting down. Talk to you all later!', 'regUsername' => 'example@yahoo.com', 'regPassword' => 'Example');   

    $socket = fsockopen($conf['server'], $conf['port']);
    fputs($socket, "USER ".$conf['nick'].' '.$conf['description'].' '.$conf['nick'].' :'.$conf['name']."\n");
    fputs($socket, "NICK ".$conf['nick']."\n");
    fputs($socket, "JOIN ".$conf['channel']."\n");

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

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



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

            $chan = $grip[2];
            $command = str_replace(array(chr(10), chr(13)), '', $grip[3]);
            strtolower($command);

            if ($command == ":eve" || $command == ":eve,") {
                fputs($socket, "PRIVMSG ".$chan." :Name recognition acknowledged.\n");

                $ex = $grip[4];
                strtolower($ex);

                switch($ex) {
                    case "shutdown":
                        fputs($socket, "QUIT ".$replies['quit']."\n");
                        break;
                    case "version":
                        fputs($socket, "PRIVMSG ".$chan[2]." :".$replies['ver'].' : '.$conf['description']." \n");
                        break;
                }
            } else {
                NULL;
            }
        }
    }
?>

【问题讨论】:

  • 您可以使用fgets 进行while 循环,直到您在连接后立即从套接字获取所需的数据。

标签: php join command irc bots


【解决方案1】:

好吧,在这个特定的示例中,测试是否为$grip[1] == "001"

另外,不要循环while (1),因为它永远不会结束。循环为while (!feof($socket)),将在链接失效时终止循环。

【讨论】:

  • @ZavDom:没问题,别忘了接受正确的答案才能结束问题。
猜你喜欢
  • 2012-10-04
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 2011-05-12
  • 2012-06-06
  • 2012-10-15
  • 1970-01-01
相关资源
最近更新 更多