diff options
author | Florent Le Coz <louiz@louiz.org> | 2015-01-24 16:19:13 +0100 |
---|---|---|
committer | Florent Le Coz <louiz@louiz.org> | 2015-01-24 17:33:04 +0100 |
commit | 2c5d3d89b0eb1e6b8d888b4d37ceca6f23c2e314 (patch) | |
tree | 458c2e5c387cbcafee16017c323a7f50557f7db1 /src/xmpp | |
parent | a447214f10e894a7de827c3ff10c185280ed2538 (diff) | |
download | biboumi-2c5d3d89b0eb1e6b8d888b4d37ceca6f23c2e314.tar.gz biboumi-2c5d3d89b0eb1e6b8d888b4d37ceca6f23c2e314.tar.bz2 biboumi-2c5d3d89b0eb1e6b8d888b4d37ceca6f23c2e314.tar.xz biboumi-2c5d3d89b0eb1e6b8d888b4d37ceca6f23c2e314.zip |
Change IRC modes when receiving an affiliation/role change request
fix #2946
Diffstat (limited to 'src/xmpp')
-rw-r--r-- | src/xmpp/xmpp_component.cpp | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/xmpp/xmpp_component.cpp b/src/xmpp/xmpp_component.cpp index c63dc00..0328c78 100644 --- a/src/xmpp/xmpp_component.cpp +++ b/src/xmpp/xmpp_component.cpp @@ -481,14 +481,20 @@ void XmppComponent::handle_iq(const Stanza& stanza) { std::string nick = child->get_tag("nick"); std::string role = child->get_tag("role"); - if (!nick.empty() && role == "none") - { // This is a kick - std::string reason; - XmlNode* reason_el = child->get_child("reason", MUC_ADMIN_NS); - if (reason_el) - reason = reason_el->get_inner(); + std::string affiliation = child->get_tag("affiliation"); + if (!nick.empty()) + { Iid iid(to.local); - bridge->send_irc_kick(iid, nick, reason, id, from); + if (role == "none") + { // This is a kick + std::string reason; + XmlNode* reason_el = child->get_child("reason", MUC_ADMIN_NS); + if (reason_el) + reason = reason_el->get_inner(); + bridge->send_irc_kick(iid, nick, reason, id, from); + } + else + bridge->forward_affiliation_role_change(iid, nick, affiliation, role); stanza_error.disable(); } } |