发现MUC房间的成员作为占用者

GJa*_*ain 8 xmpp ejabberd xmppframework multiuserchat

作为一名乘员/成员,我需要通过ejabberd-14.x了解房间内的所有"成员"

我关注了http://xmpp.org/extensions/xep-0045.html#getmemberlist

我被禁止(401)跟随stanze - 需要管理员权限

<iq from='crone1@shakespeare.lit/desktop'
    id='member3'
    to='coven@chat.shakespeare.lit'
    type='get'>
  <query xmlns='http://jabber.org/protocol/muc#admin'>
    <item affiliation='member'/>
  </query>
</iq>
Run Code Online (Sandbox Code Playgroud)

如果我改变

<query xmlns='http://jabber.org/protocol/muc#admin'> 
Run Code Online (Sandbox Code Playgroud)

从admin到用户命名空间,然后我得到状态代码501 - 功能未实现

你知道我怎样才能让一个房间的成员成为一个占有者或成员?

我不是此用例的管理员/主持人.

XEP-0045确实说:

注意:服务应该也应该将成员列表返回给仅限会员的房间中的任何占用者; 也就是说,当房间中的成员请求成员列表时,它不应该生成错误.此功能可以帮助客户显示所有现有成员,即使其中一些成员不在会议室中,例如帮助成员确定是否应邀请其他用户.服务应该允许任何成员检索成员列表,即使还不是占用者.

Chr*_*hka 1

您自己至少需要成为会员才能访问附属列表。您当前是否是居住者(即在房间内)并不重要。

请注意,从属关系(例如“成员”)是一种持久设置,需要明确指定给人员,否则默认为“无”。在普通的不受限制的房间中,此设置除了允许您检索成员列表之外没有任何其他作用。成员列表与占用者列表无关。

(如果您只想知道当前谁在房间中,则应该发送带有名称空间http://jabber.org/protocol/disco#items而不是 的查询muc#admin。)

示例(刚刚在我的 ejabberd 服务器上尝试过)。尝试使用非关联帐户查询列表:

<iq from='crone1@shakespeare.lit/desktop'
    id='member3'
    to='coven@chat.shakespeare.lit'
    type='get'>
  <query xmlns='http://jabber.org/protocol/muc#admin'>
    <item affiliation='member'/>
  </query>
</iq>
<iq from='coven@chat.shakespeare.lit'
    to='crone1@shakespeare.lit/desktop'
    type='error'
    id='member3'>
  <query xmlns='http://jabber.org/protocol/muc#admin'>
    <item affiliation='member'/>
  </query>
  <error code='403' type='auth'>
    <forbidden/>
    <text>Administrator privileges required</text>
  </error>
</iq>
Run Code Online (Sandbox Code Playgroud)

使用特权(房间所有者)帐户授予第一个帐户成员权限:

<iq from='admin@shakespeare.lit/desktop'
    type='set'
    to='coven@chat.shakespeare.lit'
    id='member4'>
  <query xmlns='http://jabber.org/protocol/muc#admin'>
    <item jid='crone1@shakespeare.lit' affiliation='member'/>
  </query>
</iq>

<iq to='admin@shakespeare.lit/desktop'
    from='coven@chat.shakespeare.lit'
    type='result' id='member4'/>
Run Code Online (Sandbox Code Playgroud)

再试一次:

<iq from='crone1@shakespeare.lit/desktop' 
    type='get'
    to='coven@chat.shakespeare.lit'
    id='member5'>
  <query xmlns='http://jabber.org/protocol/muc#admin'>
    <item affiliation='member'/>
  </query>
</iq>

<iq to='crone1@shakespeare.lit/desktop'
    from='coven@chat.shakespeare.lit'
    type='result'
    id='member5'>
  <query xmlns='http://jabber.org/protocol/muc#admin'>
    <item jid='crone1@shakespeare.lit' affiliation='member'/>
  </query>
</iq>
Run Code Online (Sandbox Code Playgroud)