Handle IRC QUIT command
This commit is contained in:
@@ -89,6 +89,8 @@ void IrcClient::parse_in_buffer()
|
|||||||
this->on_welcome_message(message);
|
this->on_welcome_message(message);
|
||||||
else if (message.command == "PART")
|
else if (message.command == "PART")
|
||||||
this->on_part(message);
|
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;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -114,6 +114,10 @@ public:
|
|||||||
* When a PART message is received
|
* When a PART message is received
|
||||||
*/
|
*/
|
||||||
void on_part(const IrcMessage& message);
|
void on_part(const IrcMessage& message);
|
||||||
|
/**
|
||||||
|
* When a QUIT message is received
|
||||||
|
*/
|
||||||
|
void on_quit(const IrcMessage& message);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user