diff options
Diffstat (limited to 'src/irc')
-rw-r--r-- | src/irc/irc_client.cpp | 15 | ||||
-rw-r--r-- | src/irc/irc_client.hpp | 6 |
2 files changed, 20 insertions, 1 deletions
diff --git a/src/irc/irc_client.cpp b/src/irc/irc_client.cpp index 537b738..f077e37 100644 --- a/src/irc/irc_client.cpp +++ b/src/irc/irc_client.cpp @@ -235,6 +235,21 @@ void IrcClient::forward_server_message(const IrcMessage& message) this->bridge->send_xmpp_message(this->hostname, from, body); } +void IrcClient::on_notice(const IrcMessage& message) +{ + std::string from = message.prefix; + const std::string to = message.arguments[0]; + const std::string body = message.arguments[1]; + + if (to == this->current_nick) + this->bridge->send_xmpp_message(this->hostname, from, body); + else + { + IrcMessage modified_message(std::move(from), "PRIVMSG", {to, std::string("\u000303[notice]\u0003 ") + body}); + this->on_channel_message(modified_message); + } +} + void IrcClient::on_isupport_message(const IrcMessage& message) { const size_t len = message.arguments.size(); diff --git a/src/irc/irc_client.hpp b/src/irc/irc_client.hpp index 811d416..849190a 100644 --- a/src/irc/irc_client.hpp +++ b/src/irc/irc_client.hpp @@ -148,6 +148,10 @@ public: */ void on_channel_message(const IrcMessage& message); /** + * A notice is received + */ + void on_notice(const IrcMessage& message); + /** * Save the topic in the IrcChannel */ void on_topic_received(const IrcMessage& message); @@ -282,7 +286,7 @@ private: typedef void (IrcClient::*irc_callback_t)(const IrcMessage&); static const std::unordered_map<std::string, irc_callback_t> irc_callbacks = { - {"NOTICE", &IrcClient::forward_server_message}, + {"NOTICE", &IrcClient::on_notice}, {"002", &IrcClient::forward_server_message}, {"003", &IrcClient::forward_server_message}, {"005", &IrcClient::on_isupport_message}, |