diff --git a/src/irc/irc_client.cpp b/src/irc/irc_client.cpp index 537b73862aebad2a36fb9d4c5633215b7fa907f5..f077e3795e714cf3432755952757f8a9918e7aa3 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 811d41683b3acb74845d4c2815c5ca81a36181fd..849190a560f4ac64885386eb3840816adb9abfca 100644 --- a/src/irc/irc_client.hpp +++ b/src/irc/irc_client.hpp @@ -147,6 +147,10 @@ public: * When a channel message is received */ void on_channel_message(const IrcMessage& message); + /** + * A notice is received + */ + void on_notice(const IrcMessage& message); /** * Save the topic in the IrcChannel */ @@ -282,7 +286,7 @@ private: typedef void (IrcClient::*irc_callback_t)(const IrcMessage&); static const std::unordered_map 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},