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

时间:2014-12-10 04:50:11

标签: 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>

如果我改变

<query xmlns='http://jabber.org/protocol/muc#admin'> 

从管理员到用户名称空间,然后我得到状态代码501 - 功能未实现

您是否知道如何让房间成员成为居住者或成员?

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

XEP-0045确实说:

  

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

1 个答案:

答案 0 :(得分:0)

您需要自己至少成为会员才能访问联盟列表。无论您目前是否是占用者(即在房间内)都无关紧要。

请注意,从属关系(例如“成员”)是需要明确授予人员的持久性设置,否则默认为“无”。在正常的无限制房间this setting doesn't have any other effect than allowing you to retrieve the member list。成员列表与占用者列表无关。

(如果您只想知道当前在会议室中的人员,则应发送包含名称空间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>

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

<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'/>

再试一次:

<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>