Include role and affiliation in the join presence of the nick change process
This commit is contained in:
+10
-2
@@ -195,10 +195,18 @@ void Bridge::send_muc_leave(Iid&& iid, std::string&& nick, const std::string& me
|
|||||||
this->xmpp->send_muc_leave(std::move(iid.chan) + "%" + std::move(iid.server), std::move(nick), this->make_xmpp_body(message), this->user_jid, self);
|
this->xmpp->send_muc_leave(std::move(iid.chan) + "%" + std::move(iid.server), std::move(nick), this->make_xmpp_body(message), this->user_jid, self);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bridge::send_nick_change(Iid&& iid, const std::string& old_nick, const std::string& new_nick, const bool self)
|
void Bridge::send_nick_change(Iid&& iid,
|
||||||
|
const std::string& old_nick,
|
||||||
|
const std::string& new_nick,
|
||||||
|
const char user_mode,
|
||||||
|
const bool self)
|
||||||
{
|
{
|
||||||
|
std::string affiliation;
|
||||||
|
std::string role;
|
||||||
|
std::tie(role, affiliation) = get_role_affiliation_from_irc_mode(user_mode);
|
||||||
|
|
||||||
this->xmpp->send_nick_change(std::move(iid.chan) + "%" + std::move(iid.server),
|
this->xmpp->send_nick_change(std::move(iid.chan) + "%" + std::move(iid.server),
|
||||||
old_nick, new_nick, this->user_jid, self);
|
old_nick, new_nick, affiliation, role, this->user_jid, self);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bridge::send_xmpp_message(const std::string& from, const std::string& author, const std::string& msg)
|
void Bridge::send_xmpp_message(const std::string& from, const std::string& author, const std::string& msg)
|
||||||
|
|||||||
@@ -84,9 +84,15 @@ public:
|
|||||||
void send_muc_leave(Iid&& iid, std::string&& nick, const std::string& message, const bool self);
|
void send_muc_leave(Iid&& iid, std::string&& nick, const std::string& message, const bool self);
|
||||||
/**
|
/**
|
||||||
* Send presences to indicate that an user old_nick (ourself if self ==
|
* Send presences to indicate that an user old_nick (ourself if self ==
|
||||||
* true) changed his nick to new_nick
|
* true) changed his nick to new_nick. The user_mode is needed because
|
||||||
|
* the xmpp presence needs ton contain the role and affiliation of the
|
||||||
|
* user.
|
||||||
*/
|
*/
|
||||||
void send_nick_change(Iid&& iid, const std::string& old_nick, const std::string& new_nick, const bool self);
|
void send_nick_change(Iid&& iid,
|
||||||
|
const std::string& old_nick,
|
||||||
|
const std::string& new_nick,
|
||||||
|
const char user_mode,
|
||||||
|
const bool self);
|
||||||
void kick_muc_user(Iid&& iid, const std::string& target, const std::string& reason, const std::string& author);
|
void kick_muc_user(Iid&& iid, const std::string& target, const std::string& reason, const std::string& author);
|
||||||
void send_nickname_conflict_error(const Iid& iid, const std::string& nickname);
|
void send_nickname_conflict_error(const Iid& iid, const std::string& nickname);
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -469,8 +469,9 @@ void IrcClient::on_nick(const IrcMessage& message)
|
|||||||
Iid iid;
|
Iid iid;
|
||||||
iid.chan = chan_name;
|
iid.chan = chan_name;
|
||||||
iid.server = this->hostname;
|
iid.server = this->hostname;
|
||||||
bool self = channel->get_self()->nick == old_nick;
|
const bool self = channel->get_self()->nick == old_nick;
|
||||||
this->bridge->send_nick_change(std::move(iid), old_nick, new_nick, self);
|
const char user_mode = user->get_most_significant_mode(this->sorted_user_modes);
|
||||||
|
this->bridge->send_nick_change(std::move(iid), old_nick, new_nick, user_mode, self);
|
||||||
user->nick = new_nick;
|
user->nick = new_nick;
|
||||||
if (self)
|
if (self)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -413,7 +413,13 @@ void XmppComponent::send_muc_leave(std::string&& muc_name, std::string&& nick, X
|
|||||||
this->send_stanza(presence);
|
this->send_stanza(presence);
|
||||||
}
|
}
|
||||||
|
|
||||||
void XmppComponent::send_nick_change(const std::string& muc_name, const std::string& old_nick, const std::string& new_nick, const std::string& jid_to, const bool self)
|
void XmppComponent::send_nick_change(const std::string& muc_name,
|
||||||
|
const std::string& old_nick,
|
||||||
|
const std::string& new_nick,
|
||||||
|
const std::string& affiliation,
|
||||||
|
const std::string& role,
|
||||||
|
const std::string& jid_to,
|
||||||
|
const bool self)
|
||||||
{
|
{
|
||||||
Stanza presence("presence");
|
Stanza presence("presence");
|
||||||
presence["to"] = jid_to;
|
presence["to"] = jid_to;
|
||||||
@@ -441,7 +447,7 @@ void XmppComponent::send_nick_change(const std::string& muc_name, const std::str
|
|||||||
presence.close();
|
presence.close();
|
||||||
this->send_stanza(presence);
|
this->send_stanza(presence);
|
||||||
|
|
||||||
this->send_user_join(muc_name, new_nick, "", "", "", jid_to, self);
|
this->send_user_join(muc_name, new_nick, "", affiliation, role, jid_to, self);
|
||||||
}
|
}
|
||||||
|
|
||||||
void XmppComponent::kick_user(const std::string& muc_name,
|
void XmppComponent::kick_user(const std::string& muc_name,
|
||||||
|
|||||||
@@ -97,7 +97,13 @@ public:
|
|||||||
/**
|
/**
|
||||||
* Indicate that a participant changed his nick
|
* Indicate that a participant changed his nick
|
||||||
*/
|
*/
|
||||||
void send_nick_change(const std::string& muc_name, const std::string& old_nick, const std::string& new_nick, const std::string& jid_to, const bool self);
|
void send_nick_change(const std::string& muc_name,
|
||||||
|
const std::string& old_nick,
|
||||||
|
const std::string& new_nick,
|
||||||
|
const std::string& affiliation,
|
||||||
|
const std::string& role,
|
||||||
|
const std::string& jid_to,
|
||||||
|
const bool self);
|
||||||
/**
|
/**
|
||||||
* An user is kicked from a room
|
* An user is kicked from a room
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user