[英]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.