# HG changeset patch # User Goffi # Date 1348699903 -7200 # Node ID 2402668b5d05615f2e497730adb17c237d24a7e2 # Parent 65ecbb473cbb50892cef906bd82b0fe60f006377 plugin xep-0045: nick change management diff -r 65ecbb473cbb -r 2402668b5d05 src/plugins/plugin_xep_0045.py --- a/src/plugins/plugin_xep_0045.py Wed Sep 26 01:23:56 2012 +0200 +++ b/src/plugins/plugin_xep_0045.py Thu Sep 27 00:51:43 2012 +0200 @@ -25,6 +25,9 @@ from twisted.words.protocols.jabber import client, jid, xmlstream from twisted.words.protocols.jabber import error as jab_error from twisted.words.protocols.jabber.xmlstream import IQ + +from sat.core import exceptions + import os.path import uuid @@ -52,6 +55,9 @@ "description": _("""Implementation of Multi-User Chat""") } +class UnknownRoom(Exception): + pass + class XEP_0045(): def __init__(self, host): @@ -59,6 +65,7 @@ self.host = host self.clients={} host.bridge.addMethod("joinMUC", ".plugin", in_sign='ssa{ss}s', out_sign='', method=self._join) + host.bridge.addMethod("changeNick", ".plugin", in_sign='sss', out_sign='', method=self.changeNick) host.bridge.addMethod("getRoomsJoined", ".plugin", in_sign='s', out_sign='a(sass)', method=self.getRoomsJoined) host.bridge.addMethod("getRoomsSubjects", ".plugin", in_sign='s', out_sign='a(ss)', method=self.getRoomsSubjects) host.bridge.addMethod("getUniqueRoomName", ".plugin", in_sign='s', out_sign='s', method=self.getUniqueName) @@ -171,7 +178,19 @@ return d = self.join(room_jid, nick, options, profile) d.addErrback(lambda x: warning(_('Error while joining room'))) #TODO: error management + signal in bridge - + + def nick(self, room_jid, nick, profile_key='@DEFAULT@'): + profile = self.host.memory.getProfileName(profile_key) + if not self.__check_profile(profile): + raise exceptions.UnknownProfileError("Unknown or disconnected profile") + if not self.clients[profile].joined_rooms.has_key(room_jid.userhost()): + raise UnknownRoom("This room has not been joined") + return self.clients[profile].nick(room_jid, nick) + + def changeNick(self, room_jid_s, nick, profile_key='@DEFAULT@'): + """Change nickname in a room""" + return self.nick(jid.JID(room_jid_s), nick, profile_key) + def getHandler(self, profile): self.clients[profile] = SatMUCClient(self) return self.clients[profile]