plugin XEP-0045: various fixes/improvments:
- use self.txt_cmds instead of self.host.plugins["XEP-0045"]
- nick and options in join have now default values
- directly raise ConflictError when room is already joined instead of using defer.fail
- removed self.host.getClient where it's now useless because client is used instead of profile
This commit is contained in:
parent
bd46cb609e
commit
3b49db2892
1 changed files with 20 additions and 18 deletions
|
|
@ -84,12 +84,12 @@ class XEP_0045(object):
|
|||
self.__submit_conf_id = host.registerCallback(self._submitConfiguration, with_data=True)
|
||||
host.importMenu((D_("MUC"), D_("configure")), self._configureRoomMenu, security_limit=0, help_string=D_("Configure Multi-User Chat room"), type_=C.MENU_ROOM)
|
||||
try:
|
||||
txt_cmds = self.host.plugins[C.TEXT_CMDS]
|
||||
self.txt_cmds = self.host.plugins[C.TEXT_CMDS]
|
||||
except KeyError:
|
||||
log.info(_(u"Text commands not available"))
|
||||
else:
|
||||
txt_cmds.registerTextCommands(self)
|
||||
txt_cmds.addWhoIsCb(self._whois, 100)
|
||||
self.txt_cmds.registerTextCommands(self)
|
||||
self.txt_cmds.addWhoIsCb(self._whois, 100)
|
||||
|
||||
host.trigger.add("presence_available", self.presenceTrigger)
|
||||
host.trigger.add("MessageReceived", self.MessageReceivedTrigger, priority=1000000)
|
||||
|
|
@ -376,10 +376,8 @@ class XEP_0045(object):
|
|||
@return: unicode (the room bare)
|
||||
"""
|
||||
client = self.host.getClient(profile_key)
|
||||
if options is None:
|
||||
options = {}
|
||||
if room_jid_s:
|
||||
muc_service = self.host.getClient(client.profile).muc_service
|
||||
muc_service = client.muc_service
|
||||
try:
|
||||
room_jid = jid.JID(room_jid_s)
|
||||
except (RuntimeError, jid.InvalidFormat, AttributeError):
|
||||
|
|
@ -392,7 +390,11 @@ class XEP_0045(object):
|
|||
d = self.join(client, room_jid, nick, options)
|
||||
return d.addCallback(lambda room: room.roomJID.userhost())
|
||||
|
||||
def join(self, client, room_jid, nick, options):
|
||||
def join(self, client, room_jid, nick=None, options=None):
|
||||
if not nick:
|
||||
nick = client.jid.user
|
||||
if options is None:
|
||||
options = {}
|
||||
def _errDeferred(exc_obj=Exception, txt=u'Error while joining room'):
|
||||
d = defer.Deferred()
|
||||
d.errback(exc_obj(txt))
|
||||
|
|
@ -400,7 +402,7 @@ class XEP_0045(object):
|
|||
|
||||
if room_jid in client._muc_client.joined_rooms:
|
||||
log.warning(_(u'{profile} is already in room {room_jid}').format(profile=client.profile, room_jid = room_jid.userhost()))
|
||||
return defer.fail(exceptions.ConflictError(_(u"The room has already been joined")))
|
||||
raise failure.Failure(exceptions.ConflictError(_(u"The room has already been joined")))
|
||||
log.info(_(u"[{profile}] is joining room {room} with nick {nick}").format(profile=client.profile, room=room_jid.userhost(), nick=nick))
|
||||
|
||||
password = options["password"] if "password" in options else None
|
||||
|
|
@ -496,9 +498,9 @@ class XEP_0045(object):
|
|||
- JID: room to join (on the same service if full jid is not specified)
|
||||
"""
|
||||
if mess_data["unparsed"].strip():
|
||||
room_jid = self.host.plugins[C.TEXT_CMDS].getRoomJID(mess_data["unparsed"].strip(), mess_data["to"].host)
|
||||
room_jid = self.text_cmds.getRoomJID(mess_data["unparsed"].strip(), mess_data["to"].host)
|
||||
nick = (self.getRoomNick(client, room_jid) or
|
||||
self.host.getClient(client.profile).jid.user)
|
||||
client.jid.user)
|
||||
self.join(client, room_jid, nick, {})
|
||||
|
||||
return False
|
||||
|
|
@ -510,7 +512,7 @@ class XEP_0045(object):
|
|||
- ROOM_JID: jid of the room to live (current room if not specified)
|
||||
"""
|
||||
if mess_data["unparsed"].strip():
|
||||
room = self.host.plugins[C.TEXT_CMDS].getRoomJID(mess_data["unparsed"].strip(), mess_data["to"].host)
|
||||
room = self.text_cmds.getRoomJID(mess_data["unparsed"].strip(), mess_data["to"].host)
|
||||
else:
|
||||
room = mess_data["to"]
|
||||
|
||||
|
|
@ -538,7 +540,7 @@ class XEP_0045(object):
|
|||
assert self.isNickInRoom(client, mess_data["to"], nick)
|
||||
except (IndexError, AssertionError):
|
||||
feedback = _(u"You must provide a member's nick to kick.")
|
||||
self.host.plugins[C.TEXT_CMDS].feedBack(client, feedback, mess_data)
|
||||
self.text_cmds.feedBack(client, feedback, mess_data)
|
||||
return False
|
||||
|
||||
d = self.kick(client, nick, mess_data["to"], {} if len(options) == 1 else {'reason': options[1]})
|
||||
|
|
@ -547,7 +549,7 @@ class XEP_0045(object):
|
|||
feedback_msg = _(u'You have kicked {}').format(nick)
|
||||
if len(options) > 1:
|
||||
feedback_msg += _(u' for the following reason: {}').format(options[1])
|
||||
self.host.plugins[C.TEXT_CMDS].feedBack(client, feedback_msg, mess_data)
|
||||
self.text_cmds.feedBack(client, feedback_msg, mess_data)
|
||||
return True
|
||||
d.addCallback(cb)
|
||||
return d
|
||||
|
|
@ -567,7 +569,7 @@ class XEP_0045(object):
|
|||
assert(entity_jid.host)
|
||||
except (RuntimeError, jid.InvalidFormat, AttributeError, IndexError, AssertionError):
|
||||
feedback = _(u"You must provide a valid JID to ban, like in '/ban contact@example.net'")
|
||||
self.host.plugins[C.TEXT_CMDS].feedBack(client, feedback, mess_data)
|
||||
self.text_cmds.feedBack(client, feedback, mess_data)
|
||||
return False
|
||||
|
||||
d = self.ban(client, entity_jid, mess_data["to"], {} if len(options) == 1 else {'reason': options[1]})
|
||||
|
|
@ -576,7 +578,7 @@ class XEP_0045(object):
|
|||
feedback_msg = _(u'You have banned {}').format(entity_jid)
|
||||
if len(options) > 1:
|
||||
feedback_msg += _(u' for the following reason: {}').format(options[1])
|
||||
self.host.plugins[C.TEXT_CMDS].feedBack(client, feedback_msg, mess_data)
|
||||
self.text_cmds.feedBack(client, feedback_msg, mess_data)
|
||||
return True
|
||||
d.addCallback(cb)
|
||||
return d
|
||||
|
|
@ -600,20 +602,20 @@ class XEP_0045(object):
|
|||
assert(entity_jid.host)
|
||||
except (RuntimeError, jid.InvalidFormat, AttributeError, IndexError, AssertionError):
|
||||
feedback = _(u"You must provide a valid JID to affiliate, like in '/affiliate contact@example.net member'")
|
||||
self.host.plugins[C.TEXT_CMDS].feedBack(client, feedback, mess_data)
|
||||
self.text_cmds.feedBack(client, feedback, mess_data)
|
||||
return False
|
||||
|
||||
affiliation = options[1] if len(options) > 1 else 'none'
|
||||
if affiliation not in AFFILIATIONS:
|
||||
feedback = _(u"You must provide a valid affiliation: %s") % ' '.join(AFFILIATIONS)
|
||||
self.host.plugins[C.TEXT_CMDS].feedBack(client, feedback, mess_data)
|
||||
self.text_cmds.feedBack(client, feedback, mess_data)
|
||||
return False
|
||||
|
||||
d = self.affiliate(client, entity_jid, mess_data["to"], {'affiliation': affiliation})
|
||||
|
||||
def cb(dummy):
|
||||
feedback_msg = _(u'New affiliation for %(entity)s: %(affiliation)s').format(entity=entity_jid, affiliation=affiliation)
|
||||
self.host.plugins[C.TEXT_CMDS].feedBack(client, feedback_msg, mess_data)
|
||||
self.text_cmds.feedBack(client, feedback_msg, mess_data)
|
||||
return True
|
||||
d.addCallback(cb)
|
||||
return d
|
||||
|
|
|
|||
Loading…
Reference in a new issue