XMPP:只读多用户聊天

Posted

技术标签:

【中文标题】XMPP:只读多用户聊天【英文标题】:XMPP: Readonly multi user chat 【发布时间】:2015-10-06 09:06:29 【问题描述】:

我想创建 MUC,其中只有 1 个用户(所有者/管理员)可以发送消息。 其他用户应该在没有任何邀请的情况下加入聊天,但只能在只读模式下。 (类似于新闻提要,解析器每 15 分钟将新闻发布到聊天室,任何人都可以加入聊天室并阅读新闻,但没有人可以向此聊天室写信)

我已经试过了:

<field
    var='muc#roomconfig_moderatedroom'>
    <value>1</value>
</field>

但任何用户仍然可以在聊天中写消息。 我试过了:

<field
    var='muc#roomconfig_membersonly'>
    <value>1</value>
</field>

在这种情况下,用户无法加入聊天。

有什么建议吗?

【问题讨论】:

【参考方案1】:

您可以使用房间的语音策略来决定谁可以和谁不能给房间写信。

在您的情况下,您的房间需要两个角色:

访客 参与者

您可以通过将其角色从 参与者 更改为 访问者 来禁用为任何用户编写消息的可能性.

在此处详细了解如何在 XEP-0045 中管理语音:http://xmpp.org/extensions/xep-0045.html#grantvoice

您需要确保您的 XMPP 服务器实现了此扩展。

【讨论】:

嗨@Mark,感谢您的回答。据我了解,默认情况下,所有新成员都会获得参与者状态。他们可以写消息,除非我向服务器发送请求以将他们的角色从参与者更改为访问者。那么我是否需要以某种方式倾听聊天中的新参与者,并在他们加入后立即改变他们的角色? 不正确:“默认情况下,非关联用户以访客身份进入主持房间,并以参与者身份进入开放房间。成员以参与者身份进入房间。管理员或所有者作为主持人进入房间。” 您需要将您的房间设置为openmoderated。您可以通过将muc#roomconfig_moderatedroom 字段值设置为1 并将muc#roomconfig_passwordprotectedroom 字段值设置为0 来执行此操作。 @Mark 是的,我已经尝试创建主持人。但是当我使用新帐户进入房间时,这个新成员立即具有参与者的角色(我不知道为什么)。实际上,我确实希望所有进入我主持房间的人从一开始都是访客。 @Dyrk 好的,我重新阅读了规范。尝试创建一个没有任何成员定义或列入白名单的有节制的、没有密码的、仅限成员的房间。根据 XEP-0045,在这种情况下,非会员居住者应具有访客角色。仅限成员标志由字段 muc#roomconfig_membersonly 定义。

以上是关于XMPP:只读多用户聊天的主要内容,如果未能解决你的问题,请参考以下文章

多用户聊天 XMPP

XMPP Smack 聊天应用程序中的多设备支持

如何在 XMPP 的聊天室中获取用户加入时间

多用户聊天 (MUC) 移动应用程序的最佳方法

如何使用 asmack 在 android 中创建多用户聊天应用程序

在 iPad App 中实现多用户聊天