~singpolyma/biboumi

163ace553f3e65dcf9f97070faa5dbab0d31bac0 — Florent Le Coz 7 years ago 0a6b673
Handle all unknown IRC command by forwarding the arguments as a message body

This way, the users can receive the result of any IRC command (although not
parsed nor formatted in anyway) when biboumi doesn’t support it

fix #2884
2 files changed, 23 insertions(+), 1 deletions(-)

M src/irc/irc_client.cpp
M src/irc/irc_client.hpp
M src/irc/irc_client.cpp => src/irc/irc_client.cpp +22 -1
@@ 8,6 8,7 @@
#include <utils/tolower.hpp>
#include <utils/split.hpp>

#include <sstream>
#include <iostream>
#include <stdexcept>



@@ 154,7 155,11 @@ void IrcClient::parse_in_buffer(const size_t)
          }
        }
      else
        log_info("No handler for command " << message.command);
        {
          log_info("No handler for command " << message.command <<
                   ", forwarding the arguments to the user");
          this->on_unknown_message(message);
        }
      // Try to find a waiting_iq, which response will be triggered by this IrcMessage
      this->bridge->trigger_on_irc_message(this->hostname, message);
    }


@@ 797,6 802,22 @@ void IrcClient::on_user_mode(const IrcMessage& message)
                                  " is [" + message.arguments[1] + "]");
}

void IrcClient::on_unknown_message(const IrcMessage& message)
{
  if (message.arguments.size() < 2)
    return ;
  std::string from = message.prefix;
  const std::string to = message.arguments[0];
  std::stringstream ss;
  for (auto it = message.arguments.begin() + 1; it != message.arguments.end(); ++it)
    {
      ss << *it;
      if (it + 1 != message.arguments.end())
        ss << " ";
    }
  this->bridge->send_xmpp_message(this->hostname, from, ss.str());
}

size_t IrcClient::number_of_joined_channels() const
{
  if (this->dummy_channel.joined)

M src/irc/irc_client.hpp => src/irc/irc_client.hpp +1 -0
@@ 211,6 211,7 @@ public:
   */
  void on_channel_mode(const IrcMessage& message);
  void on_quit(const IrcMessage& message);
  void on_unknown_message(const IrcMessage& message);
  /**
   * Return the number of joined channels
   */