Причем несмотря на файлы примеров в исходниках это было достаточно трудно, но вся трудность заключалась в большей степени нежеланием что-то делать самому а хотелось готового решения удовлетворяющего какому-то минимуму, но в чужих скриптах всегда лень разбираться из-за отсутсвия комментариев.
Теперь же mcabber стал более популярен чем тогда и примеров файла событий уже достаточно много, вот ещё один в котором я заодно постарался в процессе рассказать о принципе его работы и вообще о принципе событий (за исключением хуков post-connect и pre-disconnect которые в дефолтном конфиге описаны, к тому же довольно просты), к тому же этот файл можно будет использовать как базу для дальнейшего подгона уведомлений под себя.
#!/bin/sh## скрипт событий указанный в параметре set events_command # (set указываю на всякий случай, просто по конфигу искать проще)# всегда получает 4 или менее параметров вида приблизительно такого:## MSG OUT имя_или_jid# MSG IN имя_или_jid имя_файла# UNREAD 1# MSG MUC конференция имя_файла# STATUS A имя_или_jid# UNREAD 0## причем имя файла будет только в том случае если установлена переменная# set event_log_files в значение 1 и в set event_log_dir указана директория# # вообще этот файл может быть любой программой а не только bash-скриптом# в примерах из исходников был и python # Соответсвенно от получаемых параметров и пляшемEV=$1 # главное событиеEVENT=$2 # не знаю, как обозвать - подсобытие, уточнение событияNICK=$3 # ник или jid# считываем файл если он существуетif [[ $4 != "" ]];then TEXT=$(cat $4)# ну и удаляем файл, ибо он нам больше не нужен rm -f $4else TEXT=""fi# проверяем главное событиеcase "$EV" in# если событие сообщение то "MSG")# уточняем второе событие case "$EVENT" in# если событие входящее сообщение то "IN")# шлём какое-нибудь уведомление, к примеру notify-send echo $(notify-send -i /usr/share/gajim/data/iconsets/dcraven/16x16/event.png "$NICK" "$TEXT")# ну и можно музычку заодно проиграть aplay ~/.mcabber/sound/incoming.wav & ;;# если сообщение это сообщение в конференции "MUC")# то тоже делаем что-нить, к примеру в данном случае я ищу вхождение своего ника # и если он есть то вывожу уведомление и играю звук, если его нет то просто звук FOUND=`echo $TEXT| grep muhas` if [ -n "$FOUND" ]; then echo $(notify-send -i /usr/share/gajim/data/iconsets/dcraven/16x16/event.png "$NICK" "те в конфе пишут") fi aplay ~/.mcabber/sound/incoming.wav & ;; "OUT")# если сообщение исходящее то тоже что-нить делаем, для примера играем звук aplay /.mcabber/sound/outcoming.wav ;; esac ;;# если главное сбытие это смена статуса то "STATUS")# уточняем на какой статус меняется case "$EVENT" in# и задаем иконку и текст для этого статуса (если надо, конечно) "O") icon=online.png; s=online;; "F") icon=chat.png; s="free for chat";; "A") icon=away.png; s=away;; "N") icon=xa.png; s=n/a;; "D") icon=dnd.png; s=DND;; "_") icon=offline.png; s=offline;; *) icon=online.png; s=$EVENT;; esac# ну и выводим уведомление с соответсвующей иконкой и текстом echo $(notify-send -t 1000 -i /usr/share/gajim/data/iconsets/dcraven/16x16/$icon "$NICK is $s") ;;# если главное событие это налиние непрочитанных, учьтите что это количество непросмотренных контактов# а не количество сообщений "UNREAD")# пишем в файл количество echo $EVENT > ~/.mcabber/unread# так же тоже самое количество можно получать обработкой файла # указанного в в конфиге (set statefile), но там список jid'ов написавших# так что количество будет равным cat file | wc -l # причем когда число непрочитанных равно нулю, то statfile несуществует ;;esac# вот собственно и все# пытался сделать этот файл более менее полным и понятным, с моей точки зрения вроде как получилось
Кроспост моей же записи c WeLinux