diff --git a/include/znc/Modules.h b/include/znc/Modules.h index a27a1326..9df08dde 100644 --- a/include/znc/Modules.h +++ b/include/znc/Modules.h @@ -561,6 +561,7 @@ public: * @return See CModule::EModRet. */ virtual EModRet OnRaw(CString& sLine); + virtual EModRet OnRawMessage(CMessage& Message); /** Called when a command to *status is sent. * @param sCommand The command sent. @@ -1196,6 +1197,7 @@ public: bool OnMode(const CNick& OpNick, CChan& Channel, char uMode, const CString& sArg, bool bAdded, bool bNoChange); bool OnRaw(CString& sLine); + bool OnRawMessage(CMessage& Message); bool OnStatusCommand(CString& sCommand); bool OnModCommand(const CString& sCommand); diff --git a/src/IRCSock.cpp b/src/IRCSock.cpp index e45eacf1..f1809f31 100644 --- a/src/IRCSock.cpp +++ b/src/IRCSock.cpp @@ -161,6 +161,9 @@ void CIRCSock::ReadLine(const CString& sData) { CMessage Message(sLine); Message.SetNetwork(m_pNetwork); + IRCSOCKMODULECALL(OnRawMessage(Message), &bReturn); + if (bReturn) return; + CString sCmd = Message.GetCommand(); if (sCmd.Equals("PING")) { diff --git a/src/Modules.cpp b/src/Modules.cpp index 21fa5485..e3846545 100644 --- a/src/Modules.cpp +++ b/src/Modules.cpp @@ -617,6 +617,7 @@ void CModule::OnRawMode(const CNick& pOpNick, CChan& Channel, const CString& sMo void CModule::OnMode(const CNick& pOpNick, CChan& Channel, char uMode, const CString& sArg, bool bAdded, bool bNoChange) {} CModule::EModRet CModule::OnRaw(CString& sLine) { return CONTINUE; } +CModule::EModRet CModule::OnRawMessage(CMessage& Message) { return CONTINUE; } CModule::EModRet CModule::OnStatusCommand(CString& sCommand) { return CONTINUE; } void CModule::OnModNotice(const CString& sMessage) {} @@ -891,6 +892,7 @@ bool CModules::OnRawMode(const CNick& OpNick, CChan& Channel, const CString& sMo bool CModules::OnMode2(const CNick* pOpNick, CChan& Channel, char uMode, const CString& sArg, bool bAdded, bool bNoChange) { MODUNLOADCHK(OnMode2(pOpNick, Channel, uMode, sArg, bAdded, bNoChange)); return false; } bool CModules::OnMode(const CNick& OpNick, CChan& Channel, char uMode, const CString& sArg, bool bAdded, bool bNoChange) { MODUNLOADCHK(OnMode(OpNick, Channel, uMode, sArg, bAdded, bNoChange)); return false; } bool CModules::OnRaw(CString& sLine) { MODHALTCHK(OnRaw(sLine)); } +bool CModules::OnRawMessage(CMessage& Message) { MODHALTCHK(OnRawMessage(Message)); } bool CModules::OnClientLogin() { MODUNLOADCHK(OnClientLogin()); return false; } bool CModules::OnClientDisconnect() { MODUNLOADCHK(OnClientDisconnect()); return false; }