mirror of
https://github.com/znc/znc.git
synced 2026-08-06 08:52:57 +02:00
Add new module call OnMode()
It's basically OnRawMode() but once per single mode. Oh and this also fixes a problem where ZNC lost track of chan modes with params (See hunk in CChan::AddMode). git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@1189 726aef4b-f618-498e-8847-2d620e286838
This commit is contained in:
@@ -330,6 +330,18 @@ void CChan::ModeChange(const CString& sModes, const CString& sOpNick) {
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef _MODULES
|
||||
bool bNoChange;
|
||||
if (bList) {
|
||||
bNoChange = false;
|
||||
} else if (bAdd) {
|
||||
bNoChange = HasMode(uMode) && GetModeArg(uMode) == sArg;
|
||||
} else {
|
||||
bNoChange = !HasMode(uMode);
|
||||
}
|
||||
MODULECALL(OnMode(*pOpNick, *this, uMode, sArg, bAdd, bNoChange), m_pUser, NULL, );
|
||||
#endif
|
||||
|
||||
if (!bList) {
|
||||
(bAdd) ? AddMode(uMode, sArg) : RemMode(uMode, sArg);
|
||||
}
|
||||
@@ -372,10 +384,6 @@ bool CChan::HasMode(unsigned char uMode) const {
|
||||
}
|
||||
|
||||
bool CChan::AddMode(unsigned char uMode, const CString& sArg) {
|
||||
if (HasMode(uMode)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
m_musModes[uMode] = sArg;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -460,6 +460,7 @@ void CModule::OnDeop(const CNick& OpNick, const CNick& Nick, CChan& Channel, boo
|
||||
void CModule::OnVoice(const CNick& OpNick, const CNick& Nick, CChan& Channel, bool bNoChange) {}
|
||||
void CModule::OnDevoice(const CNick& OpNick, const CNick& Nick, CChan& Channel, bool bNoChange) {}
|
||||
void CModule::OnRawMode(const CNick& OpNick, CChan& Channel, const CString& sModes, const CString& sArgs) {}
|
||||
void CModule::OnMode(const CNick& OpNick, CChan& Channel, char uMode, const CString& sArg, bool bAdded, bool bNoChange) {}
|
||||
|
||||
CModule::EModRet CModule::OnRaw(CString& sLine) { return CONTINUE; }
|
||||
|
||||
@@ -583,6 +584,7 @@ bool CModules::OnDeop(const CNick& OpNick, const CNick& Nick, CChan& Channel, bo
|
||||
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::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::OnUserAttached() { MODUNLOADCHK(OnUserAttached()); return false; }
|
||||
|
||||
@@ -239,6 +239,7 @@ public:
|
||||
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 void OnMode(const CNick& OpNick, CChan& Channel, char uMode, const CString& sArg, bool bAdded, bool bNoChange);
|
||||
|
||||
virtual EModRet OnRaw(CString& sLine);
|
||||
|
||||
@@ -379,6 +380,7 @@ public:
|
||||
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 OnMode(const CNick& OpNick, CChan& Channel, char uMode, const CString& sArg, bool bAdded, bool bNoChange);
|
||||
|
||||
virtual bool OnRaw(CString& sLine);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user