如何获取ejabberd/XMPP中所有在线用户的列表?

4

假设我是管理员,XEP-133无法使用且不在用户的花名册中,我如何获取所有在线XMPP用户的列表?

1个回答

4

XEP-133中的大多数命令与ejabberd兼容。

您确实是对的,有一些特定的命令不起作用,包括获取在线用户:但我发现ejabberd有一些非标准的替代方法:

如果在主机上运行disco#items,您会得到一些有趣的项目可以查询:

<iq to="localhost" type="get" id="123">
    <query xmlns='http://jabber.org/protocol/disco#items' />
</iq>


<iq from="localhost" type="result" to="admin@localhost/jarnas" id="123">
    <query xmlns="http://jabber.org/protocol/disco#items">
        <item jid="conference.localhost" />
        <item jid="pubsub.localhost" />
        <item jid="riot.localhost" />
        <item jid="vjud.localhost" />
        <item node="announce" name="Announcements" jid="localhost" />
        <item node="config" name="Configuration" jid="localhost" />
        <item node="user" name="User Management" jid="localhost" />
        <item node="online users" name="Online Users" jid="localhost" />
        <item node="all users" name="All Users" jid="localhost" />
        <item node="outgoing s2s" name="Outgoing s2s Connections" jid="localhost" />
        <item node="running nodes" name="Running Nodes" jid="localhost" />
        <item node="stopped nodes" name="Stopped Nodes" jid="localhost" />
    </query>
</iq>

现在,在您的情况下,您需要“在线用户”功能,因此:
<iq to="localhost" type="get" id="234">
    <query xmlns='http://jabber.org/protocol/disco#items' node="online users"/>
</iq>

<iq from="localhost" type="result" to="admin@localhost/jarnas" id="234" >
    <query xmlns="http://jabber.org/protocol/disco#items" node="online users" >
        <item name="admin@localhost" jid="admin@localhost/auto-CdB67NUOie" />
        <item name="admin@localhost" jid="admin@localhost/jarnas" />
    </query>
</iq>

会像魔法一样运作得很好 ;)

嗯,承诺明天看一下。这张票已经很旧了,但我至少可以确定你可以获取已注册用户的列表,因为我在一个项目中正在这样做。我会回来的! - ggozad
非常感谢!:) 不幸的是,我的项目必须使用PHP :( 而且截止日期是周六 :( (我已经试图解决这个问题超过一周了)。 - user766987
这就是使用ejabberd的非标准方法来完成它的方式! - ggozad
如果请求用户是管理员,这个很好用。我能否在某处更改此查询请求的权限?也许在ejabberd.cfg文件中? - Mark Molina
@MarkMolina 我不这么认为。你不应该能够这样做。 - ggozad
这是一个非常好的解决方案,但您能否将此XML转换为Ruby代码? - Jigar Bhatt

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