Если пользователь забанен в muc (через xep-0045) и имеет подписку (через mucsub), события pubsub по-прежнему доступны из этой комнаты muc.И если пользователь, у которого есть подписка на комнату muc, забанен в этой комнате muc, и через некоторое время пользователь отписывается от этой комнаты, в то время как владелец решает установить принадлежность к outcast ни к какому (удаляет бан) ответы сервера. Псевдоним 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,
, он удаляет подписку пользователя, но когда владельцы хотят снять бан, как я сказал, сервер отвечает "Ник не существует в комнате"