mirror of
https://github.com/znc/znc.git
synced 2026-03-28 17:42:41 +01:00
autocycle: Only cycle once in 15 seconds
This should stop all fights against ChanServ. Please note that nothing will happen if we are the only one in the channel after 15 secs since this module only checks if it needs to do something when someone leaves a channel. Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
@@ -12,7 +12,10 @@
|
||||
|
||||
class CAutoCycleMod : public CModule {
|
||||
public:
|
||||
MODCONSTRUCTOR(CAutoCycleMod) {}
|
||||
MODCONSTRUCTOR(CAutoCycleMod) {
|
||||
m_recentlyCycled.SetTTL(15 * 1000);
|
||||
}
|
||||
|
||||
virtual ~CAutoCycleMod() {}
|
||||
|
||||
virtual bool OnLoad(const CString& sArgs, CString& sMessage) {
|
||||
@@ -120,14 +123,20 @@ protected:
|
||||
if (!IsAutoCycle(Channel.GetName()))
|
||||
return;
|
||||
|
||||
// Did we recently annoy opers via cycling of an empty channel?
|
||||
if (m_recentlyCycled.HasItem(Channel.GetName()))
|
||||
return;
|
||||
|
||||
// Is there only one person left in the channel?
|
||||
if (Channel.GetNickCount() != 1)
|
||||
return;
|
||||
|
||||
// Is that person us and we don't have op?
|
||||
const CNick& pNick = Channel.GetNicks().begin()->second;
|
||||
if (!pNick.HasPerm(CChan::Op) && pNick.GetNick().Equals(m_pNetwork->GetCurNick()))
|
||||
if (!pNick.HasPerm(CChan::Op) && pNick.GetNick().Equals(m_pNetwork->GetCurNick())) {
|
||||
Channel.Cycle();
|
||||
m_recentlyCycled.AddItem(Channel.GetName());
|
||||
}
|
||||
}
|
||||
|
||||
bool AlreadyAdded(const CString& sInput) {
|
||||
@@ -223,6 +232,7 @@ protected:
|
||||
private:
|
||||
vector<CString> m_vsChans;
|
||||
vector<CString> m_vsNegChans;
|
||||
TCacheMap<CString> m_recentlyCycled;
|
||||
};
|
||||
|
||||
template<> void TModInfo<CAutoCycleMod>(CModInfo& Info) {
|
||||
|
||||
Reference in New Issue
Block a user