在MUC聊天室中发现成员身份作为占用者

8
作为房间的占用者/成员,我需要知道使用ejabberd-14.x时房间内所有的“成员”。
我按照http://xmpp.org/extensions/xep-0045.html#getmemberlist的指示进行了操作。
但是我得到了被禁止的信息(401)并显示需要管理员权限。
<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个回答

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>

使用特权(房间所有者)账户授予第一个账户成员特权:
<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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接