~singpolyma/biboumi

0bb7ee0127a625ca8b6c25d9f593bfaa3d5af84b — Florent Le Coz 10 years ago af4fc92
Handle IRC QUIT command
2 files changed, 28 insertions(+), 0 deletions(-)

M src/irc/irc_client.cpp
M src/irc/irc_client.hpp
M src/irc/irc_client.cpp => src/irc/irc_client.cpp +24 -0
@@ 89,6 89,8 @@ void IrcClient::parse_in_buffer()
        this->on_welcome_message(message);
      else if (message.command == "PART")
        this->on_part(message);
      else if (message.command == "QUIT")
        this->on_quit(message);
    }
}



@@ 257,3 259,25 @@ void IrcClient::on_part(const IrcMessage& message)
        channel->joined = false;
    }
}

void IrcClient::on_quit(const IrcMessage& message)
{
  std::string txt;
  if (message.arguments.size() >= 1)
    txt = message.arguments[0];
  for (auto it = this->channels.begin(); it != this->channels.end(); ++it)
    {
      const std::string chan_name = it->first;
      IrcChannel* channel = it->second.get();
      const IrcUser* user = channel->find_user(message.prefix);
      if (user)
        {
          std::string nick = user->nick;
          channel->remove_user(user);
          Iid iid;
          iid.chan = chan_name;
          iid.server = this->hostname;
          this->bridge->send_muc_leave(std::move(iid), std::move(nick), std::move(txt), false);
        }
    }
}

M src/irc/irc_client.hpp => src/irc/irc_client.hpp +4 -0
@@ 114,6 114,10 @@ public:
   * When a PART message is received
   */
  void on_part(const IrcMessage& message);
  /**
   * When a QUIT message is received
   */
  void on_quit(const IrcMessage& message);

private:
  /**