bool MessageManager::isIgnoredOrFiltered(const ChatMessagePtr& msg, Client* aClient, bool PM){ const auto& identity = msg->getFrom()->getIdentity(); auto logIgnored = [&](bool filter) -> void { if (SETTING(LOG_IGNORED)) { string tmp; if (PM) { tmp = filter ? STRING(PM_MESSAGE_FILTERED) : STRING(PM_MESSAGE_IGNORED); } else { string hub = "[" + ((aClient && !aClient->getHubName().empty()) ? (aClient->getHubName().size() > 50 ? (aClient->getHubName().substr(0, 50) + "...") : aClient->getHubName()) : aClient->getHubUrl()) + "] "; tmp = (filter ? STRING(MC_MESSAGE_FILTERED) : STRING(MC_MESSAGE_IGNORED)) + hub; } tmp += "<" + identity.getNick() + "> " + msg->getText(); LogManager::getInstance()->message(tmp, LogMessage::SEV_INFO); } }; if (msg->getFrom()->getUser()->isIgnored() && ((aClient && aClient->isOp()) || !identity.isOp() || identity.isBot())) { logIgnored(false); return true; } if (isChatFiltered(identity.getNick(), msg->getText(), PM ? ChatFilterItem::PM : ChatFilterItem::MC)) { logIgnored(true); return true; } return false; }
json Serializer::serializeChatMessage(const ChatMessagePtr& aMessage) noexcept { json ret = { { "id", aMessage->getId()}, { "text", aMessage->getText() }, { "from", serializeOnlineUser(aMessage->getFrom()) }, { "time", aMessage->getTime() }, { "is_read", aMessage->getRead() } }; if (aMessage->getTo()) { ret["to"] = serializeOnlineUser(aMessage->getTo()); } if (aMessage->getReplyTo()) { ret["reply_to"] = serializeOnlineUser(aMessage->getReplyTo()); } return ret; }