Обсуждение статьи тематического каталога: Использование micq для создания ICQ ботов (icq fifo perl)Ссылка на текст статьи: http://www.opennet.me/base/dev/micq_bot.txt.html
Какая версия ??? У меня с последнией нечего не получается =(
опечатался автор
в строке где tail -f /dev/null а надо так : tail -f /micq.pipe
тогда будет работать
Нет, не будет:
1. Труба /micq.pipe вообще не существует (опечатка у вас)
2. /tmp/micq.pipe существует, но предназначена для получения вывода программы, а не ввода команд (для ввода используется BASEDIR/remote-control, как правильно указал автор)
3. tail -f здесь служит для того, чтобы отстегнутая от ввода micq не уходила в спячку. Правда я не уверен, что правильно так обращаться с /dev/null, но думаю автор в этом разобрался лучше.
ИМХО, вся эта конструкция слишком хлюпкая. У pipe __всегда__ должен быть читатель и писатель! Со всеми вытекающими...
Мне кажется, тут лучше было бы использовать expect
Я запускаю вот так...
echo set color off >a && tail -f a |micq >>b
чтото не работает данная конструкция
может что новое придумал в мАське :)
>чтото не работает данная конструкция
>может что новое придумал в мАське :)
у меня вот такая конструкциявот стартовый скрипт:
#!/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 1printf " exit\n" >> /usr/home/.micq/in
sleep 2 && tail /home/.micq/out &
echo
;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
exit 64
;;
esacexit 0
ето домашняя дирректория /home/.micq/
/home/.micq/out - от сюда читаем если хоцца
/home/.micq/in - сюда пишем если хоцца :)писать только надо через добавление в конец - тоесть ">>"
вот и все грабли :)
вот права на файло
-rwsr-sr-t 1 nagios nagios 497444 5 окт 14:00 /usr/local/bin/micq
что-то последнюю неделю не работает micq :( это у всех так или только у меня?
Только поставил micq, вроде все верно, но выдает
Connection v8 timed out.
И ни принять, не отправить...
вышла micq 0.5.2, в ней все пофикшено.
ура.
Кто-нибудь сталкивался с ограничением сервака на интенсивность посылки мессаг? сервер начинает орать "You're sending data too fast - stop typing now, or the server will disconnect!"
Как это можно обойти средствами micq'а ? никаких настроек очереди сообщений у него не нашёл..
А чем вариант `micq ... < /dev/null` плох?
Зачем делать tail -f /dev/null | micq ...?
Один процесс таки лучше чем 2.
я лично сделал так:
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
А как быть, если надо "оторвать" бота от сеанса (у меня не 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 нет, а компилятор отсутствует по определению (так надо).
У меня подобная проблема. Как заставить climm не вылетать, после того, как вылогиниваешься из консоли? даже со screen не могу разобраться как сделать, аська не запускается, если перенаправлять вывод в пайп, а если не перенаправлять, то все нормально, но, тогда смысл бота теряется :(
>У меня подобная проблема. Как заставить 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/
Есть вопросы... что то я не въехал.
MICQ работает нормальною, PIPE посмотрел командой tailВопрос такой насущный....
Как прочитать полученное например PHP скриптом?
и как отправить ответ в MICQ этим скриптом?
>Есть вопросы... что то я не въехал.
>MICQ работает нормальною, PIPE посмотрел командой tail
>
>Вопрос такой насущный....
>
>Как прочитать полученное например PHP скриптом?
>и как отправить ответ в MICQ этим скриптом?Смогу ответить кратко, пока что я занят и не имею возможности расписать подробно.
Я не использовал tail, я импользовал каналы (pipes).
Обработчик событий прописывается в конфиге climm (можно прописать исполняемый скрипт, PHP-скрипт и тд.)
Данные берутся и отправляются в каналы (вместо экрана).
По предыдущему вопросу - решилось, screen нашел в пакадже, все работает отлично.