ПредисловиеНачну с того, что я решил написать своего ICQ бота и столкнулся с рядом проблем: недостаток документации, не нашел готовых ботов, чтобы посмотреть и переделать под себя, в основном все было под Windows...
Дело сдвинулось с мертвой точки когда прочитал статью на opennet.ru, где описывался принцип создания бота с использованием micq... Но здесь мне не понравились некоторые моменты: сообщения от micq приходили не в "чистом" виде, а приходилось обрабатывать вывод программы micq, что, мягко говоря, не удобно...
В принципе, только это мне и не нравилось... Хотя, быть может, я просто что-то неправильно понял... Поэтому решил попробовать сделать свое, но с помощью licq... Хотя получилось почти по тому же принципу, и статья с opennet.ru здесь сильно помогла...
Немного теорииВ общих чертах все это выглядит так: создаем для бота индивидуальные настройки (чтобы можно было использовать и нашу основную аську), запускаем licq и включаем только модуль autoreply, который все входящие сообщения передает нашему скрипту... Скрипт обрабатывает сообщение и ответ передает аське ответ... Для управления же аськой, как и в случае с micq есть пайп BASEDIR/licq_fifo (BASEDIR - каталог с настройками бота)...
ПрактикаИтак, сначала надо зарегистрировать новый uin для бота...
Далее, нужно создать каталог для настроек аськи бота:
$ mkdir ~/icq_bot
Начальные настройки возьмем из каталога licq по умолчанию ~/.licq:
$ cp -R ~/.licq/* ~/icq_bot/
И изменим в файле ~/icq_bot/owner.uin параметры Password и Uin на пароль и номер аськи нашего бота:
$ cat ~/icq_bot/owner.uin | sed "s/^Password\s*=.*$/Password = /i; s/^Uin\s*=.*$/Uin = /i" > ~/temp
$ mv ~/temp ~/icq_bot/owner.uin
Теперь для изменения остальных настроек бота можно запустить licq как обычно, но с настройками бота:
$ licq -b ~/icq_bot/
Осталось настроить плагин licq autoreply, который будет передавать сообщения нашему скрипту... Для этого надо создать файл licq_autoreply.conf в каталоге с настройками нашего бота... Пример этого файла есть в документации к licq... А вот то, что сделал я:
$ cat > ~/icq_bot/licq_autoreply.conf << EOF
#Begin of ~/icq_bot/licq_autoreply.conf
[Reply]
Program = ~/icq_bot/icq_bot.pl
Arguments = %u
PassMessage = 1
#End of ~/icq_bot/licq_autoreply.conf
EOF
Теперь сообщения, присыланные боту будут перенаправлены на стандартный ввод нашего скрипта, указанного в параметре Program файла licq_autoreply.conf... Это обеспечивается установкой параметра PassMessage в единицу... В качестве аргумента скрипту будет передан только uin того, кто прислал сообщение...
Осталось написать сам скрипт, т. е. создать файл ~/icq_bot/icq_bot.pl:
$ cat > ~/icq_bot/icq_bot.pl << EOF
#!/usr/bin/perl
$uin = $ARGV[0];
print $_ while ();
EOF
$ chmod a+x ~/icq_bot/icq_bot.pl
Здесь вместо эхоответа вы, вероятно, сделаете свою обработку сообщений... Кроме того, вы можете управлять аськой бота посредством пайпа ~/icq_bot/licq_fifo просто записывая в него команды... Подробное описание команд можно найти в документации к licq...
Осталось только запустить нашего бота:
$ licq -b ~/icq_bot/ -p autoreply -- -e -l online > /dev/null 2>&1 &
Для остановки бота используем следующую команду:
$ echo "exit" > ~/icq_bot/licq_fifo
Вам, наверное, будет удобнее написать отдельный скрипт для запуска и остановки бота...
Автор: Антон Горев aka Вий