필자가 Phil에 의해 작성된 절차 용 PHP로 작성된 IRC 봇을 사용하고 있습니다. 이제는 학습 목적으로 사용하고 있습니다. 보트가 작동하면서 IRC 서버를 설정하고 설정된 채널을 조인하며 간단한 명령을 처리하고 채널에 다시 응답 할 수 있습니다. 하지만 누군가가 "wakey wakey를 불러서 지금 깨워 야 할 때마다"명령을 작성하려고합니다. 그러면 bot이 사용자 이름 목록과 "! call"뒤에 쓰여진 메시지가있는 채널 안에 메시지를 보냅니다. 이름을 가진 목록을 게시 한 후 개행 문자로. 예를 들어PHP IRC 서버의 명령에서 반환 된 데이터를 읽는 PHP IRC 봇
: 채널에서
현재 사용자는 다음과 같습니다 foo는 바 는 foobar barfoo
사람 A가 말한다!의 내 곰 찾을 수있는 호출 아는 사람 있나요? Bot가 응답합니다. foo, bar, foobar, barfoo Bot가 응답합니다. 내 테디 베어를 어디에서 찾을 수 있는지 아는 사람이 있습니까?
메시지의 시작 부분에 "! 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
'='가 너무 많습니다. 단지'! =='입니다. –
@ LuisH. 고마워, 나는 방금 동등한 후 뱅을 추가했습니다. : P – Mario
고마워요. 서버 응답 (353) 및 (366)이 다음에 내 cli 화면의 정확한 메시지임을 알았습니다. readCall은 false를 반환합니다 .-> : irc.rizon.no 353 bot @ #channel : + bot ~ user1 & user2 @ user3 -> : irc.rizon.no 366 nl-bot # 채널 :/NAMES 목록의 끝. 소켓에서 해당 코드를 검색하려면 strpos()를 사용해야합니까? – Xenioz