PHP IRC bot没有响应命令

时间:2012-03-04 08:45:45

标签: php irc

这是我的代码:

<?php

$sock = fsockopen("localhost", 6667);
fwrite($sock, "NICK PHP_thang\r\n");
fwrite($sock, "USER fikeh fikeh fikeh :Fikeh's Thang\r\n");
fwrite($sock, "JOIN #LightSpike\r\n");

while (True) {
        echo fgets($sock);
        if (strpos(fgets($sock), "!about")) {
                fwrite($sock, "PRIVMSG #LightSpike :\x02Fike's PHP Bot:\x02 Fike's test bot.\r\n");
        }
}
?>

基本上,它会查看从套接字接收的行,如果找到“!about”,它会向通道写入一条消息。但事实并非如此。谁能帮我吗?谢谢!

2 个答案:

答案 0 :(得分:1)

您正在使用echo fgets($sock);读取流,以清除流。当执行到达条件下一行时,fgets( $sock )为空。删除回显线或首先将内容放入变量:

while (True) {
    $buffer = fgets( $sock );
    echo $buffer;
    if( strpos( $buffer, "!about" ) !== false ) {
        ...
    }
}

另请注意,如果搜索字符串位于行的开头strpos(),则0会返回0 == false。使用strpos()时,您应始终使用strpos( $needle, $haystack ) === false(或!== false)。

答案 1 :(得分:0)

请注意,fgets将从套接字读取一行,但该行只读取一次。下次再次致电fgets时,将会读取下一行。所以,你应该读一个变量中的行,然后只用变量做东西。您现在设置的方式是,服务器响应的一半将是echo',并且将检查一半!about命令。