summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2013-02-18 22:10:57 -0500
committerAdam <Adam@anope.org>2013-02-18 22:10:57 -0500
commitcb91f991a355344520c468495bd7d0f6f7359027 (patch)
tree7791925a3f51a564ffcae51b49b6ffc3b211ba93
parenta49d7b12cb5b75920b718c8fcca8067efbf2f731 (diff)
Made the mode bouncing detector harder to hit and ignore syncing channels
-rw-r--r--src/channels.cpp31
-rw-r--r--src/servers.cpp4
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 &param,
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 &para
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())