Commit 3620d533 authored by louiz’'s avatar louiz’

Avoid sending PART command for unjoined channels

fix #3205
parent 55daa3e6
......@@ -359,8 +359,16 @@ void Bridge::leave_irc_channel(Iid&& iid, const std::string& status_message, con
const auto resources = this->number_of_resources_in_chan(key);
if (resources == 1)
// Do not send a PART message if we actually are not in that channel
// or if we already sent a PART but we are just waiting for the
// acknowledgment from the server
IrcChannel* channel = irc->get_channel(iid.get_local());
if (channel->joined && !channel->parting)
irc->send_part_command(iid.get_local(), status_message);
channel->parting = true;
// Since there are no resources left in that channel, we don't
// want to receive private messages using this room's JID
#include <irc/irc_channel.hpp>
#include <algorithm>
void IrcChannel::set_self(const std::string& name)
this->self = std::make_unique<IrcUser>(name);
......@@ -14,16 +14,19 @@
class IrcChannel
explicit IrcChannel();
IrcChannel() = default;
IrcChannel(const IrcChannel&) = delete;
IrcChannel(IrcChannel&&) = delete;
IrcChannel& operator=(const IrcChannel&) = delete;
IrcChannel& operator=(IrcChannel&&) = delete;
bool joined;
std::string topic;
std::string topic_author;
bool joined{false};
// Set to true if we sent a PART but didn’t yet receive the PART ack from
// the server
bool parting{false};
std::string topic{};
std::string topic_author{};
void set_self(const std::string& name);
IrcUser* get_self() const;
IrcUser* add_user(const std::string& name,
......@@ -35,8 +38,8 @@ public:
{ return this->users; }
std::unique_ptr<IrcUser> self;
std::vector<std::unique_ptr<IrcUser>> users;
std::unique_ptr<IrcUser> self{};
std::vector<std::unique_ptr<IrcUser>> users{};
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment