[Скрипт] icq-бот руками "блондинки", статья + код.

Тема в разделе "Open Source", создана пользователем Mendel, 1 фев 2008.

Статус темы:
Закрыта.
Модераторы: Amazko, Aste
  1. Mendel

    Mendel

    Регистр.:
    27 янв 2008
    Сообщения:
    217
    Симпатии:
    64
    Есть много классов, библиотек для создания icq-ботов. но как правило для их освоения требуется какоето время. А так хочется сделать HelloWorld за пять минут. Для этих целей я написам маленький врапер над одной из больших и толстых библиотек.
    Итак бот своими руками:
    1 - идем на Перейти по ссылке и регистрируем себе аську.
    2 - качаем файл inc.php из вложения в этом сообщении.
    3 - создаем скрипт hello.php (см. листинг ниже)
    4 - заливаем оба файла на хостинг или в папку где они будут лежать и запускаем скрипт hello.php на исполнение. я это делаю командой "php5 hello.php &" но у вас может быть иначе. Напомню что & означает вызов в фоновом режиме. Также вдруг ктото не помнит - выходя из SSH не забудьте закрыть сессию logout-ом, ибо иначе ваша фоновая задача может погибнуть.

    Листинг №1:
    PHP:
    <?
    // ******************************************************
    // объявим UIN и пароль нашего бота.                  ***
    // ******************************************************
    DEFINE('ICQ_UIN','123456789'); // Номер ICQ бота        *
    DEFINE('ICQ_PASS','пароль'); // Пароль от уина ICQ бота *
    // ******************************************************
    require_once('inc.php'); // вызовем библиотеку       ****
    // ******************************************************


    // ******************************************************
    // основная функция - вызывается если пришло сообщение **
    // ******************************************************
    function icq($from,$req)
        {
        
    icq_say($from,'Hello world!');
        }
    ?>
    Описанный бот в ответ на любое сообщение пишет "Hello World!".
    Как это рааботает:
    1 - константами объявляем UIN бота и пароль, вызываем библиотечку.
    2 - в библиотеке прописаны все команды необходимые для логина, удаление всех офлайн-сообщений и тп. также в библиотеке выполняется цикл проверяющий не пришло ли сообщение, и если пришло то вызывает функцию icq($from,$text) где $from - это UIN написавшего нам сообщение, а $text это собственно то что он нам написал.
    Цикл заканчивается в случае если была выполнена функция icq_stop() ну или при принудительном окончании скрипта. (например CTR-C, kill, killall и тп).
    Также есть функция icq_say($to,$text) при вызове которой на UIN $to посылается сообщение $text.

    3 - в нашем скрипте объявляется функция icq($from,$text) которая собственно является "сердцем" скрипта потому что здесь то мы и описываем всю логику. В нашем простейщем случае мы просто отправляем тому кто написал нам сообщение "Hello World!".

    Листинг №2:
    PHP:
    <?
    // ******************************************************
    // объявим UIN и пароль нашего бота.                  ***
    // ******************************************************
    DEFINE('ICQ_UIN','123456789'); // Номер ICQ бота        *
    DEFINE('ICQ_PASS','пароль'); // Пароль от уина ICQ бота *
    DEFINE('ADMIN','400480124'); // UIN админа            ***
    // ******************************************************
    require_once('inc.php'); // вызовем библиотеку       ****
    // ******************************************************


    // ******************************************************
    // основная функция - вызывается если пришло сообщение **
    // ******************************************************
    function icq($from,$req)
        {
        if(
    $from==ADMIN AND $req=='die')
            {
            
    icq_say($from,'Чао!');
            
    icq_stop();
            }
        else
            {
            
    icq_say($from,$req);
            }
        }
    ?>
    Этот скрипт просто "отзеркаливает" то что ему написали. Но если сообщение пришло от админа, и это сообщение "die" то работа скрипта прекращается.

    Ну и в заключение приведу "заготовку" для более реального бота. Я думаю достаточно очевидно что он делает и как.
    Листинг №3:
    PHP:
    <?
    // ******************************************************
    // объявим UIN и пароль нашего бота.                  ***
    // ******************************************************
    DEFINE('ICQ_UIN','123456789'); // Номер ICQ бота        *
    DEFINE('ICQ_PASS','пароль'); // Пароль от уина ICQ бота *
    DEFINE('ADMIN','400480124'); // UIN админа            ***
    // ******************************************************
    require_once('inc.php'); // вызовем библиотеку       ****
    // ******************************************************


    // ******************************************************
    // основная функция - вызывается если пришло сообщение **
    // ******************************************************
    function icq($from,$req)
        {
        switch(
    $req)
            {
            case 
    'help':
                {
                
    icq_say($from,'допустимые команды это one, two, bye и help');
                }
            break;
            case 
    'one':
                {
                
    icq_say($from,'один');
                }
            break;
            case 
    'two':
                {
                
    icq_say($from,'два');
                }
            break;
            case 
    'bye':
                {
                if(
    $from==ADMIN)
                    {
                    
    icq_say($from,'Чао!');
                    
    icq_stop();
                    }
                else
                    {
                    
    icq_say($from,'у вас нет прав меня отключить');
                    }
                }
            break;
            default:
                {
                
    icq_say($from,'извините, но я не знаю такой команты. для помощи напишите help');
                }
            break;
            }
        }
    ?>
     

    Вложения:

    • inc.rar
      Размер файла:
      13,7 КБ
      Просмотров:
      170
    ivanov-ig, jID, webgorodok и 10 другим нравится это.
  2. track

    track Создатель

    Регистр.:
    25 мар 2007
    Сообщения:
    18
    Симпатии:
    0
    а что нужно для бота?
    чтонить еще кроме php нужно? или можно даже на простом серваке запустить?
     
  3. Mendel

    Mendel

    Регистр.:
    27 янв 2008
    Сообщения:
    217
    Симпатии:
    64
    нужен только php ...
    желательно правда всетаки иметь сервер или VDS потому что запускать его на виртуальном хостинге это мучения.
     
  4. MumiSan

    MumiSan Постоялец

    Регистр.:
    14 фев 2008
    Сообщения:
    100
    Симпатии:
    86
    бот работает отлично при выводе обычных команд типа Hello world

    Но когда я пытаюсь зделать вывод рандомного анекдота(из базы MySql) то для меня он работает, а для когото пишет текст, какбы етой команды нету "извините, но я не знаю такой команды...."

    Можете чтото посоветовать?
     
  5. Baxxxter

    Baxxxter Писатель

    Регистр.:
    12 янв 2008
    Сообщения:
    9
    Симпатии:
    0
    а на условие он может отправлять сообщения? тоесть случилось условие, пришло сообщение. В зависимости от даты или системной команды.

    Я знаю ставят на мониторинг сервера.
     
  6. Mendel

    Mendel

    Регистр.:
    27 янв 2008
    Сообщения:
    217
    Симпатии:
    64
    Телепаты в отпуске.
    Код покажите.
    вот рабочий код который выдает случайную цитату но не из базы а из файла.
    PHP:
    <?
    // ******************************************************
    // объявим UIN и пароль нашего бота.                  ***
    // ******************************************************
    DEFINE('ICQ_UIN','392876845'); // Номер ICQ бота        *
    DEFINE('ICQ_PASS','******'); // Пароль от уина ICQ бота *
    DEFINE('BASE','love.txt'); // имя файла с базой фраз    *
    // ******************************************************
    $qqq=file(BASE); // считаем базу                        *
    // ******************************************************
    require_once('inc.php'); // вызовем библиотеку       ****
    // ******************************************************


    // ******************************************************
    // основная функция - вызывается если пришло сообщение **
    // ******************************************************
    function icq($from,$req)
        {
        GLOBAL 
    $qqq;
        
    $quote=$qqq[rand(0,count($qqq)-1)];
        
    icq_say($from,$quote);
        }
    ?>
    увидеть его вработе можно на 392876845 или на 351820682
    если не запущены - стукни в аську, запущу... я их на автомат не ставил.
    цитаты берет из файла, имя файла указано в начале... формат = каждая цитата с новой строки....

    Запускаться по времени он не умеет.
    я думал одэтом, но решил что это уже не для "блондинки".
    открой файл inc.php
    там идет мой кусок кода, а дальше та библиотека из которой делалось этоупрощение... помедитируй над вот этим куском:
    PHP:
    // *********************************************
    // основной цикл
    // *********************************************
    while($ICQ_still)
        {
        if(!
    is_resource($ICQ->sock) || feof($ICQ->sock)) $still_there=false;
        if(!
    $codesleep(1);    // Спим
        
    $code=$ICQ->dance_for('me');
        switch(
    $code)
            {
            case 
    7:
            
    $msg=$ICQ->id['in_messages']['last'];
            
    $from=$msg['uin'];
            
    $text=$msg['text'];
            
    icq($from,$text);
            }
        }
    Если не получится - пиши, сделаюверсию которая и это умеет. :)
     
  7. legezz

    legezz Писатель

    Регистр.:
    12 янв 2008
    Сообщения:
    8
    Симпатии:
    0
    Бот не очень, дествительно руками блондинки). Сегодня вечером выложу бота ICQ сам писал.. Функций достаточно много разной тематики - Погода, расшифровка хешей, флуд, проверка на инвиз и т.п
     
  8. Mendel

    Mendel

    Регистр.:
    27 янв 2008
    Сообщения:
    217
    Симпатии:
    64
    Только плиз в отдельной теме.
     
  9. Rendll

    Rendll Писатель

    Заблокирован
    Регистр.:
    27 окт 2007
    Сообщения:
    27
    Симпатии:
    4
    Так когда же будет твой бот?? если уже выложил, то дай плз ссылку!
     
  10. Rastafan

    Rastafan

    Регистр.:
    1 фев 2008
    Сообщения:
    649
    Симпатии:
    169
    У меня какой то глюк с твоим ботом. Если я пытаюсь отправить сообщение изпод эмулятора аськи на подобии QIP то бот тупо молчит ... В чем может быть проблема?
     
Статус темы:
Закрыта.