Fix #3536: Only use JID in affiliation

add nick if present.
This commit is contained in:
mathieui 2021-02-08 18:33:31 +01:00
parent 6c63cdb509
commit ae0888bd3d

View file

@ -240,7 +240,6 @@ class MucTab(ChatTab):
"""
Change the affiliation of a nick or JID
"""
if not self.joined:
return
@ -250,26 +249,45 @@ class MucTab(ChatTab):
'The affiliation must be one of ' +
', '.join(valid_affiliations), 'Error')
return
if nick_or_jid in [user.nick for user in self.users]:
nick = nick_or_jid
jid = None
else:
nick = None
jid = None
nick = None
for user in self.users:
if user.nick == nick_or_jid:
jid = user.jid
nick = user.nick
break
if jid is None:
try:
jid = JID(nick_or_jid)
except InvalidJID:
self.core.information('Invalid JID or missing occupant: %s' % nick_or_jid, 'Error')
self.core.information(
f'Invalid JID or missing occupant: {nick_or_jid}',
'Error'
)
return
async def do_set_affiliation(room: JID, jid: Optional[JID], nick: Optional[str], affiliation: str, reason: str):
async def do_set_affiliation(room: JID, jid: JID, nick: Optional[str], affiliation: str, reason: str):
try:
await self.core.xmpp['xep_0045'].set_affiliation(room, jid, nick, affiliation=affiliation, reason=reason)
except (IqError, IqTimeout) as e:
await self.core.xmpp['xep_0045'].set_affiliation(
room,
nick=nick,
jid=jid,
affiliation=affiliation,
reason=reason
)
self.core.information(
"Could not set affiliation '%s' for '%s': %s" %
(affiliation, nick_or_jid, e), "Warning")
f"Affiliation of {jid} set to {affiliation} successfully",
"Info"
)
except (IqError, IqTimeout) as exc:
self.core.information(
f"Could not set affiliation '{affiliation}' for '{jid}': {exc}",
"Warning",
)
asyncio.ensure_future(do_set_affiliation(self.jid.bare, jid, nick, affiliation, reason))
asyncio.ensure_future(
do_set_affiliation(self.jid.bare, jid, nick, affiliation, reason)
)
def change_role(self, nick: str, role: str, reason: str = '') -> None:
"""