void Swiftob::handleMessageReceived(Swift::Message::ref message) { Swift::Message::Type type = message->getType(); if (type == Swift::Message::Error || type == Swift::Message::Headline) { std::cout << "Ignoring typed message" << std::endl; return; } std::string body = message->getBody(); std::cout << "Got message with body " << body << std::endl; if (body.size() == 0) { std::cout << "Not handling empty body" << std::endl; return; } /*Convert body into !command if it's not a MUC, and it misses the bang*/ std::string bangBody(body); if (type != Swift::Message::Groupchat && body[0] != '!') { bangBody = "!" + body; } std::cout << "After banging, body is " << bangBody << std::endl; std::pair<std::string, std::string> split = Swift::String::getSplittedAtFirst(bangBody, ' '); std::string commandName(split.first); commandName = Swift::String::getSplittedAtFirst(commandName, '!').second; /*FIXME: remove leading bang in commandName*/ if (commands_->hasCommand(commandName)) { std::cout << "Matched command " << commandName << std::endl; commands_->runCommand(commandName, split.second, message); } }
void ConversationManager::handleMessageReceived(Swift::Message::ref message) { // std::string name = message->getTo().getUnescapedNode(); // if (name.find_last_of("%") != std::string::npos) { // OK when commented // name.replace(name.find_last_of("%"), 1, "@"); // OK when commented // } std::string name = Buddy::JIDToLegacyName(message->getTo()); if (name.empty()) { LOG4CXX_WARN(logger, m_user->getJID().toString() << ": Tried to create empty conversation"); return; } // create conversation if it does not exist. if (!m_convs[name]) { Conversation *conv = m_component->getFactory()->createConversation(this, name); addConversation(conv); } // if it exists and it's MUC, but this message is PM, get PM conversation or create new one. else if (m_convs[name]->isMUC() && message->getType() != Swift::Message::Groupchat) { std::string room_name = name; name = room_name + "/" + message->getTo().getResource(); if (m_convs.find(name) == m_convs.end()) { Conversation *conv = m_component->getFactory()->createConversation(this, message->getTo().getResource()); conv->setRoom(room_name); conv->setNickname(name); addConversation(conv); } } // update resource and send the message m_convs[name]->setJID(message->getFrom()); m_convs[name]->sendMessage(message); }