Скрипт событий для mcabber

Для меня при первом знакомстве с mcabber главная трудность заключалась в том что бы как-то заставить его уведомлять о пришедших сообщениях, спустя какое-то время это было сделано.
Причем несмотря на файлы примеров в исходниках это было достаточно трудно, но вся трудность заключалась в большей степени нежеланием что-то делать самому а хотелось готового решения удовлетворяющего какому-то минимуму, но в чужих скриптах всегда лень разбираться из-за отсутсвия комментариев.

Теперь же 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
bosha 10-02-2010
Эхх. Жаль mcabber ещё текущий статус отдавать не умеет :)
sattellite 10-02-2010
Что-то не показывает он входящие сообщения. pop-up всплывает с ником, иконкой, но самого сообщения нет. Видимо он не $TEXT'ом отправляется.
muhas 10-02-2010
et event_log_files и set event_log_dir в конфиге установлены?

и у меня кстати ошибка в посте (upload/post вместо скобочек, парсер поел - как раз там где проверка на наличие текста) и никто что-то не сказал
bosha 10-02-2010
@muhas у меня кстати в конфиге нет ни намёка на подобные строчки. можешь дать твой конфиг мне для сравнения?
muhas 10-02-2010
всего-лишь
set event_log_files = 1
set event_log_dir = ~/.bak/mcabber
смотри пример конфига идущий с исходниками, там всё подробно комментировано http://mcabber.com/hg/index.cgi/file/06fdfff29175/mcabber/mcabberrc.example
nonamez 10-05-2010
sattellite # 10-02-2010, 20:49 avatarЧто-то не показывает он входящие сообщения. pop-up всплывает с ником, иконкой, но самого сообщения нет. Видимо он не $TEXT'ом отправляется.



// 15.05.10 - Все исправлено
muhas 10-05-2010
пора приучаться вместо двойных квадратных скобок писать одинарные, либо допилить двиг =)
oleg2552 11-02-2011
notify-send понимает, тег "a".
Поэтому можно заюзать что то типа этого http://dpaste.com/hold/434301/
Было написано от безысходности =)
melekin 12-06-2012
@muhas что то у меня тоже текст не отображается... иконка, оповещение работают. Ну и соответственно rm -f $4 не отрабатывает. можешь мне на почту отправить свой ~/.mcabber.gz интересно будет посмотреть твои конфиги со скриптами что прикрутил
muhas 12-06-2012
http://ompldr.org/vZWtjYg
в остальном скрипты вполне стандартны, в постконекте скрытие групп и прочие мелочи + пару хоткеев
копию на мыло отправил
melekin 12-07-2012
@muhas Спс))) Дополнил свой конфиг. Из-за игнорирования разрабами jabber клиентов для платформы iOS, mcabber как раз кстати
melekin 13-04-2013
@muhas что то перестал у меня скрипт нормально работать. выводит постоянно уведомление на любое сообщение в конфе, даже если есть вхождение моего ника сообщение не отображает.Если закоментировать rm -f $4 в скрипте никаких файлов в директории не прявляется. Что то в mcabber уже нахимичили? MCabber 0.10.2 archlinux X86_64
muhas 13-04-2013
курить строку FOUND=`echo $TEXT| grep muhas` - должна помочь, вроде ничего не меняли
сам перестал mcabber юзать (imo.im использую дабы со всех девайсов быть в сети и иметь общую историю)
melekin 13-04-2013
y меня
FOUND='echo $TEXT|grep -v [melekin]'
пишу сам себе с другого клиента, бестолку
muhas 13-04-2013
к сожалению, не подскажу. может уто другой прочтет подскажет