微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过 api

如何解决如何通过 api

什么命令有助于通过 ejabberd rest-api 做到这一点? 从 xmpp-client 日志发送这样的命令:

<iq id="60fe7dd6-82c3-49de-a5a1-f1f71bce6e92" to="chat_room@conference.example.com" type="set">
    <query xmlns="http://jabber.org/protocol/muc#admin">
        <item nick="user_block@example.com" role="visitor"/>
    </query>
</iq>

Ejabberd 版本是 20.xx。我想说这个机会在连接到我们的 ejabberd 服务的 swift 客户端上非常有用。只需单击“撤销语音”,该用户就会成为“访客”并且无法发送消息。 但我什至无法通过 xmpp 客户端 smack sdk 做到这一点:

XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.setXmppAddressAndPassword(JidCreate.entityBareFrom("user1@example.com"),"123")
.setHost("example.com")
.setPort(5222)
.build();
AbstractXMPPConnection connection = new XMPPTCPConnection(config);
connection.connect();
connection.login();
MultiUserChatManager mucmanager = MultiUserChatManager.getInstanceFor(connection);
MultiUserChat muc = mucmanager.getMultiUserChat(JidCreate.entityBareFrom("chat_room@conference.example.com"));
muc.revokeVoice(Resourcepart.from("User2"));

尝试后出现异常:

org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPP error reply received from chat_room@conference.example.com: XMPPError: not-allowed - cancel [Changing role/affiliation is not allowed]

但“user1@example.com”具有管理员权限,房间“chat_room@conference.example.com”的“审核”选项为true。

有谁知道如何通过 api 做到这一点,例如通过 send_stanza?

解决方法

<item nick="user_block@example.com" role="visitor"/>

你确定这有效吗?这告诉 ejabberd 撤销语音的昵称是“user_block@example.com”,但这不是昵称,而是用户 JID。这怎么行?

中的例子 https://xmpp.org/extensions/xep-0045.html#revokevoice 显示 te nick 是...一个昵称:

<item nick='thirdwitch' role='visitor'/>


我尝试使用桌面 Jabber 客户端 Tkabber,它会在昵称字段中发送占用者的昵称。

当我在 nick 字段中发送占用者 JID 时,我收到与您提到的相同的错误消息。

我不知道您使用的库和语言,但这闻起来不对:

muc.revokeVoice(Resourcepart.from("User2"));

我想在这里您必须提供占用者的昵称,这可能不是占用者 JID 的资源部分。


例如,当我的客户加入房间时,它发送此节:

<presence id='71:576798'
    from='user2@example.com/tka1'
    to='chat_room@conference.example.com/troller'>
  <show>xa</show>
  <status>Busysss</status>
</presence>

占用者完整 JID:“user2@example.com/tka1”,其资源为:“tka1”,并以昵称“troller”加入房间。

在这个例子中,当房间管理员想要撤消对该占用者的语音时,管理员客户端必须发送:

<iq id='50:565577'
    type='set'
    to='chat_room@conference.example.com'>
  <query xmlns='http://jabber.org/protocol/muc#admin'>
    <item nick='troller'
    role='visitor'/>
  </query>
</iq>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。