diff --git a/modules/chansaver.cpp b/modules/chansaver.cpp new file mode 100644 index 00000000..b8bfb4a9 --- /dev/null +++ b/modules/chansaver.cpp @@ -0,0 +1,59 @@ +//! @author prozac@rottenboy.com + +#include "main.h" +#include "znc.h" +#include "User.h" +#include "Nick.h" +#include "Modules.h" +#include "Chan.h" + +class CChanSaverMod : public CModule { +public: + MODCONSTRUCTOR(CChanSaverMod) { + m_bWriteConf = false; + } + + virtual bool OnLoad(const CString& sArgs) { + return true; + } + + virtual ~CChanSaverMod() { + } + + virtual EModRet OnRaw(CString& sLine) { + if (m_bWriteConf) { + CZNC::Get().WriteConfig(); + m_bWriteConf = false; + } + + if (sLine.Token(1) == "324" && sLine.Token(4).find("k") != CString::npos) { + CChan* pChan = m_pUser->FindChan(sLine.Token(3)); + + if (pChan) { + pChan->SetInConfig(true); + m_bWriteConf = true; + } + } + + return CONTINUE; + } + + virtual void OnJoin(const CNick& Nick, CChan& Channel) { + if (Nick.GetNick() == m_pUser->GetIRCNick().GetNick()) { + Channel.SetInConfig(true); + CZNC::Get().WriteConfig(); + } + } + + virtual void OnPart(const CNick& Nick, CChan& Channel) { + if (Nick.GetNick() == m_pUser->GetIRCNick().GetNick()) { + Channel.SetInConfig(false); + CZNC::Get().WriteConfig(); + } + } + +private: + bool m_bWriteConf; +}; + +MODULEDEFS(CChanSaverMod, "Keep config up-to-date when user joins/parts") diff --git a/modules/nicksaver.cpp b/modules/nicksaver.cpp new file mode 100644 index 00000000..1acece45 --- /dev/null +++ b/modules/nicksaver.cpp @@ -0,0 +1,57 @@ +#include "main.h" +#include "znc.h" +#include "User.h" +#include "Nick.h" +#include "Modules.h" +#include "Chan.h" + +class CChanSaverMod : public CModule { +public: + MODCONSTRUCTOR(CChanSaverMod) { + m_bWriteConf = false; + } + + virtual bool OnLoad(const CString& sArgs) { + return true; + } + + virtual ~CChanSaverMod() { + } + + virtual EModRet OnRaw(CString& sLine) { + if (m_bWriteConf) { + CZNC::Get().WriteConfig(); + m_bWriteConf = false; + } + + if (sLine.Token(1) == "324" && sLine.Token(4).find("k") != CString::npos) { + CChan* pChan = m_pUser->FindChan(sLine.Token(3)); + + if (pChan) { + pChan->SetInConfig(true); + m_bWriteConf = true; + } + } + + return CONTINUE; + } + + virtual void OnJoin(const CNick& Nick, CChan& Channel) { + if (Nick.GetNick() == m_pUser->GetIRCNick().GetNick()) { + Channel.SetInConfig(true); + CZNC::Get().WriteConfig(); + } + } + + virtual void OnPart(const CNick& Nick, CChan& Channel) { + if (Nick.GetNick() == m_pUser->GetIRCNick().GetNick()) { + Channel.SetInConfig(false); + CZNC::Get().WriteConfig(); + } + } + +private: + bool m_bWriteConf; +}; + +MODULEDEFS(CChanSaverMod, "Keep config up-to-date when user joins/parts")