diff --git a/IRCSock.cpp b/IRCSock.cpp index d666ca6e..107264b2 100644 --- a/IRCSock.cpp +++ b/IRCSock.cpp @@ -655,6 +655,9 @@ void CIRCSock::ReadLine(const CString& sData) { if (pChan) { CString sTopic = sLine.Token(3, true); sTopic.LeftChomp(); + + MODULECALL(OnTopic(Nick, *pChan, sTopic), m_pUser, NULL, return) + pChan->SetTopicOwner(Nick.GetNick()); pChan->SetTopicDate((unsigned long) time(NULL)); pChan->SetTopic(sTopic); diff --git a/Modules.cpp b/Modules.cpp index ada27147..1b7912f5 100644 --- a/Modules.cpp +++ b/Modules.cpp @@ -529,6 +529,7 @@ CModule::EModRet CModule::OnPrivMsg(CNick& Nick, CString& sMessage) { return CON CModule::EModRet CModule::OnChanMsg(CNick& Nick, CChan& Channel, CString& sMessage) { return CONTINUE; } CModule::EModRet CModule::OnPrivNotice(CNick& Nick, CString& sMessage) { return CONTINUE; } CModule::EModRet CModule::OnChanNotice(CNick& Nick, CChan& Channel, CString& sMessage) { return CONTINUE; } +CModule::EModRet CModule::OnTopic(CNick& Nick, CChan& Channel, CString& sTopic) { return CONTINUE; } void* CModule::GetDLL() { return m_pDLL; } bool CModule::PutIRC(const CString& sLine) { @@ -627,6 +628,7 @@ bool CModules::OnPrivMsg(CNick& Nick, CString& sMessage) { MODHALTCHK(OnPrivMsg( bool CModules::OnChanMsg(CNick& Nick, CChan& Channel, CString& sMessage) { MODHALTCHK(OnChanMsg(Nick, Channel, sMessage)); } 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::OnTopic(CNick& Nick, CChan& Channel, CString& sTopic) { MODHALTCHK(OnTopic(Nick, Channel, sTopic)); } bool CModules::OnStatusCommand(const CString& sCommand) { MODHALTCHK(OnStatusCommand(sCommand)); } bool CModules::OnModCommand(const CString& sCommand) { MODUNLOADCHK(OnModCommand(sCommand)); return false; } bool CModules::OnModNotice(const CString& sMessage) { MODUNLOADCHK(OnModNotice(sMessage)); return false; } diff --git a/Modules.h b/Modules.h index efcbc24f..f03c5821 100644 --- a/Modules.h +++ b/Modules.h @@ -272,6 +272,7 @@ public: virtual EModRet OnChanMsg(CNick& Nick, CChan& Channel, CString& sMessage); virtual EModRet OnPrivNotice(CNick& Nick, CString& sMessage); virtual EModRet OnChanNotice(CNick& Nick, CChan& Channel, CString& sMessage); + virtual EModRet OnTopic(CNick& Nick, CChan& Channel, CString& sTopic); void * GetDLL(); static double GetCoreVersion() { return VERSION; } @@ -407,6 +408,7 @@ public: virtual bool OnChanMsg(CNick& Nick, CChan& Channel, CString& sMessage); virtual bool OnPrivNotice(CNick& Nick, CString& sMessage); virtual bool OnChanNotice(CNick& Nick, CChan& Channel, CString& sMessage); + virtual bool OnTopic(CNick& Nick, CChan& Channel, CString& sTopic); CModule* FindModule(const CString& sModule) const; bool LoadModule(const CString& sModule, const CString& sArgs, CUser* pUser, CString& sRetMsg, bool bFake = false); diff --git a/modules/sample.cpp b/modules/sample.cpp index 77806ea6..4fbcac91 100644 --- a/modules/sample.cpp +++ b/modules/sample.cpp @@ -165,6 +165,12 @@ public: return CONTINUE; } + virtual EModRet OnTopic(CNick& Nick, CChan& Channel, CString& sTopic) { + PutModule("* " + Nick.GetNick() + " changes topic on " + Channel.GetName() + " to '" + sTopic + "'"); + + return CONTINUE; + } + virtual EModRet OnUserMsg(CString& sTarget, CString& sMessage) { PutModule("[" + sTarget + "] usermsg [" + sMessage + "]"); sMessage = "Sample: \0034" + sMessage + "\003";