Consider the nick change only if it is NOT a join
This commit is contained in:
@@ -159,18 +159,6 @@ void BiboumiComponent::handle_presence(const Stanza& stanza)
|
||||
const std::string own_nick = bridge->get_own_nick(iid);
|
||||
const XmlNode* x = stanza.get_child("x", MUC_NS);
|
||||
const IrcClient* irc = bridge->find_irc_client(iid.get_server());
|
||||
if (irc)
|
||||
{
|
||||
const auto chan = irc->find_channel(iid.get_local());
|
||||
if (chan->joined)
|
||||
bridge->send_irc_nick_change(iid, to.resource, from.resource);
|
||||
else if (!x)
|
||||
{ // send an error if we are not joined yet, instead of treating it as a join
|
||||
this->send_stanza_error("presence", from_str, to_str, id,
|
||||
"modify", "not-acceptable",
|
||||
"You are not joined to this MUC.");
|
||||
}
|
||||
}
|
||||
// if there is no <x/>, this is a presence status update, we don’t care about those
|
||||
if (x)
|
||||
{
|
||||
@@ -202,6 +190,19 @@ void BiboumiComponent::handle_presence(const Stanza& stanza)
|
||||
bridge->join_irc_channel(iid, to.resource, password ? password->get_inner(): "",
|
||||
from.resource, history_limit);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (irc)
|
||||
{
|
||||
const auto chan = irc->find_channel(iid.get_local());
|
||||
if (chan && chan->joined)
|
||||
bridge->send_irc_nick_change(iid, to.resource, from.resource);
|
||||
else
|
||||
{ // send an error if we are not joined yet, instead of treating it as a join
|
||||
this->send_stanza_error("presence", from_str, to_str, id, "modify", "not-acceptable", "You are not joined to this MUC.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (type == "unavailable")
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user