2012-10-23 81 views
0

我正在使用一個IRC機器人編寫的程序PHP,最初是由Phil創建的,現在我用它來學習目的。機器人工作,它設置IRC服務器並加入設置的通道,它也可以處理簡單的命令並將迴應返回到通道中。 但是我試圖創建一個命令,只要有人寫道「!喚醒wakey現在是喚醒時間」,那麼bot會在頻道內發送一條消息,其中包含用戶名列表以及在「!call」之後寫入的消息在用名稱發佈列表之後換行。PHP IRC機器人讀取從IRC服務器的命令返回的數據

例如:

在通道當前用戶有: FOO 酒吧 foobar的 barfoo

某甲說:電話沒有人知道我在哪裏可以找到我的泰迪熊? 機器人響應:富,酒吧,foobar,barfoo 機器人響應:有誰知道我在哪裏可以找到我的泰迪熊?

什麼是,如果「!call」在消息的開始,這將被觸發。然後它會調用一個函數get_data_call,它將從該通道接收消息並拆分!call和消息,該函數只返回消息或返回false。到目前爲止它的工作原理是,我確實將消息存儲在一個變量中。

現在我的問題是什麼:

現在我必須發送一個「名稱」命令到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

我希望在這個美好的網站有人能幫助我,我將非常感謝。

謝謝。 // Xenios

回答

1

strpos()當找到匹配項時將返回一個正整數或0。您應該嘗試在您的情況下使用!== false,因爲如果在第一個字符中找到匹配項,strpos()可以返回0。

+0

你有一個'='太多了,它只是'!=='。 –

+0

@LouisH。謝謝,我剛剛在平等之後加了一聲。 :P – Mario

+0

謝謝你。我看到我收到了服務器回覆(353)和(366),下一個是我的cli屏幕上的確切消息:readCall返回false .->:irc.rizon.no 353 bot @ #channel:+ bot〜user1&user2 @ user3 - >:irc.rizon.no 366 nl-bot #channel:/ NAMES列表的結尾。我應該使用strpos()在套接字中搜索該代碼嗎? – Xenioz