diff --git a/Chan.cpp b/Chan.cpp index bf817ddb..81ca53a9 100644 --- a/Chan.cpp +++ b/Chan.cpp @@ -195,7 +195,7 @@ void CChan::ModeChange(const CString& sModes, const CString& sOpNick) { CNick* pOpNick = FindNick(sOpNick); if (pOpNick) { - VOIDMODULECALL(OnRawMode(*pOpNick, *this, sModeArg, sArgs)); + MODULECALL(OnRawMode(*pOpNick, *this, sModeArg, sArgs), m_pUser, NULL, ); } #endif @@ -234,19 +234,19 @@ void CChan::ModeChange(const CString& sModes, const CString& sOpNick) { bool bNoChange = (pNick->HasPerm(uPerm) == bAdd); if (uMode && pOpNick) { - VOIDMODULECALL(OnChanPermission(*pOpNick, *pNick, *this, uMode, bAdd, bNoChange)); + MODULECALL(OnChanPermission(*pOpNick, *pNick, *this, uMode, bAdd, bNoChange), m_pUser, NULL, ); if (uMode == CChan::M_Op) { if (bAdd) { - VOIDMODULECALL(OnOp(*pOpNick, *pNick, *this, bNoChange)); + MODULECALL(OnOp(*pOpNick, *pNick, *this, bNoChange), m_pUser, NULL, ); } else { - VOIDMODULECALL(OnDeop(*pOpNick, *pNick, *this, bNoChange)); + MODULECALL(OnDeop(*pOpNick, *pNick, *this, bNoChange), m_pUser, NULL, ); } } else if (uMode == CChan::M_Voice) { if (bAdd) { - VOIDMODULECALL(OnVoice(*pOpNick, *pNick, *this, bNoChange)); + MODULECALL(OnVoice(*pOpNick, *pNick, *this, bNoChange), m_pUser, NULL, ); } else { - VOIDMODULECALL(OnDevoice(*pOpNick, *pNick, *this, bNoChange)); + MODULECALL(OnDevoice(*pOpNick, *pNick, *this, bNoChange), m_pUser, NULL, ); } } } diff --git a/Client.cpp b/Client.cpp index ca3bc949..73f4859b 100644 --- a/Client.cpp +++ b/Client.cpp @@ -18,9 +18,7 @@ void CClient::ReadLine(const CString& sData) { #ifdef _MODULES if (m_bAuthed) { - CZNC::Get().GetModules().SetClient(this); - MODULECALLRET(OnUserRaw(sLine)); - CZNC::Get().GetModules().SetClient(NULL); + MODULECALL(OnUserRaw(sLine), m_pUser, this, return); } #endif @@ -133,9 +131,7 @@ void CClient::ReadLine(const CString& sData) { for (unsigned int a = 0; a < vChans.size(); a++) { CString sChannel = vChans[a]; #ifdef _MODULES - CZNC::Get().GetModules().SetClient(this); - MODULECALLCONT(OnUserJoin(sChannel, sKey)); - CZNC::Get().GetModules().SetClient(NULL); + MODULECALL(OnUserJoin(sChannel, sKey), m_pUser, this, continue); #endif CChan* pChan = m_pUser->FindChan(sChannel); @@ -169,9 +165,7 @@ void CClient::ReadLine(const CString& sData) { } #ifdef _MODULES - CZNC::Get().GetModules().SetClient(this); - MODULECALLRET(OnUserPart(sChan, sMessage)); - CZNC::Get().GetModules().SetClient(NULL); + MODULECALL(OnUserPart(sChan, sMessage), m_pUser, this, return); #endif if (m_pUser) { @@ -242,15 +236,11 @@ void CClient::ReadLine(const CString& sData) { sCTCP.LeftChomp(); sCTCP.RightChomp(); - CZNC::Get().GetModules().SetClient(this); - MODULECALLRET(OnUserCTCPReply(sTarget, sCTCP)); - CZNC::Get().GetModules().SetClient(NULL); + MODULECALL(OnUserCTCPReply(sTarget, sCTCP), m_pUser, this, return); sMsg = "\001" + sCTCP + "\001"; } else { - CZNC::Get().GetModules().SetClient(this); - MODULECALLRET(OnUserNotice(sTarget, sMsg)); - CZNC::Get().GetModules().SetClient(NULL); + MODULECALL(OnUserNotice(sTarget, sMsg), m_pUser, this, return); } #endif @@ -320,9 +310,7 @@ void CClient::ReadLine(const CString& sData) { } #ifdef _MODULES } else { - CZNC::Get().GetModules().SetClient(this); - MODULECALLRET(OnDCCUserSend(sTarget, uLongIP, uPort, sFile, uFileSize)); - CZNC::Get().GetModules().SetClient(NULL); + MODULECALL(OnDCCUserSend(sTarget, uLongIP, uPort, sFile, uFileSize), m_pUser, this, return); #endif } } else { @@ -395,9 +383,7 @@ void CClient::ReadLine(const CString& sData) { } #ifdef _MODULES } else { - CZNC::Get().GetModules().SetClient(this); - MODULECALLRET(OnUserCTCP(sTarget, sCTCP)); - CZNC::Get().GetModules().SetClient(NULL); + MODULECALL(OnUserCTCP(sTarget, sCTCP), m_pUser, this, return); #endif } @@ -407,9 +393,7 @@ void CClient::ReadLine(const CString& sData) { if ((m_pUser) && (sTarget.CaseCmp(CString(m_pUser->GetStatusPrefix() + "status")) == 0)) { #ifdef _MODULES - CZNC::Get().GetModules().SetClient(this); - MODULECALLRET(OnStatusCommand(sMsg)); - CZNC::Get().GetModules().SetClient(NULL); + MODULECALL(OnStatusCommand(sMsg), m_pUser, this, return); #endif UserCommand(sMsg); return; @@ -445,9 +429,7 @@ void CClient::ReadLine(const CString& sData) { } #ifdef _MODULES - CZNC::Get().GetModules().SetClient(this); - MODULECALLRET(OnUserMsg(sTarget, sMsg)); - CZNC::Get().GetModules().SetClient(NULL); + MODULECALL(OnUserMsg(sTarget, sMsg), m_pUser, this, return); #endif CChan* pChan = m_pUser->FindChan(sTarget); @@ -1272,9 +1254,7 @@ void CClient::AcceptLogin(CUser& User) { SendMotd(); #ifdef _MODULES - CZNC::Get().GetModules().SetClient(this); - VOIDMODULECALL(OnUserAttached()); - CZNC::Get().GetModules().SetClient(NULL); + MODULECALL(OnUserAttached(), m_pUser, this, ); #endif } @@ -1295,9 +1275,7 @@ void CClient::Disconnected() { m_pIRCSock = NULL; #ifdef _MODULES - CZNC::Get().GetModules().SetClient(this); - VOIDMODULECALL(OnUserDetached()); - CZNC::Get().GetModules().SetClient(NULL); + MODULECALL(OnUserDetached(), m_pUser, this, ); #endif } diff --git a/IRCSock.cpp b/IRCSock.cpp index a86e859e..6d390592 100644 --- a/IRCSock.cpp +++ b/IRCSock.cpp @@ -59,12 +59,7 @@ void CIRCSock::ReadLine(const CString& sData) { DEBUG_ONLY(cout << "(" << m_pUser->GetUserName() << ") IRC -> ZNC [" << sLine << "]" << endl); #ifdef _MODULES - CGlobalModules& GMods = CZNC::Get().GetModules(); - GMods.SetUser(m_pUser); - if (GMods.OnRaw(sLine) || m_pUser->GetModules().OnRaw(sLine)) { - return; - } - GMods.SetUser(NULL); + MODULECALL(OnRaw(sLine), m_pUser, NULL, return); #endif if (strncasecmp(sLine.c_str(), "PING ", 5) == 0) { @@ -86,7 +81,7 @@ void CIRCSock::ReadLine(const CString& sData) { m_pUser->StartAwayNickTimer(); - VOIDMODULECALL(OnIRCConnected()); + MODULECALL(OnIRCConnected(), m_pUser, NULL, ); m_bAuthed = true; m_pUser->PutStatus("Connected!"); @@ -390,7 +385,7 @@ void CIRCSock::ReadLine(const CString& sData) { KeepNick(true); } - VOIDMODULECALL(OnNick(Nick, sNewNick, vFoundChans)); + MODULECALL(OnNick(Nick, sNewNick, vFoundChans), m_pUser, NULL, ); if (!bIsVisible) { return; @@ -424,7 +419,7 @@ void CIRCSock::ReadLine(const CString& sData) { KeepNick(true); } - VOIDMODULECALL(OnQuit(Nick, sMessage, vFoundChans)); + MODULECALL(OnQuit(Nick, sMessage, vFoundChans), m_pUser, NULL, ); if (!bIsVisible) { return; @@ -443,7 +438,7 @@ void CIRCSock::ReadLine(const CString& sData) { CChan* pChan = m_pUser->FindChan(sChan); if (pChan) { pChan->AddNick(Nick.GetNickMask()); - VOIDMODULECALL(OnJoin(Nick.GetNickMask(), *pChan)); + MODULECALL(OnJoin(Nick.GetNickMask(), *pChan), m_pUser, NULL, ); if (pChan->IsDetached()) { return; @@ -458,7 +453,7 @@ void CIRCSock::ReadLine(const CString& sData) { CChan* pChan = m_pUser->FindChan(sChan); if (pChan) { pChan->RemNick(Nick.GetNick()); - VOIDMODULECALL(OnPart(Nick.GetNickMask(), *pChan)); + MODULECALL(OnPart(Nick.GetNickMask(), *pChan), m_pUser, NULL, ); } // Todo: use nick compare function @@ -492,7 +487,7 @@ void CIRCSock::ReadLine(const CString& sData) { if (pChan) { pChan->RemNick(sKickedNick); - VOIDMODULECALL(OnKick(Nick.GetNickMask(), sKickedNick, *pChan, sMsg)); + MODULECALL(OnKick(Nick.GetNickMask(), sKickedNick, *pChan, sMsg), m_pUser, NULL, ); } if (GetNick().CaseCmp(sKickedNick) == 0) { @@ -614,13 +609,13 @@ void CIRCSock::KeepNick(bool bForce) { } bool CIRCSock::OnCTCPReply(CNick& Nick, CString& sMessage) { - MODULECALL(OnCTCPReply(Nick, sMessage)); + MODULECALL(OnCTCPReply(Nick, sMessage), m_pUser, NULL, return true); return false; } bool CIRCSock::OnPrivCTCP(CNick& Nick, CString& sMessage) { - MODULECALL(OnPrivCTCP(Nick, sMessage)); + MODULECALL(OnPrivCTCP(Nick, sMessage), m_pUser, NULL, return true); if (strncasecmp(sMessage.c_str(), "DCC ", 4) == 0 && m_pUser && m_pUser->BounceDCCs()) { // DCC CHAT chat 2453612361 44592 @@ -692,7 +687,7 @@ bool CIRCSock::OnPrivCTCP(CNick& Nick, CString& sMessage) { } bool CIRCSock::OnPrivNotice(CNick& Nick, CString& sMessage) { - MODULECALL(OnPrivNotice(Nick, sMessage)); + MODULECALL(OnPrivNotice(Nick, sMessage), m_pUser, NULL, return true); if (!m_pUser->IsUserAttached()) { // If the user is detached, add to the buffer @@ -703,7 +698,7 @@ bool CIRCSock::OnPrivNotice(CNick& Nick, CString& sMessage) { } bool CIRCSock::OnPrivMsg(CNick& Nick, CString& sMessage) { - MODULECALL(OnPrivMsg(Nick, sMessage)); + MODULECALL(OnPrivMsg(Nick, sMessage), m_pUser, NULL, return true); if (!m_pUser->IsUserAttached()) { // If the user is detached, add to the buffer @@ -720,7 +715,7 @@ bool CIRCSock::OnChanCTCP(CNick& Nick, const CString& sChan, CString& sMessage) if (sMessage.Token(0).CaseCmp("ACTION") == 0 && (pChan->KeepBuffer() || !m_pUser->IsUserAttached())) { pChan->AddBuffer(":" + Nick.GetNickMask() + " PRIVMSG " + sChan + " :\001" + sMessage + "\001"); } else { - MODULECALL(OnChanCTCP(Nick, *pChan, sMessage)); + MODULECALL(OnChanCTCP(Nick, *pChan, sMessage), m_pUser, NULL, return true); } } @@ -730,7 +725,7 @@ bool CIRCSock::OnChanCTCP(CNick& Nick, const CString& sChan, CString& sMessage) bool CIRCSock::OnChanNotice(CNick& Nick, const CString& sChan, CString& sMessage) { CChan* pChan = m_pUser->FindChan(sChan); if (pChan) { - MODULECALL(OnChanNotice(Nick, *pChan, sMessage)); + MODULECALL(OnChanNotice(Nick, *pChan, sMessage), m_pUser, NULL, return true); if ((pChan->KeepBuffer()) || (!m_pUser->IsUserAttached())) { pChan->AddBuffer(":" + Nick.GetNickMask() + " NOTICE " + sChan + " :" + sMessage); @@ -743,7 +738,7 @@ bool CIRCSock::OnChanNotice(CNick& Nick, const CString& sChan, CString& sMessage bool CIRCSock::OnChanMsg(CNick& Nick, const CString& sChan, CString& sMessage) { CChan* pChan = m_pUser->FindChan(sChan); if (pChan) { - MODULECALL(OnChanMsg(Nick, *pChan, sMessage)); + MODULECALL(OnChanMsg(Nick, *pChan, sMessage), m_pUser, NULL, return true); if (pChan->KeepBuffer() || !m_pUser->IsUserAttached()) { pChan->AddBuffer(":" + Nick.GetNickMask() + " PRIVMSG " + sChan + " :" + sMessage); @@ -776,7 +771,7 @@ void CIRCSock::Connected() { } void CIRCSock::Disconnected() { - VOIDMODULECALL(OnIRCDisconnected()); + MODULECALL(OnIRCDisconnected(), m_pUser, NULL, ); DEBUG_ONLY(cout << GetSockName() << " == Disconnected()" << endl); if (!m_pUser->IsBeingDeleted()) { diff --git a/Modules.cpp b/Modules.cpp index 42e22249..60d1cda1 100644 --- a/Modules.cpp +++ b/Modules.cpp @@ -551,20 +551,20 @@ bool CModules::OnBoot() { return true; } -void CModules::OnIRCConnected() { MODUNLOADCHK(OnIRCConnected()); } +bool CModules::OnIRCConnected() { MODUNLOADCHK(OnIRCConnected()); return false; } bool CModules::OnBroadcast(CString& sMessage) { MODHALTCHK(OnBroadcast(sMessage)); } -void CModules::OnIRCDisconnected() { MODUNLOADCHK(OnIRCDisconnected()); } +bool CModules::OnIRCDisconnected() { MODUNLOADCHK(OnIRCDisconnected()); return false; } bool CModules::OnDCCUserSend(const CNick& RemoteNick, unsigned long uLongIP, unsigned short uPort, const CString& sFile, unsigned long uFileSize) { MODHALTCHK(OnDCCUserSend(RemoteNick, uLongIP, uPort, sFile, uFileSize)); } -void CModules::OnChanPermission(const CNick& OpNick, const CNick& Nick, CChan& Channel, unsigned char uMode, bool bAdded, bool bNoChange) { MODUNLOADCHK(OnChanPermission(OpNick, Nick, Channel, uMode, bAdded, bNoChange)); } -void CModules::OnOp(const CNick& OpNick, const CNick& Nick, CChan& Channel, bool bNoChange) { MODUNLOADCHK(OnOp(OpNick, Nick, Channel, bNoChange)); } -void CModules::OnDeop(const CNick& OpNick, const CNick& Nick, CChan& Channel, bool bNoChange) { MODUNLOADCHK(OnDeop(OpNick, Nick, Channel, bNoChange)); } -void CModules::OnVoice(const CNick& OpNick, const CNick& Nick, CChan& Channel, bool bNoChange) { MODUNLOADCHK(OnVoice(OpNick, Nick, Channel, bNoChange)); } -void CModules::OnDevoice(const CNick& OpNick, const CNick& Nick, CChan& Channel, bool bNoChange) { MODUNLOADCHK(OnDevoice(OpNick, Nick, Channel, bNoChange)); } -void CModules::OnRawMode(const CNick& OpNick, CChan& Channel, const CString& sModes, const CString& sArgs) { MODUNLOADCHK(OnRawMode(OpNick, Channel, sModes, sArgs)); } +bool CModules::OnChanPermission(const CNick& OpNick, const CNick& Nick, CChan& Channel, unsigned char uMode, bool bAdded, bool bNoChange) { MODUNLOADCHK(OnChanPermission(OpNick, Nick, Channel, uMode, bAdded, bNoChange)); return false; } +bool CModules::OnOp(const CNick& OpNick, const CNick& Nick, CChan& Channel, bool bNoChange) { MODUNLOADCHK(OnOp(OpNick, Nick, Channel, bNoChange)); return false; } +bool CModules::OnDeop(const CNick& OpNick, const CNick& Nick, CChan& Channel, bool bNoChange) { MODUNLOADCHK(OnDeop(OpNick, Nick, Channel, bNoChange)); return false; } +bool CModules::OnVoice(const CNick& OpNick, const CNick& Nick, CChan& Channel, bool bNoChange) { MODUNLOADCHK(OnVoice(OpNick, Nick, Channel, bNoChange)); return false; } +bool CModules::OnDevoice(const CNick& OpNick, const CNick& Nick, CChan& Channel, bool bNoChange) { MODUNLOADCHK(OnDevoice(OpNick, Nick, Channel, bNoChange)); return false; } +bool CModules::OnRawMode(const CNick& OpNick, CChan& Channel, const CString& sModes, const CString& sArgs) { MODUNLOADCHK(OnRawMode(OpNick, Channel, sModes, sArgs)); return false; } bool CModules::OnRaw(CString& sLine) { MODHALTCHK(OnRaw(sLine)); } -void CModules::OnUserAttached() { MODUNLOADCHK(OnUserAttached()); } -void CModules::OnUserDetached() { MODUNLOADCHK(OnUserDetached()); } +bool CModules::OnUserAttached() { MODUNLOADCHK(OnUserAttached()); return false; } +bool CModules::OnUserDetached() { MODUNLOADCHK(OnUserDetached()); return false; } bool CModules::OnUserRaw(CString& sLine) { MODHALTCHK(OnUserRaw(sLine)); } bool CModules::OnUserCTCPReply(CString& sTarget, CString& sMessage) { MODHALTCHK(OnUserCTCPReply(sTarget, sMessage)); } bool CModules::OnUserCTCP(CString& sTarget, CString& sMessage) { MODHALTCHK(OnUserCTCP(sTarget, sMessage)); } @@ -573,11 +573,11 @@ bool CModules::OnUserNotice(CString& sTarget, CString& sMessage) { MODHALTCHK(On bool CModules::OnUserJoin(CString& sChannel, CString& sKey) { MODHALTCHK(OnUserJoin(sChannel, sKey)); } bool CModules::OnUserPart(CString& sChannel, CString& sMessage) { MODHALTCHK(OnUserPart(sChannel, sMessage)); } -void CModules::OnQuit(const CNick& Nick, const CString& sMessage, const vector& vChans) { MODUNLOADCHK(OnQuit(Nick, sMessage, vChans)); } -void CModules::OnNick(const CNick& Nick, const CString& sNewNick, const vector& vChans) { MODUNLOADCHK(OnNick(Nick, sNewNick, vChans)); } -void CModules::OnKick(const CNick& Nick, const CString& sKickedNick, CChan& Channel, const CString& sMessage) { MODUNLOADCHK(OnKick(Nick, sKickedNick, Channel, sMessage)); } -void CModules::OnJoin(const CNick& Nick, CChan& Channel) { MODUNLOADCHK(OnJoin(Nick, Channel)); } -void CModules::OnPart(const CNick& Nick, CChan& Channel) { MODUNLOADCHK(OnPart(Nick, Channel)); } +bool CModules::OnQuit(const CNick& Nick, const CString& sMessage, const vector& vChans) { MODUNLOADCHK(OnQuit(Nick, sMessage, vChans)); return false; } +bool CModules::OnNick(const CNick& Nick, const CString& sNewNick, const vector& vChans) { MODUNLOADCHK(OnNick(Nick, sNewNick, vChans)); return false; } +bool CModules::OnKick(const CNick& Nick, const CString& sKickedNick, CChan& Channel, const CString& sMessage) { MODUNLOADCHK(OnKick(Nick, sKickedNick, Channel, sMessage)); return false; } +bool CModules::OnJoin(const CNick& Nick, CChan& Channel) { MODUNLOADCHK(OnJoin(Nick, Channel)); return false; } +bool CModules::OnPart(const CNick& Nick, CChan& Channel) { MODUNLOADCHK(OnPart(Nick, Channel)); return false; } bool CModules::OnCTCPReply(CNick& Nick, CString& sMessage) { MODHALTCHK(OnCTCPReply(Nick, sMessage)); } bool CModules::OnPrivCTCP(CNick& Nick, CString& sMessage) { MODHALTCHK(OnPrivCTCP(Nick, sMessage)); } bool CModules::OnChanCTCP(CNick& Nick, CChan& Channel, CString& sMessage) { MODHALTCHK(OnChanCTCP(Nick, Channel, sMessage)); } @@ -586,9 +586,9 @@ bool CModules::OnChanMsg(CNick& Nick, CChan& Channel, CString& sMessage) { MODHA bool CModules::OnPrivNotice(CNick& Nick, CString& sMessage) { MODHALTCHK(OnPrivNotice(Nick, sMessage)); } bool CModules::OnChanNotice(CNick& Nick, CChan& Channel, CString& sMessage) { MODHALTCHK(OnChanNotice(Nick, Channel, sMessage)); } bool CModules::OnStatusCommand(const CString& sCommand) { MODHALTCHK(OnStatusCommand(sCommand)); } -void CModules::OnModCommand(const CString& sCommand) { MODUNLOADCHK(OnModCommand(sCommand)); } -void CModules::OnModNotice(const CString& sMessage) { MODUNLOADCHK(OnModNotice(sMessage)); } -void CModules::OnModCTCP(const CString& sMessage) { MODUNLOADCHK(OnModCTCP(sMessage)); } +bool CModules::OnModCommand(const CString& sCommand) { MODUNLOADCHK(OnModCommand(sCommand)); return false; } +bool CModules::OnModNotice(const CString& sMessage) { MODUNLOADCHK(OnModNotice(sMessage)); return false; } +bool CModules::OnModCTCP(const CString& sMessage) { MODUNLOADCHK(OnModCTCP(sMessage)); return false; } //////////////////// // CGlobalModules // diff --git a/Modules.h b/Modules.h index 162dda25..b1829e0f 100644 --- a/Modules.h +++ b/Modules.h @@ -326,34 +326,34 @@ public: void UnloadAll(); virtual bool OnBoot(); // Return false to abort - virtual void OnIRCDisconnected(); - virtual void OnIRCConnected(); + virtual bool OnIRCDisconnected(); + virtual bool OnIRCConnected(); virtual bool OnBroadcast(CString& sMessage); virtual bool OnDCCUserSend(const CNick& RemoteNick, unsigned long uLongIP, unsigned short uPort, const CString& sFile, unsigned long uFileSize); - virtual void OnChanPermission(const CNick& OpNick, const CNick& Nick, CChan& Channel, unsigned char uMode, bool bAdded, bool bNoChange); - virtual void OnOp(const CNick& OpNick, const CNick& Nick, CChan& Channel, bool bNoChange); - virtual void OnDeop(const CNick& OpNick, const CNick& Nick, CChan& Channel, bool bNoChange); - virtual void OnVoice(const CNick& OpNick, const CNick& Nick, CChan& Channel, bool bNoChange); - virtual void OnDevoice(const CNick& OpNick, const CNick& Nick, CChan& Channel, bool bNoChange); - virtual void OnRawMode(const CNick& OpNick, CChan& Channel, const CString& sModes, const CString& sArgs); + virtual bool OnChanPermission(const CNick& OpNick, const CNick& Nick, CChan& Channel, unsigned char uMode, bool bAdded, bool bNoChange); + virtual bool OnOp(const CNick& OpNick, const CNick& Nick, CChan& Channel, bool bNoChange); + virtual bool OnDeop(const CNick& OpNick, const CNick& Nick, CChan& Channel, bool bNoChange); + virtual bool OnVoice(const CNick& OpNick, const CNick& Nick, CChan& Channel, bool bNoChange); + virtual bool OnDevoice(const CNick& OpNick, const CNick& Nick, CChan& Channel, bool bNoChange); + virtual bool OnRawMode(const CNick& OpNick, CChan& Channel, const CString& sModes, const CString& sArgs); virtual bool OnRaw(CString& sLine); virtual bool OnStatusCommand(const CString& sCommand); - virtual void OnModCommand(const CString& sCommand); - virtual void OnModNotice(const CString& sMessage); - virtual void OnModCTCP(const CString& sMessage); + virtual bool OnModCommand(const CString& sCommand); + virtual bool OnModNotice(const CString& sMessage); + virtual bool OnModCTCP(const CString& sMessage); - virtual void OnQuit(const CNick& Nick, const CString& sMessage, const vector& vChans); - virtual void OnNick(const CNick& Nick, const CString& sNewNick, const vector& vChans); - virtual void OnKick(const CNick& Nick, const CString& sOpNick, CChan& Channel, const CString& sMessage); - virtual void OnJoin(const CNick& Nick, CChan& Channel); - virtual void OnPart(const CNick& Nick, CChan& Channel); + virtual bool OnQuit(const CNick& Nick, const CString& sMessage, const vector& vChans); + virtual bool OnNick(const CNick& Nick, const CString& sNewNick, const vector& vChans); + virtual bool OnKick(const CNick& Nick, const CString& sOpNick, CChan& Channel, const CString& sMessage); + virtual bool OnJoin(const CNick& Nick, CChan& Channel); + virtual bool OnPart(const CNick& Nick, CChan& Channel); - virtual void OnUserAttached(); - virtual void OnUserDetached(); + virtual bool OnUserAttached(); + virtual bool OnUserDetached(); virtual bool OnUserRaw(CString& sLine); virtual bool OnUserCTCPReply(CString& sTarget, CString& sMessage); virtual bool OnUserCTCP(CString& sTarget, CString& sMessage); diff --git a/main.h b/main.h index ca568007..2aa1d48e 100644 --- a/main.h +++ b/main.h @@ -8,62 +8,24 @@ #endif #ifdef _MODULES -#define VOIDMODULECALL(func) \ - if (m_pUser) { \ - CGlobalModules& GMods = CZNC::Get().GetModules(); \ - GMods.SetUser(m_pUser); \ - GMods.func; \ - m_pUser->GetModules().func; \ - GMods.SetUser(NULL); \ +#define MODULECALL(macFUNC, macUSER, macCLIENT, macEXITER) \ + if (macUSER) { \ + CGlobalModules& GMods = CZNC::Get().GetModules(); \ + CModules& UMods = macUSER->GetModules(); \ + GMods.SetUser(macUSER); GMods.SetClient(macCLIENT); \ + UMods.SetClient(macCLIENT); \ + if (GMods.macFUNC || UMods.macFUNC) { \ + GMods.SetUser(NULL); GMods.SetClient(NULL); \ + UMods.SetClient(NULL); \ + macEXITER; \ + } \ + GMods.SetUser(NULL); GMods.SetClient(NULL); \ + UMods.SetClient(NULL); \ } #else -#define VOIDMODULECALL(func) +#define MODULECALL(macFUNC, macUSER, macCLIENT, macEXITER) #endif -#ifdef _MODULES -#define MODULECALLRET(func) \ - if (m_pUser) { \ - CGlobalModules& GMods = CZNC::Get().GetModules(); \ - GMods.SetUser(m_pUser); \ - if (GMods.func || m_pUser->GetModules().func) { \ - GMods.SetUser(NULL); \ - return; \ - } \ - GMods.SetUser(NULL); \ - } -#else -#define MODULECALLRET(func) -#endif - -#ifdef _MODULES -#define MODULECALLCONT(func) \ - if (m_pUser) { \ - CGlobalModules& GMods = CZNC::Get().GetModules(); \ - GMods.SetUser(m_pUser); \ - if (GMods.func || m_pUser->GetModules().func) { \ - GMods.SetUser(NULL); \ - continue; \ - } \ - GMods.SetUser(NULL); \ - } -#else -#define MODULECALLCONT(func) -#endif - -#ifdef _MODULES -#define MODULECALL(func) \ - if (m_pUser) { \ - CGlobalModules& GMods = CZNC::Get().GetModules(); \ - GMods.SetUser(m_pUser); \ - if (GMods.func || m_pUser->GetModules().func) { \ - GMods.SetUser(NULL); \ - return true; \ - } \ - GMods.SetUser(NULL); \ - } -#else -#define MODULECALL(func) -#endif #ifndef CS_STRING #define CS_STRING CString diff --git a/znc.cpp b/znc.cpp index efc07947..5c76a6c9 100644 --- a/znc.cpp +++ b/znc.cpp @@ -1152,8 +1152,7 @@ void CZNC::Broadcast(const CString& sMessage, CUser* pUser) { if (a->second != pUser) { CString sMsg = sMessage; #ifdef _MODULES - CUser* m_pUser = a->second; // This is a semi-hack because MODULECALLCONT below expects the user to be stored in m_pUser - MODULECALLCONT(OnBroadcast(sMsg)); + MODULECALL(OnBroadcast(sMsg), a->second, NULL, continue); #endif a->second->PutStatusNotice("*** " + sMsg); }