Помогите разобраться с irc botом

Discussion in 'PHP' started by AdReNa1!Ne, 12 May 2008.

  1. AdReNa1!Ne

    AdReNa1!Ne Elder - Старейшина

    Joined:
    24 May 2007
    Messages:
    70
    Likes Received:
    105
    Reputations:
    14
    Взял готовый скрипт отсюда.
    PHP:
    <?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($socket128)) {

            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> :ПОНИ ТОЖЕ КОНИ!!!!!!!!! сам себе...
     
    1 person likes this.
  2. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Смотри что у тебя в $ex[2]. Я так понял что там ничего нету, поэтому и появляются на сцене твои пони. Твой бот полученную строку сплитит по пробелу, покажи формат пакета, который он получает... Сначала должна идти команда, потом пробел, потом ник...
     
    1 person likes this.
  3. AdReNa1!Ne

    AdReNa1!Ne Elder - Старейшина

    Joined:
    24 May 2007
    Messages:
    70
    Likes Received:
    105
    Reputations:
    14
    Фрагмент лога:
    :Dj!admin@it.is.my.fucking.IP PRIVMSG megabotinok :!say
    :megabotinok!megabotino@it.is.my.fucking.IP PRIVMSG megabotinok :ПОНИ ТОЖЕ КОНИ!!!!!!!!!

    Пожалуйста, перепишите фрагмент скрипта правильно. Сам не допираю как и что...
     
    #3 AdReNa1!Ne, 12 May 2008
    Last edited: 12 May 2008
  4. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Ну ясен буй:

    Эта команда и говорит, что отправить самому себе...
     
  5. AdReNa1!Ne

    AdReNa1!Ne Elder - Старейшина

    Joined:
    24 May 2007
    Messages:
    70
    Likes Received:
    105
    Reputations:
    14
    Это фрагмент из лога. Я не настолько тупой, чтоб не понять этого) Видимо он не распознает ник, что шлёт ему команду. Часть кода пропущена мб...
     
  6. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Покажи что ты ему отправляешь, а я скажу где он лажает... Просто судя по логу - ему и отправляется команда, мол, скажи сам себе, что от работы пони дохнут...
     
  7. AdReNa1!Ne

    AdReNa1!Ne Elder - Старейшина

    Joined:
    24 May 2007
    Messages:
    70
    Likes Received:
    105
    Reputations:
    14
    fputs($socket, "PRIVMSG ".$ex[2]." :ПОНИ ТОЖЕ КОНИ!!!!!!!!!\n");
    Весь трабл в этом ".$ex[2]."
    Только хз как исправить это.
     
  8. LolFEm

    LolFEm Elder - Старейшина

    Joined:
    8 Sep 2006
    Messages:
    160
    Likes Received:
    52
    Reputations:
    5
    $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


    что именно тебе нужно отправлять?
     
  9. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    AdReNa1!Ne, ты прав как никогда, но дело в том, что $ex[2] принимает значение исходя того, что посылается... Если послать:

    то $ex[2] - примет значение megabotinok.

    а если

    то $ex[2] - примет значение bbb.

    З.Ы. А поменяй строку

    на

     
  10. AdReNa1!Ne

    AdReNa1!Ne Elder - Старейшина

    Joined:
    24 May 2007
    Messages:
    70
    Likes Received:
    105
    Reputations:
    14
    Фрагмент из лога:
    Dj!admin@it.is.my.fucking.IP PRIVMSG megabotinok :!say
    irc.vltele.com 401 megabotinok PRIVMSG :No such nick/channel
     
  11. -Hormold-

    -Hormold- Кто, если не ты?

    Joined:
    29 Sep 2007
    Messages:
    418
    Likes Received:
    290
    Reputations:
    44
    у меня была проблемма!
    убери из ника \n\r
    это через str_replace
     
  12. -Hormold-

    -Hormold- Кто, если не ты?

    Joined:
    29 Sep 2007
    Messages:
    418
    Likes Received:
    290
    Reputations:
    44
    Нужна помошь...
    Как сделать что-бы он не только $ex[4] читал, а если юзер написал 1 2 3 4 6(т.е. что бы он читал 2 3 4 5 6 и т.д.)
    И добавлял это к $qwert =)