簡體   English   中英

PHP IRC機器人未響應命令

[英]PHP IRC bot not responding to commands

這是我的代碼:

<?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”,它將向通道中寫入一條消息。 但事實並非如此。 誰能幫我嗎? 謝謝!

您正在使用echo fgets($sock);讀取流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 )。

請注意, fgets將從套接字讀取一行,但是該行只能讀取一次 下次您再次調用fgets時,將讀取下一行。 因此,您應該讀取變量中的行,然后僅對變量進行處理。 現在設置的方式,一半的服務器響應將被echo ,一半將被檢查!about命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM