【问题标题】:mucsub issue when user is banned from muc room当用户被禁止进入 muc 房间时的 mucsub 问题
【发布时间】:2018-11-13 22:28:10
【问题描述】:

如果用户被禁止使用 muc(通过 xep-0045)并订阅了(通过 mucsub),则该 muc 房间仍然可以使用 pubsub 事件。如果订阅了 muc 房间的用户被禁止进入该 muc 房间,并且在一段时间后用户取消订阅该房间,同时所有者决定将隶属关系从 outcast 设置为 none(删除禁令)服务器回复昵称 x 不存在于房间中。这是因为用户退订了房间。

我修改了 mod_muc_room.erl 中的代码

在 process_item_change/3 case 子句中添加了这部分代码

{JID, affiliation, outcast, Reason} ->
LBareJID = jid:tolower(jid:remove_resource(JID)),
case ?DICT:find(LBareJID, SD#state.subscribers) of
    {ok, #subscriber{nick = Nick}} ->
        Nicks = ?DICT:erase(Nick, SD#state.subscriber_nicks),
        Subscribers = ?DICT:erase(LBareJID, SD#state.subscribers),
        NewSD = SD#state{subscribers = Subscribers,
                        subscriber_nicks = Nicks},
        store_room(NewSD, [{del_subscription, LBareJID}]),
        send_subscriptions_change_notifications(JID, Nick, unsubscribe, NewSD);
    _ ->
        NewSD = SD,
        ok
end,

它删除了用户订阅,但是当所有者想要删除禁令时,正如我所说,服务器回复“房间中不存在昵称”

【问题讨论】:

    标签: erlang xmpp ejabberd


    【解决方案1】:

    【讨论】:

      猜你喜欢
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 2015-05-17
      • 2019-12-30
      • 2012-10-18
      • 2016-04-09
      • 2011-08-29
      相关资源
      最近更新 更多