void CtcpParser::parse(IrcEventRawMessage *e, Message::Type messagetype) { //lowlevel message dequote QByteArray dequotedMessage = lowLevelDequote(e->rawMessage()); CtcpEvent::CtcpType ctcptype = e->type() == EventManager::IrcEventRawNotice ? CtcpEvent::Reply : CtcpEvent::Query; Message::Flags flags = (ctcptype == CtcpEvent::Reply && !e->network()->isChannelName(e->target())) ? Message::Redirected : Message::None; if (coreSession()->networkConfig()->standardCtcp()) parseStandard(e, messagetype, dequotedMessage, ctcptype, flags); else parseSimple(e, messagetype, dequotedMessage, ctcptype, flags); }
void CtcpParser::parse(IrcEventRawMessage *e, Message::Type messagetype) { //lowlevel message dequote QByteArray dequotedMessage = lowLevelDequote(e->rawMessage()); CtcpEvent::CtcpType ctcptype = e->type() == EventManager::IrcEventRawNotice ? CtcpEvent::Reply : CtcpEvent::Query; Message::Flags flags = (ctcptype == CtcpEvent::Reply && !e->network()->isChannelName(e->target())) ? Message::Redirected : Message::None; bool isStatusMsg = false; // First remove all statusmsg prefix characters that are not also channel prefix characters. while (e->network()->isStatusMsg(e->target()) && !e->network()->isChannelName(e->target())) { isStatusMsg = true; e->setTarget(e->target().remove(0, 1)); } // Then continue removing statusmsg characters as long as removing the character will still result in a // valid channel name. This prevents removing the channel prefix character if said character is in the // overlap between the statusmsg characters and the channel prefix characters. while (e->network()->isStatusMsg(e->target()) && e->network()->isChannelName(e->target().remove(0, 1))) { isStatusMsg = true; e->setTarget(e->target().remove(0, 1)); } // If any statusmsg characters were removed, Flag the message as a StatusMsg. if (isStatusMsg) { flags |= Message::StatusMsg; } if (coreSession()->networkConfig()->standardCtcp()) parseStandard(e, messagetype, dequotedMessage, ctcptype, flags); else parseSimple(e, messagetype, dequotedMessage, ctcptype, flags); }