The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

Использование micq для создания ICQ ботов (icq fifo perl)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: icq, fifo, perl,  (найти похожие документы)
From: spanka <spanka at fannet.ru> Newsgroups: mail Date: Mon, 30 Aug 2004 14:31:37 +0000 (UTC) Subject: Использование micq для создания ICQ ботов Давно была идея сделать icq bot'a, и требовалось от него реагировать на определенные команды + оповещение. Можно написать своего icq bot'a используя библиотеки работы с icq, благо их можно свободно скачать из интернета. Мой выбор пал на консольного icq клиента micq (http://www.micq.org). Конфигурация самой программы micq не сложна, программа попросит ввесть уже существующие uin/pass, либо зарегистрировать новые. Теперь основное, выбрал я micq потому что у неё есть так называемый remote-control - это обычный pipe, который позволяет общаться с программой, запустив её например в background. Запустите программу (если вы не укажите параметр -b BASEDIR, то программа будет хранить все свои файлы у вас в ~/.micq/), в pipe нужно писать теже команды, которые вы бы писали в самой micq, например. echo "msg UIN hello, kotiki rulez tommorow" > BASEDIR/remote-control - эта комманда пошлёт UIN'у сообщение "hello, kotiki rulez tommorow", или: echo "finger UIN" > BASEDIR/remote-control - выдаст в micq информацию о UIN'e т.е. хотя бы на базе этого можно уже написать скрипты, который будут оповещать вас о чем то. Теперь, нужно чтобы бот реагировал на определенные команды и отсылал результат этих команд. Нужно придумать механизм общения самой icq, с каким то вашем внешнем обработчиком, ничего лучше чем pipe придумать нельзя :). создаем pipe: mkfifo /tmp/micq.pipe и говорим чтобы micq весь свой вывод перенаправляла в него: /home/spanka/micq -b /var/tmp/icq > /tmp/micq.pipe чтобы проверить, что все работает как надо, запустите tail -f /tmp/micq.pipe и вы должны увидеть, вывод программы micq. Теперь вам осталось написать программу которая читает пайп и парсит вывод micq. Для примера вот заготовка :)) #!/usr/bin/perl open(FIFO, "<$ARGS[0]") || die "Can't open file: $ARGS[0]"; while (<FIFO>) { тут_вы_уже_сами_парсите. } close(FIFO); ну и последние, чтобы запустить micq в background я пользую довольно корявый способ, если найдете лучше, буду только рад :) /usr/local/bin/icq_parsers.pl /tmp/icq.pipe >/dev/null 2>&1 #parser tail -f /dev/null | /home/spanka/micq -b /var/tm/icq > /tmp/icq.pipe 2>&1 & #micq

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, Saint_Byte (?), 14:49, 24/03/2005 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    Какая версия ??? У меня с последнией нечего не получается =(
     
     
  • 2.4, Denis (??), 21:02, 06/10/2005 [^] [ответить]    [к модератору]
  • +1 +/
    опечатался автор
    в строке где tail -f /dev/null а надо так : tail -f /micq.pipe
    тогда будет работать
     
     
  • 3.5, Basil (??), 10:05, 25/11/2005 [^] [ответить]    [к модератору]
  • +/
    Нет, не будет:
    1. Труба /micq.pipe вообще не существует (опечатка у вас)
    2. /tmp/micq.pipe существует, но предназначена для получения вывода программы, а не ввода команд (для ввода используется BASEDIR/remote-control, как правильно указал автор)
    3. tail -f здесь служит для того, чтобы отстегнутая от ввода micq не уходила в спячку. Правда я не уверен, что правильно так обращаться с /dev/null, но думаю автор в этом разобрался лучше.
     
  • 1.2, chip (??), 21:16, 26/03/2005 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    ИМХО, вся эта конструкция слишком хлюпкая. У pipe __всегда__ должен быть читатель и писатель! Со всеми вытекающими...
     
  • 1.6, GuGu (?), 11:41, 23/01/2006 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    Мне кажется, тут лучше было бы использовать expect
     
  • 1.8, Ruslan (??), 01:27, 30/09/2006 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Я запускаю вот так...
    echo set color off >a && tail -f a |micq >>b
     
  • 1.9, obl (ok), 18:50, 13/10/2006 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    чтото не работает данная конструкция
    может что новое придумал в мАське :)
     
     
  • 2.10, obl (ok), 14:08, 17/10/2006 [^] [ответить]    [к модератору]  
  • +/
    >чтото не работает данная конструкция
    >может что новое придумал в мАське :)
    у меня вот такая конструкция

    вот стартовый скрипт:

    #!/usr/local/bin/bash
    echo -n ' mICQ '

    case "$1" in
    start)
            echo "" > /home/.micq/in
            echo "" > /home/.micq/out
            tail -f /home/.micq/in | micq --passwd 1Qx5sdcd --basedir /home/.micq -C "msg DarthCasper System UP"> /home/.micq/out &
            sleep 3 && cat /home/.micq/out && echo &
            sleep 10 && printf "msg DarthCasper Bot System UP\n" >> /home/.micq/in && printf "msg Taver Bot System UP\n" >> /home/.micq/in &
            echo
            ;;
    stop)
            printf " msg DarthCasper System Shutdown\n" >> /usr/home/.micq/in
            sleep 1

            printf " exit\n" >> /usr/home/.micq/in
            sleep 2 && tail /home/.micq/out &
            echo
            ;;
    *)
            echo "Usage: 'basename $0' {start|stop}" >&2
            exit 64
            ;;
    esac

    exit 0

    ето домашняя дирректория /home/.micq/
    /home/.micq/out - от сюда читаем если хоцца
    /home/.micq/in - сюда пишем если хоцца :)

    писать только надо через добавление в конец - тоесть ">>"
    вот и все грабли :)
    вот права на файло
    -rwsr-sr-t  1 nagios  nagios  497444  5 окт 14:00 /usr/local/bin/micq

     
  • 1.11, Timka (??), 13:55, 03/11/2006 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    что-то последнюю неделю не работает micq :( это у всех так или только у меня?
     
     
  • 2.12, sib (?), 22:55, 03/11/2006 [^] [ответить]    [к модератору]  
  • +/
    Только поставил micq, вроде все верно, но выдает
    Connection v8 timed out.
    И ни принять, не отправить...
     
  • 1.13, Timka (??), 22:37, 08/11/2006 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    вышла micq 0.5.2, в ней все пофикшено.
    ура.
     
  • 1.14, etz (??), 06:16, 28/02/2007 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Кто-нибудь сталкивался с ограничением сервака на интенсивность посылки мессаг? сервер начинает орать "You're sending data too fast - stop typing now, or the server will disconnect!"
    Как это можно обойти средствами micq'а ? никаких настроек очереди сообщений у него не нашёл..
     
  • 1.15, Александр (??), 12:22, 28/06/2007 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    А чем вариант 'micq ... < /dev/null' плох?
    Зачем делать tail -f /dev/null | micq ...?
    Один процесс таки лучше чем 2.
     
  • 1.16, ForeverYoung (?), 16:15, 02/07/2007 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    я лично сделал так:
    foreveryoung ~ # cat ~icqbot/script
    #!/usr/bin/perl
    $_ = 1;
    exit if( $#ARGV < 0 );
    use File::Tail;
    $name = "/home/icqbot/.micq/history/${ARGV[0]}.log";
    my $ref=tie *FH,"File::Tail",(name=>$name, maxinterval=>1, interval=>1);
    open LOG, ">${ARGV[0]}_bot.log";
    $skip = 0;
    $cmd = 0;
    while( <FH> )
    {
        if( $skip > 0 )
        {
            $skip--;
            next;
        }
        if( $_ =~ /# \d+\/ \[[^]]+\]\S+ -> [^[]*\[[^]]+\] [+](\d+)/ )
        {
            $skip = $1;
            $cmd = 0;
            next;
        }
        if( $_ =~ /# \d+\/ \[[^]]+\]\S+ <- [^[]*\[[^]]+\] [+](\d+)/ )
        {
            $cmd = 1;
            next;
        }
        if( !$cmd )
        {
            next;
        }
        if( $_ =~ /^ping (.+)$/ )
        {
            print LOG "Pinging $1\n";
            $ping = 'ping -c 10 $1 2>&1';
            open OUT, ">.micq/scripting";
            print OUT "/msg ${ARGV[0]}\n";
            print OUT $ping;
            print OUT ".\n";
            close OUT;
            next;
        }
    }

    а micq убирается в фон с помощью screen:
    # screen -AmdS icq micq

     
  • 1.17, Slimy Cat (ok), 21:18, 05/02/2008 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    А как быть, если надо "оторвать" бота от сеанса (у меня не micq, а climm)?
    Я пробовал такое:
      nohup /usr/local/bin/climm 2>&1 > /dev/null &
    Работает, но состояние процесса RUN и ПОЛНАЯ загрузка процессора... idle = 0.00%
    Хотя если загнать его просто в бэкграунд в текущем сеансе, все нормально, статус select, WCPU ~ 0.5%

    virtual:~# top -n
    19 processes:  2 running, 17 sleeping
      PID USERNAME  THR PRI NICE   SIZE    RES STATE    TIME   WCPU COMMAND
    7709 root        1 132    0  3856K  2252K RUN      1:14 92.25% climm
      753 root        1  96    0  1400K   832K select   0:22  0.00% syslogd

    Подозреваю, что "оторванный" от stdin процесс начинает опрашивать либо несуществующий stdin, либо пайп, чем и грузит проц.
    Кто что посоветует?
    Screen не предлагать, т.к. его в *.tbz нет, а компилятор отсутствует по определению (так надо).

     
     
  • 2.20, GoodOkk (?), 17:38, 25/11/2009 [^] [ответить]    [к модератору]  
  • +/
    У меня подобная проблема. Как заставить climm не вылетать, после того, как вылогиниваешься из консоли? даже со screen не могу разобраться как сделать, аська не запускается, если перенаправлять вывод в пайп, а если не перенаправлять, то все нормально, но, тогда смысл бота теряется :(
     
     
  • 3.21, Alexey (??), 19:33, 25/11/2009 [^] [ответить]    [к модератору]  
  • +/
    >У меня подобная проблема. Как заставить climm не вылетать, после того, как
    >вылогиниваешься из консоли? даже со screen не могу разобраться как сделать,
    >аська не запускается, если перенаправлять вывод в пайп, а если не
    >перенаправлять, то все нормально, но, тогда смысл бота теряется :(

    Я запускаю из скрипта запуска - /usr/local/bin/screen -d -m /usr/local/bin/climm
    Чтобы не вылетал - нужно 1. Запустить screen 2. Запустить в нем climm 3. "Оторвать" screen от консоли (detach) 4. Можно выходить из консоли по exit
    Читайте мануал по командным клавишам screen и параметрам запуска.
    Может быть, как-нибудь соберусь и напишу-таки небольшое руководство по установке и настройке icq-бота под управлением climm.
    PS НЕ РЕКЛАМА! Если таковое будет написано (+- около НГ), читать по адресу http://slimy-cat.blogspot.com/


     
  • 1.18, Дмитрий (??), 00:26, 15/07/2009 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Есть вопросы... что то я не въехал.
    MICQ работает нормальною, PIPE посмотрел командой tail

    Вопрос такой насущный....

    Как прочитать полученное например PHP скриптом?
    и как отправить ответ в MICQ этим скриптом?

     
     
  • 2.19, Alexey (??), 12:12, 21/07/2009 [^] [ответить]    [к модератору]  
  • +/
    >Есть вопросы... что то я не въехал.
    >MICQ работает нормальною, PIPE посмотрел командой tail
    >
    >Вопрос такой насущный....
    >
    >Как прочитать полученное например PHP скриптом?
    >и как отправить ответ в MICQ этим скриптом?

    Смогу ответить кратко, пока что я занят и не имею возможности расписать подробно.
    Я не использовал tail, я импользовал каналы (pipes).
    Обработчик событий прописывается в конфиге climm (можно прописать исполняемый скрипт, PHP-скрипт и тд.)
    Данные берутся и отправляются в каналы (вместо экрана).
    По предыдущему вопросу - решилось, screen нашел в пакадже, все работает отлично.

     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:





      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor