diff options
author | Adam <Adam@anope.org> | 2013-02-18 22:10:57 -0500 |
---|---|---|
committer | Adam <Adam@anope.org> | 2013-02-18 22:10:57 -0500 |
commit | cb91f991a355344520c468495bd7d0f6f7359027 (patch) | |
tree | 7791925a3f51a564ffcae51b49b6ffc3b211ba93 | |
parent | a49d7b12cb5b75920b718c8fcca8067efbf2f731 (diff) |
Made the mode bouncing detector harder to hit and ignore syncing channels
-rw-r--r-- | src/channels.cpp | 31 | ||||
-rw-r--r-- | src/servers.cpp | 4 |
2 files changed, 24 insertions, 11 deletions
diff --git a/src/channels.cpp b/src/channels.cpp index 2e6023dae..fb0994626 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -125,13 +125,6 @@ void Channel::CheckModes() return; } - if (this->chanserv_modetime != Anope::CurTime) - { - this->chanserv_modecount = 0; - this->chanserv_modetime = Anope::CurTime; - } - this->chanserv_modecount++; - EventReturn MOD_RESULT; FOREACH_RESULT(I_OnCheckModes, OnCheckModes(this)); if (MOD_RESULT == EVENT_STOP) @@ -484,6 +477,17 @@ void Channel::SetMode(BotInfo *bi, ChannelMode *cm, const Anope::string ¶m, return; } + if (Me->IsSynced()) + { + if (this->chanserv_modetime != Anope::CurTime) + { + this->chanserv_modecount = 0; + this->chanserv_modetime = Anope::CurTime; + } + + this->chanserv_modecount++; + } + ModeManager::StackerAdd(bi, this, cm, true, param); MessageSource ms(bi); SetModeInternal(ms, cm, param, enforce_mlock); @@ -524,6 +528,17 @@ void Channel::RemoveMode(BotInfo *bi, ChannelMode *cm, const Anope::string ¶ this->GetParam(cmp->name, realparam); } + if (Me->IsSynced()) + { + if (this->chanserv_modetime != Anope::CurTime) + { + this->chanserv_modecount = 0; + this->chanserv_modetime = Anope::CurTime; + } + + this->chanserv_modecount++; + } + ModeManager::StackerAdd(bi, this, cm, false, realparam); MessageSource ms(bi); RemoveModeInternal(ms, cm, realparam, enforce_mlock); @@ -616,7 +631,7 @@ void Channel::SetModes(BotInfo *bi, bool enforce_mlock, const char *cmodes, ...) void Channel::SetModesInternal(MessageSource &source, const Anope::string &mode, time_t ts, bool enforce_mlock) { - if (source.GetServer()) + if (source.GetServer() && source.GetServer()->IsSynced()) { if (Anope::CurTime != this->server_modetime) { diff --git a/src/servers.cpp b/src/servers.cpp index 2b4fea2db..1dd9d8a37 100644 --- a/src/servers.cpp +++ b/src/servers.cpp @@ -280,9 +280,7 @@ void Server::Sync(bool sync_links) for (channel_map::const_iterator it = ChannelList.begin(), it_end = ChannelList.end(); it != it_end; ++it) { Channel *c = it->second; - c->CheckModes(); - if (c->ci) - c->ci->RestoreTopic(); + c->Sync(); } if (!Anope::NoFork && Anope::AtTerm()) |