#pragma once #include #include #include namespace roro { // One IRC protocol line: [@tags] [:prefix] COMMAND params... [:trailing] (tags are ignored). struct IrcMessage { std::string prefix; std::string command; std::vector params; std::string nick() const { return prefix.substr(0, prefix.find('!')); } std::string param(size_t i) const { return i < params.size() ? params[i] : ""; } static IrcMessage parse(const std::string& line); // Builds a line; the last parameter gets a ':' when it needs one. static std::string serialize(const std::string& command, std::initializer_list params); }; } // namespace roro