LINUX.ORG.RU

mcabber звуковое оповещение


0

0

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

Первым что я пробовал сделать это раскоментировать строчку
set beep_on_message = 1
Но не помогло.
Потом пробовал раскоментировать
$events_command MSG IN jabber@id [file]
$events_command MSG OUT jabber@id
$events_command MSG MUC room_id [file]
$events_command STATUS X jabber@id
$events_command UNREAD N
set events_command = home/n4ela/.mcabber/eventcmd

В самом eventcmd прописал следующие
#! /bin/sh
#
# Sample events script for mcabber
# Use OSD to display events on the user's desktop
#
# To use this script, set the "events_command" option to the path of
# the script (see the mcabberrc.example file for an example)
#
# MiKael, 2006-01-07

XOSD_CMD_PIPE='osd_cat --pos=top --align=right --delay=10 --color=cyan --outline=10 --color=magent'

event=$1
arg1=$2
arg2=$3
filename=$4
# Note that the 4th argument is only provided for incoming messages
# and when 'event_log_files' is set.

if [ $event = "MSG" ]; then
case "$arg1" in
IN)
# Incoming message from buddy $arg2
echo "You have an IM from <$arg2>" | $XOSD_CMD_PIPE > /dev/null 2>&1
if [ -n "$filename" -a -f "$filename" ]; then
# We could process filename here...
/bin/rm $filename
fi
;;
MUC)
# Groupchat message in room $arg2
if [ -n "$filename" && -f "$filename" ]; then
# We could process filename here...
/bin/rm $filename
fi
;;
OUT)
# Outgoing message for buddy $arg2
;;
esac
elif [ $event = "STATUS" ]; then
# Buddy $arg2 status is $arg1 (_, O, I, F, D, N, A)
echo "<$arg2> has changed status to: [$arg1]" | $XOSD_CMD_PIPE > /dev/null 2>&1
echo > /dev/null
fi

Этот код помоему был в примерах, но звук при сообщений все равно не появился.
Кстати если просто в консоле выполнить
./eventcmd
то появятся следующие ошибки
./eventcmd: line 20: [: =: unary operator expected
./eventcmd: line 41: [: =: unary operator expected
если выполнить ./eventcmd любая цифра\буква\слово
ошибок не появляется.
Ради интереса попробовал в eventcmd место этого сложного когда запихнуть сторчку
play -t mp3 ~/Downloads/ahem_x.wav
пробовал указывать как полный путь до папки так и ~.
Звук не появился.
На каком то забугорном форуме накнулся на скрипт на питоне.
#!/usr/bin/python
# Version 0.05
#
# Copyright © 2007 Adam Wolk "Mulander" <netprobe@gmail.com>
# Slightly updated by Mikael Berthe
#
# To use this script, set the "events_command" option to the path of
# the script (see the mcabberrc.example file for an example)
#
# This script is provided under the terms of the GNU General Public License,
# see the file COPYING in the root mcabber source directory.
#

import sys

CMD_MSG_IN="/usr/bin/play /home/n4ela/Downloads/ahem_x.wav"
#CMD_MSG_IN=""
SHORT_NICK=True

if len(sys.argv) == 5:
event,arg1,arg2,filename = sys.argv[1:5]
else:
event,arg1,arg2 = sys.argv[1:4]
filename = None

if event == 'MSG' and arg1 == 'IN':
import pynotify,os,locale
encoding = (locale.getdefaultlocale())[1]
msg = 'sent you a message.'

if SHORT_NICK and '@' in arg2:
arg2 = arg2[0:arg2.index('@')]

if filename is not None:
f = file(filename)
msg = f.read()

pynotify.init('mcnotify')
msgbox = pynotify.Notification(unicode(arg2, encoding),unicode(msg, encoding))
msgbox.set_timeout(3000)
msgbox.set_urgency(pynotify.URGENCY_LOW)
msgbox.show()
if (CMD_MSG_IN):
os.system(CMD_MSG_IN + '> /dev/null 2>&1')

if filename is not None and os.path.exists(filename):
os.remove(filename)
pynotify.uninit()

# vim:set noet sts=8 sw=8:

Звук не появился.
Если выполнить sh 1.py то указатель мыши превращается в крестик, больше не чего не происходит, если кликнуть мышкой то указатель становится нормальным, в консоле повяляется следующая ошибка
1.py: line 20: syntax error near unexpected token `sys.argv'
1.py: line 20: `if len(sys.argv) == 5:'
Если сделать файл исполняемым и набрать ./1.py
выдаст:
Traceback (most recent call last):
File "./1.py", line 23, in <module>
event,arg1,arg2 = sys.argv[1:4]
ValueError: need more than 0 values to unpack

Потом я посмотрел что выдает mcabber:

Reading /home/n4ela/.mcabber/mcabberrc
WARNING: Bad permissions [/home/n4ela/.mcabber/]
Error in configuration file (l. 204): this is not an assignment
Error in configuration file (l. 205): this is not an assignment
Error in configuration file (l. 206): this is not an assignment
Error in configuration file (l. 207): this is not an assignment
Error in configuration file (l. 208): this is not an assignment

Это те строчки которые я раскоментировал как события.
На одном форуме мне сказали что их надо обратно закоментировать, что я потом и сделал, но звук так и не повился.
Буду благодарен за помощь.


Сейчас скину свой конфиг, закопипасть, и посмотрим, как результат.

Кстатия, версия mcabber то какая?

arknir
()
Ответ на: комментарий от arknir

#! /bin/sh
#
# Sample events script for mcabber
# Plays a sound when receiving a message
#
# To use this script, set the "events_command" option to the path of
# the script (see the mcabberrc.example file for an example)
#
# MiKael, 2005-07-15

# The following sound comes with the gtkboard package,
# you can modify this line to play another one...
CMD_MSG_IN="aplay /home/arknir/.mcabber/sound.wav"

event=$1
arg1=$2
arg2=$3
filename=$4
# Note that the 4th argument is only provided for incoming messages
# and when 'event_log_files' is set.

if [ $event = "MSG" ]; then
  case "$arg1" in
    IN)
      # Incoming message from buddy $arg2
      $CMD_MSG_IN > /dev/null 2>&1
      if [ -n "$filename" -a -f "$filename" ]; then
        # We could process filename here...
        /bin/rm $filename
      fi
      ;;
    MUC)
      # Groupchat message in room $arg2
      if [ -n "$filename" && -f "$filename" ]; then
        # We could process filename here...
        /bin/rm $filename
      fi
      ;;
    OUT)
      # Outgoing message for buddy $arg2
      ;;
  esac
elif [ $event = "STATUS" ]; then
  # Buddy $arg2 status is $arg1 (_, O, I, F, D, N, A)
  echo > /dev/null
elif [ $event = "UNREAD" ]; then
  # $arg1 is the number of unread buffers
  echo > /dev/null
fi

arknir
()
Ответ на: комментарий от n4ela

Да в общем-то нет проблем - он стандартным шёл в сурсах =)

arknir
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.