0

我正在使用最初由 Phil 创建的用程序 PHP 编写的 IRC 机器人,现在我将其用于学习目的。该机器人工作,它设置 IRC 服务器并加入设置的频道,它还可以处理简单的命令并将某些内容响应回频道。但是,每当有人写“!call wakey wakey,现在该醒来了”时,我都会尝试创建一个命令,然后机器人在频道内发送一条消息,其中包含用户名列表和写在“!call”之后的消息发布带有名称的列表后的换行符。

例如:

频道中的当前用户有: foo bar foobar barfoo

人 A 说: !call 有人知道我在哪里可以找到我的泰迪熊吗?机器人回复:foo、bar、foobar、barfoo 机器人回复:有人知道我在哪里可以找到我的泰迪熊吗?

is 的作用是,如果“!call”位于消息的开头,则会触发它。然后它会调用一个函数 get_data_call,该函数将从通道中获取消息并将 !call 和消息拆分,该函数只返回消息或返回 false。到目前为止它有效,我确实将消息存储在一个变量中。

现在我的问题是:

现在我必须向 IRC 服务器发送一个“NAMES”命令,然后它返回一个当前在机器人所在频道中的用户名列表。但我似乎无法捕捉到该列表,我确实看到了从服务器返回一条消息,我尝试使用类似的方法,但我确信这不是正确的方法(否则它会起作用):

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

4

1 回答 1

1

strpos()找到匹配项时将返回一个正整数或 0。!== false您应该尝试在您的条件中使用 a ,因为strpos()如果在第一个字符中找到匹配项,则可以返回 0。

于 2012-10-23T13:47:42.397 回答