~singpolyma/biboumi

b8ce9ed43d809daefe17714b36aa0874ca5f6cc8 — Florent Le Coz 10 years ago 3afb63a
Check that channels are joined before acting on objects in it
1 files changed, 6 insertions(+), 0 deletions(-)

M src/irc/irc_client.cpp
M src/irc/irc_client.cpp => src/irc/irc_client.cpp +6 -0
@@ 297,6 297,8 @@ void IrcClient::on_part(const IrcMessage& message)
{
  const std::string chan_name = utils::tolower(message.arguments[0]);
  IrcChannel* channel = this->get_channel(chan_name);
  if (!channel->joined)
    return ;
  std::string txt;
  if (message.arguments.size() >= 2)
    txt = message.arguments[1];


@@ 325,6 327,8 @@ void IrcClient::on_error(const IrcMessage& message)
    iid.chan = it->first;
    iid.server = this->hostname;
    IrcChannel* channel = it->second.get();
    if (!channel->joined)
      continue;
    std::string own_nick = channel->get_self()->nick;
    this->bridge->send_muc_leave(std::move(iid), std::move(own_nick), leave_message, true);
  }


@@ 384,6 388,8 @@ void IrcClient::on_kick(const IrcMessage& message)
  const std::string reason = message.arguments[2];
  const std::string chan_name = utils::tolower(message.arguments[0]);
  IrcChannel* channel = this->get_channel(chan_name);
  if (!channel->joined)
    return ;
  if (channel->get_self()->nick == target)
    channel->joined = false;
  IrcUser author(message.prefix);