Просмотр полной версии : Помогите разобраться с irc botом
AdReNa1!Ne
12.05.2008, 18:57
Взял готовый скрипт отсюда.
<?php
set_time_limit(0);
$socket = fsockopen("irc.***.com", 6667);
fputs($socket,"NICK megabotinok\n");
fputs($socket,"USER megabotinok 8 * :lamobot\n");
fputs($socket,"quote pong 2B8C8B2D\n");
fputs($socket,"JOIN #bash.org\n");
while(1) {
while($data = fgets($socket, 128)) {
echo nl2br($data);
flush();
$ex = explode(' ', $data);
if($ex[0] == "PING"){
fputs($socket, "PONG ".$ex[1]."\n");
}
$command = str_replace(array(chr(10), chr(13)), '', $ex[3]);
if ($command == ":!say") {
fputs($socket, "PRIVMSG ".$ex[2]." :ПОНИ ТОЖЕ КОНИ!!!!!!!!!\n");
}
}
}
?>
Вопрос в следующем:
Так как я новичок в пхп, я не могу понять, почему он отсылает строку PRIVMSG <nick> :ПОНИ ТОЖЕ КОНИ!!!!!!!!! сам себе...
groundhog
12.05.2008, 19:01
Смотри что у тебя в $ex[2]. Я так понял что там ничего нету, поэтому и появляются на сцене твои пони. Твой бот полученную строку сплитит по пробелу, покажи формат пакета, который он получает... Сначала должна идти команда, потом пробел, потом ник...
AdReNa1!Ne
12.05.2008, 19:05
Фрагмент лога:
:Dj!admin@it.is.my.fucking.IP PRIVMSG megabotinok :!say
:megabotinok!megabotino@it.is.my.fucking.IP PRIVMSG megabotinok :ПОНИ ТОЖЕ КОНИ!!!!!!!!!
Пожалуйста, перепишите фрагмент скрипта правильно. Сам не допираю как и что...
groundhog
12.05.2008, 19:08
Ну ясен буй:
PRIVMSG megabotinok :ПОНИ ТОЖЕ КОНИ!!!!!!!!!
Эта команда и говорит, что отправить самому себе...
AdReNa1!Ne
12.05.2008, 19:09
Это фрагмент из лога. Я не настолько тупой, чтоб не понять этого) Видимо он не распознает ник, что шлёт ему команду. Часть кода пропущена мб...
groundhog
12.05.2008, 19:16
Покажи что ты ему отправляешь, а я скажу где он лажает... Просто судя по логу - ему и отправляется команда, мол, скажи сам себе, что от работы пони дохнут...
AdReNa1!Ne
12.05.2008, 19:17
fputs($socket, "PRIVMSG ".$ex[2]." :ПОНИ ТОЖЕ КОНИ!!!!!!!!!\n");
Весь трабл в этом ".$ex[2]."
Только хз как исправить это.
$ex = explode(' ', $data);
разделение строки в массив по пробелу
у тебя строка: j!admin@it.is.my.fucking.IP PRIVMSG megabotinok :!say
массив $ex из 4 элементов
$ex[0] = j!admin@it.is.my.fucking.IP
...
$ex[3] = :!say
что именно тебе нужно отправлять?
groundhog
12.05.2008, 19:46
AdReNa1!Ne, ты прав как никогда, но дело в том, что $ex[2] принимает значение исходя того, что посылается... Если послать:
PRIVMSG megabotinok :ПОНИ ТОЖЕ КОНИ!!!!!!!!!
то $ex[2] - примет значение megabotinok.
а если
PRIVMSG bbbb :ПОНИ ТОЖЕ КОНИ!!!!!!!!!
то $ex[2] - примет значение bbb.
З.Ы. А поменяй строку
fputs($socket, "PRIVMSG ".$ex[2]." :ПОНИ ТОЖЕ КОНИ!!!!!!!!!\n");
на
fputs($socket, "PRIVMSG ".$ex[1]." :ПОНИ ТОЖЕ КОНИ!!!!!!!!!\n");
AdReNa1!Ne
12.05.2008, 20:32
Фрагмент из лога:
Dj!admin@it.is.my.fucking.IP PRIVMSG megabotinok :!say
irc.vltele.com 401 megabotinok PRIVMSG :No such nick/channel
-Hormold-
13.05.2008, 11:01
у меня была проблемма!
убери из ника \n\r
это через str_replace
-Hormold-
13.05.2008, 11:12
Нужна помошь...
Как сделать что-бы он не только $ex[4] читал, а если юзер написал 1 2 3 4 6(т.е. что бы он читал 2 3 4 5 6 и т.д.)
И добавлял это к $qwert =)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot