Многопользовательские чаты (Multi-user chat, сокращенно — MUC) являются одной из ключевых особенностей протокола Jabber, позволяя вывести общение в мессенджере на качественно новый уровень. Но поскольку протокол XMPP не зависит от конкретного разработчика или клиента, сложилась такая ситуация, при которой на данный момент ни один клиент не реализует его полностью. Иногда это приводит к некоторым трудностям, которые, тем не менее, можно устранить штатными средствами самого протокола. Один из примеров приведен в этой статье.
Итак, допустим, вы решили подключиться к чату при помощи одного из самых функциональных клиентов — Miranda IM. Для Миранды написано множество самых разнообразных плагинов, например таких, которые могут автоматически менять ваш статус и статусное сообщение в зависимости от ваших занятий, присутствия за компьютером, и тому подобное. А кроме того, установка нужного статуса вручную удобна и для ваших собеседников, которым не придется гадать, почему вы не отвечаете на сообщение, и стоит ли вас беспокоить по мелочам.
В принципе, в Джаббере предусмотрена раздельная установка статуса для любого собеседника и чат-комнаты, но, к сожалению, такое поведение не реализовано в актуальных версиях Miranda IM... На практике это выражается в том, что любая смена статуса будет отправлена в чат и появится в логах. В настройках комнаты можно отключить показ статусного сообщения (но не самого статуса) только для visitor-ов, да и то не на всех серверах, а отключить отображение статусов в окне чата можно не во всех клиентах. Поэтому частая смена статуса справедливо называется статус-флудом, и как правило жестко карается модератором...
Тем не менее, это не повод для того, чтобы отказываться от любимого клиента :-) Самое первое, что приходит в голову — это запретить отправку исходящих презенсов в чат в списках приватности. Это работает, но, к сожалению, при таких настройках вы не сможете подключиться к чату, т.к. процесс подключения реализован именно путем отправки презенса в комнату. Можно, конечно, активировать должным образом настроенный список приватности уже после подключения, но это слишком неудобно и муторно.
Посмотрим же повнимательнее на XEP-0016, описывающий privacy-листы. В качестве возможных значений для блокируемого JID-а предусмотрены 4 варианта:
user@domain/resource (только этот ресурс данного пользователя) user@domain (любой ресурс) domain/resource (только этот ресурс любого пользователя) domain (любые пользователи и ресурсы с этого домена или поддомена)Применительно к чатам ресурс — это ваш ник в чате. Если посмотреть повнимательнее через XML-консоль на процесс подключения, станет видно, что при подключении презенс отправляется на JID вида conference_name@conference_server/your_nick, в то время как при смене статуса Миранда посылает презенс на JID conference_name@conference_server. Этой особенностью мы и воспользуемся :-)
Итак, для того, чтобы запретить отправку статусов в конференцию, но сохранить при этом возможность свободно входить и выходить из нее, нужно сделать следующее:
Добавить в верхнюю строку списка приватности правило для конференция@сервер/ваш_ник со значением «Разрешить всё» («Allow all», или «Allow» при всех установленных галочках, если речь идет о Миранде); Добавить следущей строкой правило для конференция@сервер со значением «Запретить исходящие презенсы» («Deny» и «Presence-out» соответственно); Повторить эти действия для всех конференций, которых находятся у вас в закладках. Главное — не забыть, чтобы разрешающее правило имело больший приоритет, нежели запрещающее.После того, как вы выполните все вышеописанные действия, заходить в настроенные конференции вы будете с тем статусом, который был установлен в тот момент, а все последующие смены в конференции не отразятся. Для прочих конференций ничего не изменится. Главное — не забыть, что при смене ника нужно будет отредактировать списки приватности!
ЗЫ: Jabber foreva, Miranda rulez-z-z-z!!!
No comments:
Post a Comment