diff options
author | louiz’ <louiz@louiz.org> | 2016-12-13 14:48:41 +0100 |
---|---|---|
committer | louiz’ <louiz@louiz.org> | 2016-12-13 14:48:41 +0100 |
commit | 4792c70635cd73d581861a6da9794655a5e72099 (patch) | |
tree | 743dd78258aa2667725bc1e485bcca06bc068e4a /src | |
parent | 2e4a9fe4c78bb45de912d2e5b90106397d59348e (diff) | |
download | biboumi-4792c70635cd73d581861a6da9794655a5e72099.tar.gz biboumi-4792c70635cd73d581861a6da9794655a5e72099.tar.bz2 biboumi-4792c70635cd73d581861a6da9794655a5e72099.tar.xz biboumi-4792c70635cd73d581861a6da9794655a5e72099.zip |
Send a presence error from the room, when receiving command ERR_BADCHANNELKEY
fix #2886
Diffstat (limited to 'src')
-rw-r--r-- | src/irc/irc_client.cpp | 14 | ||||
-rw-r--r-- | src/irc/irc_client.hpp | 1 |
2 files changed, 14 insertions, 1 deletions
diff --git a/src/irc/irc_client.cpp b/src/irc/irc_client.cpp index b13e5ab..ba13c6a 100644 --- a/src/irc/irc_client.cpp +++ b/src/irc/irc_client.cpp @@ -66,6 +66,7 @@ static const std::unordered_map<std::string, {"433", {&IrcClient::on_nickname_conflict, {2, 0}}}, {"438", {&IrcClient::on_nickname_change_too_fast, {2, 0}}}, {"443", {&IrcClient::on_useronchannel, {3, 0}}}, + {"475", {&IrcClient::on_channel_bad_key, {3, 0}}}, {"ERR_USERONCHANNEL", {&IrcClient::on_useronchannel, {3, 0}}}, {"001", {&IrcClient::on_welcome_message, {1, 0}}}, {"PART", {&IrcClient::on_part, {1, 0}}}, @@ -113,7 +114,6 @@ static const std::unordered_map<std::string, {"472", {&IrcClient::on_generic_error, {2, 0}}}, {"473", {&IrcClient::on_generic_error, {2, 0}}}, {"474", {&IrcClient::on_generic_error, {2, 0}}}, - {"475", {&IrcClient::on_generic_error, {2, 0}}}, {"476", {&IrcClient::on_generic_error, {2, 0}}}, {"477", {&IrcClient::on_generic_error, {2, 0}}}, {"481", {&IrcClient::on_generic_error, {2, 0}}}, @@ -1014,6 +1014,18 @@ void IrcClient::on_mode(const IrcMessage& message) this->on_user_mode(message); } +void IrcClient::on_channel_bad_key(const IrcMessage& message) +{ + this->on_generic_error(message); + const std::string& nickname = message.arguments[0]; + const std::string& channel = message.arguments[1]; + std::string text; + if (message.arguments.size() > 2) + text = message.arguments[2]; + + this->bridge.send_presence_error({channel, this->hostname, Iid::Type::Channel}, nickname, "auth", "not-authorized", "", text); +} + void IrcClient::on_channel_mode(const IrcMessage& message) { // For now, just transmit the modes so the user can know what happens diff --git a/src/irc/irc_client.hpp b/src/irc/irc_client.hpp index 4edc32c..4b942ad 100644 --- a/src/irc/irc_client.hpp +++ b/src/irc/irc_client.hpp @@ -257,6 +257,7 @@ public: void on_nick(const IrcMessage& message); void on_kick(const IrcMessage& message); void on_mode(const IrcMessage& message); + void on_channel_bad_key(const IrcMessage& message); /** * A mode towards our own user is received (note, that is different from a * channel mode towards or own nick, see |