Merge branch 'affiliations-list' into 'master'
Fix #2280: Allow /affiliation to list all affiliations Closes #2280 See merge request poezio/poezio!19
This commit is contained in:
commit
1f014b6bfb
1 changed files with 41 additions and 8 deletions
|
@ -7,6 +7,7 @@ It keeps track of many things such as part/joins, maintains an
|
||||||
user list, and updates private tabs when necessary.
|
user list, and updates private tabs when necessary.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import asyncio
|
||||||
import bisect
|
import bisect
|
||||||
import curses
|
import curses
|
||||||
import logging
|
import logging
|
||||||
|
@ -20,6 +21,7 @@ from datetime import datetime
|
||||||
from typing import Dict, Callable, List, Optional, Union, Set
|
from typing import Dict, Callable, List, Optional, Union, Set
|
||||||
|
|
||||||
from slixmpp import InvalidJID, JID
|
from slixmpp import InvalidJID, JID
|
||||||
|
from slixmpp.exceptions import IqError, IqTimeout
|
||||||
from poezio.tabs import ChatTab, Tab, SHOW_NAME
|
from poezio.tabs import ChatTab, Tab, SHOW_NAME
|
||||||
|
|
||||||
from poezio import common
|
from poezio import common
|
||||||
|
@ -1596,24 +1598,55 @@ class MucTab(ChatTab):
|
||||||
nick, role, reason = args[0], args[1].lower(), args[2]
|
nick, role, reason = args[0], args[1].lower(), args[2]
|
||||||
self.change_role(nick, role, reason)
|
self.change_role(nick, role, reason)
|
||||||
|
|
||||||
@command_args_parser.quoted(2)
|
@command_args_parser.quoted(0, 2)
|
||||||
def command_affiliation(self, args):
|
def command_affiliation(self, args) -> None:
|
||||||
"""
|
"""
|
||||||
/affiliation <nick or jid> <affiliation>
|
/affiliation [<nick or jid> [<affiliation>]]
|
||||||
Changes the affiliation of a user
|
Changes the affiliation of a user
|
||||||
affiliations can be: outcast, none, member, admin, owner
|
affiliations can be: outcast, none, member, admin, owner
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def callback(iq):
|
room = JID(self.name)
|
||||||
if iq['type'] == 'error':
|
if not room:
|
||||||
self.core.room_error(iq, self.jid.bare)
|
self.core.information('affiliation: requires a valid chat address', 'Error')
|
||||||
|
return
|
||||||
|
|
||||||
if args is None:
|
# List affiliations
|
||||||
|
if not args:
|
||||||
|
asyncio.ensure_future(self.get_users_affiliations(room))
|
||||||
|
return None
|
||||||
|
|
||||||
|
if len(args) != 2:
|
||||||
return self.core.command.help('affiliation')
|
return self.core.command.help('affiliation')
|
||||||
|
|
||||||
nick, affiliation = args[0], args[1].lower()
|
nick, affiliation = args[0], args[1].lower()
|
||||||
|
# Set affiliation
|
||||||
self.change_affiliation(nick, affiliation)
|
self.change_affiliation(nick, affiliation)
|
||||||
|
|
||||||
|
async def get_users_affiliations(self, jid: JID) -> None:
|
||||||
|
MUC_ADMIN_NS = 'http://jabber.org/protocol/muc#admin'
|
||||||
|
|
||||||
|
try:
|
||||||
|
iqs = await asyncio.gather(
|
||||||
|
self.core.xmpp['xep_0045'].get_users_by_affiliation(jid, 'owner'),
|
||||||
|
self.core.xmpp['xep_0045'].get_users_by_affiliation(jid, 'admin'),
|
||||||
|
self.core.xmpp['xep_0045'].get_users_by_affiliation(jid, 'member'),
|
||||||
|
self.core.xmpp['xep_0045'].get_users_by_affiliation(jid, 'outcast'),
|
||||||
|
)
|
||||||
|
except (IqError, IqTimeout) as exn:
|
||||||
|
self.core.room_error(exn.iq, jid)
|
||||||
|
return None
|
||||||
|
|
||||||
|
self._text_buffer.add_message('Affiliations:')
|
||||||
|
for iq in iqs:
|
||||||
|
query = iq.xml.find('{%s}query' % MUC_ADMIN_NS)
|
||||||
|
for item in query.findall('{%s}item' % MUC_ADMIN_NS):
|
||||||
|
self._text_buffer.add_message(
|
||||||
|
'%s: %s' % (item.get('jid'), item.get('affiliation'))
|
||||||
|
)
|
||||||
|
self.core.refresh_window()
|
||||||
|
return None
|
||||||
|
|
||||||
@command_args_parser.raw
|
@command_args_parser.raw
|
||||||
def command_say(self, line, correct=False):
|
def command_say(self, line, correct=False):
|
||||||
"""
|
"""
|
||||||
|
@ -1936,7 +1969,7 @@ class MucTab(ChatTab):
|
||||||
'func':
|
'func':
|
||||||
self.command_affiliation,
|
self.command_affiliation,
|
||||||
'usage':
|
'usage':
|
||||||
'<nick or jid> <affiliation>',
|
'[<nick or jid> [<affiliation>]]',
|
||||||
'desc': ('Set the affiliation of a user. Affiliations can be:'
|
'desc': ('Set the affiliation of a user. Affiliations can be:'
|
||||||
' outcast, none, member, admin, owner.'),
|
' outcast, none, member, admin, owner.'),
|
||||||
'shortdesc':
|
'shortdesc':
|
||||||
|
|
Loading…
Reference in a new issue