LINUX.ORG.RU

mcabber unread message

 


0

2

Как вывести кол-во непрочитанных сообщений, которые: 1) адресованы в muc мне лично 2) кто-то написал мне из контакт листа

event=$1
arg1=$2
arg2=$3
filename=$4

FIFO_DIR="/var/tmp/myram/.mcabber"

 if [ "$event" = "UNREAD" ]; then
	echo "$arg1" > ${FIFO_DIR}/unread
fi

но блин, никак не пойму как правильно вывести только кол-во адресованных мне сообщений

★★★★

А как он должен определять, что сообщение в muc адресовано именно тебе? ЕМНИП, он просто подсвечивает сообщение, в котором присутствует твой ник. Если хочешь так же, анализируй текст сообщений сам (дергая скрипт при событиях MSG).

winlook38 ★★
()
Ответ на: комментарий от winlook38
    if kind == "MSG" then
        if direction == "IN" or direction == "MUC" then
            local filehandle = io.open(msg)
            local txt = filehandle:read("*all")
            filehandle:close()
            awful.util.spawn("rm "..msg)
            if direction == "MUC" and txt:match("^<" .. muc_nick .. ">") then
                return
            end
            naughty.notify{
                icon = "chat_msg_recv",
                text = awful.util.escape(txt),
                title = jid
            }

у кого-то есть эта реализация на bash ?

bryak ★★★★
() автор топика
Ответ на: комментарий от bryak

У меня на питоне. А в чем проблема написать то же самое на баше? Я мог бы, но под рукой баша нет, а писать на нем с первого раза валидный код я не умею. Четвертым параметром в твой скрипт передается файл, содержимое которого тебе и нужно проанализировать.

P.S. если вечером будет еще актуально, напишу на баше.

winlook38 ★★
()
Последнее исправление: winlook38 (всего исправлений: 1)
Ответ на: комментарий от bryak

Тоже вечером, под рукой нет. Ты скажи, чего добиться хочешь, я может сразу адаптированный вариант предоставлю.

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

Мне в панельку в dwm надо выводить количество сообщений, которые адресованы лично мне с jid'ов из контакт листа + сообщения, которые адресованы лично мне в конференциях, в которых я сижу. Т.е в файл надо записать суммарное кол-во сообщений из muc и контакт листа, чтобы я мог их подобрать скриптом мониторинга и показать в панельке dwm

bryak ★★★★
() автор топика
Последнее исправление: bryak (всего исправлений: 1)
Ответ на: комментарий от bryak

Не знаю зачем ты спрашиваешь об этом на ЛОРе, т.к. я нагуглил множество решений. Понадергал вот такое:

#!/bin/bash

if [ "$1" = "MSG" ]; then
        case "$2" in
                IN)
                        counter=$(echo $(cat unread.txt) + 1 | bc)
                        echo $counter > unread.txt
                        ;;
                MUC)
                        if [ -n "$4" -a -f "$4" ]; then
                                if grep -q "<nick>" $4
                                then
                                        counter=$($(cat unread.txt) + 1 | bc)
                                        echo $counter > unread.txt
                                fi
                        fi
                        ;;
        esac
fi

Свое питонячье не привожу, т.к. там треш и угар и много того, что тебе совсем не нужно.

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

а как оно будет каунтер уменьшать ? Т.е я прочитал сообщение, оно ж должно из каунтера уйти. А тут этого нет

bryak ★★★★
() автор топика
Последнее исправление: bryak (всего исправлений: 1)
Ответ на: комментарий от bryak

Пока не готов выложить, т.к. в процессе медленной отладки. На данный момент, как уже писал, там треш и угар. Отдельные куски кода тебе ничего не дадут. И твой конкретный случай у меня не реализован, я просто веду лог сообщений. С mcabber'ом я дотрахался до того, что посылал в него команды на вывод содержимого ростера, парсил и показывал во внешнем скрипте. Задолбало и решил, что проще заскриптовать на питоне. Юзаю sleekxmpp. Если допилю до рабочего состояния, выложу.

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

офигеть, топовый консольный жабер клиент. И штатными средствами нельзя получить кол-во непрочитанных сообщений адресованных лично мне. Лол)

bryak ★★★★
() автор топика
# The command is called the following way:
#   $events_command MSG IN jabber@id [file] (when receiving a message)
#   $events_command MSG OUT jabber@id       (when sending a message)
#   $events_command MSG MUC room_id [file]  (when receiving a MUC message)
#   $events_command STATUS X jabber@id      (new buddy status is X)
#   $events_command UNREAD "N x y z"        (number of unread buddy buffers)
#   (x=attention y=muc unread buffers z=muc unread buffers with attention sign)

Значит ответ на первый вопрос находится в $5, на второй в $2. Но это не количество сообщений, а количество контактов с непрочтенным уведомлением.

disarmer ★★★
()
Ответ на: комментарий от bryak

офигеть, топовый консольный жабер клиент. И штатными средствами нельзя получить кол-во непрочитанных сообщений адресованных лично мне. Лол)

Каждому не угодишь. Но! Исходники открыты, ты можешь дописать и прославиться в узких кругах.

Кончай стонать, начинай писать код.

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

К примеру 64гб после форматирования превращается в 59. Как этого избежать ?

OMG, с кем я общаюсь. школота на марше

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

там в $unread тоже всё хитро сделано. Там именно непрочитанные буферы. А непрочитанным считается любой буфер, например muc с сообщениями, которые не адресованы мне

bryak ★★★★
() автор топика
Ответ на: комментарий от winlook38

ну хз. В мкаббер сделали бы какой-то urgent тогда, если нормально каунтерить адресованное мне не умеет. В общем мракота

bryak ★★★★
() автор топика

Короче таг:

1.кол-во непрочитанных сообщений складываются в mcabber.state

2. кол-во хайлайтов в muc складываются из $UNREAD => [0 0 1 0]

Выбираем питоном:

    def jabber(self, threadname, delay, data):

        while True:
            try:
                unread = 0
                if os.path.isfile(JABBER_STATE):
                    with open(JABBER_STATE) as fin:
                        unread += len(fin.read().rstrip().split())

                if os.path.exists(JABBER_PATH):
                    with open(JABBER_PATH) as fin:
                        unread += map(int, fin.read().rstrip('\n').split())[2]
                data['1'] = dict(jabber=unread)
            except Exception as err:
                    print err
                    data['1'] = dict(jabber='err')
            finally:
                time.sleep(delay)

bryak ★★★★
() автор топика
Последнее исправление: bryak (всего исправлений: 2)
Ответ на: комментарий от bryak

*unread += map(int, fin.read().rstrip('\n').split())[3]

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