diff options
author | Adam <Adam@anope.org> | 2013-02-15 23:18:34 -0500 |
---|---|---|
committer | Adam <Adam@anope.org> | 2013-02-15 23:18:34 -0500 |
commit | 7be23b7e374d343f60c4b698365719a3aba7f8f2 (patch) | |
tree | 784b6545ee39861118cde78a286dcc831ced5e79 | |
parent | d9c18a6072521bb44418830d2ba1cda14389af20 (diff) |
Fix setting modes on botserv bots in channels that have other bots in them on startup
-rw-r--r-- | modules/protocol/inspircd12.cpp | 9 | ||||
-rw-r--r-- | modules/pseudoclients/botserv.cpp | 2 | ||||
-rw-r--r-- | src/bots.cpp | 2 | ||||
-rw-r--r-- | src/modes.cpp | 3 |
4 files changed, 13 insertions, 3 deletions
diff --git a/modules/protocol/inspircd12.cpp b/modules/protocol/inspircd12.cpp index d00284640..55ab40cd8 100644 --- a/modules/protocol/inspircd12.cpp +++ b/modules/protocol/inspircd12.cpp @@ -235,8 +235,15 @@ class InspIRCd12Proto : public IRCDProto BotInfo *setter = BotInfo::Find(user->nick); for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i) - if (cs.modes.count(ModeManager::ChannelModes[i]->name)) + { + ChannelMode *cm = ModeManager::ChannelModes[i]; + + if (cs.modes.count(cm->name) || cs.modes.count(cm->mchar)) + { c->SetMode(setter, ModeManager::ChannelModes[i], user->GetUID(), false); + cs.modes.insert(cm->name); + } + } } } diff --git a/modules/pseudoclients/botserv.cpp b/modules/pseudoclients/botserv.cpp index fd7f0380e..2c506876a 100644 --- a/modules/pseudoclients/botserv.cpp +++ b/modules/pseudoclients/botserv.cpp @@ -159,7 +159,7 @@ class BotServCore : public Module void OnJoinChannel(User *user, Channel *c) anope_override { - if (c->ci && c->ci->bi) + if (user->server != Me && c->ci && c->ci->bi) { /** * We let the bot join even if it was an ignored user, as if we don't, diff --git a/src/bots.cpp b/src/bots.cpp index a81332ad6..4b47b1cc5 100644 --- a/src/bots.cpp +++ b/src/bots.cpp @@ -147,7 +147,7 @@ void BotInfo::Assign(User *u, ChannelInfo *ci) ci->bi->UnAssign(u, ci); ci->bi = this; - if (ci->c && ci->c->users.size() >= Config->BSMinUsers) + if (Me->IsSynced() && ci->c && ci->c->users.size() >= Config->BSMinUsers) this->Join(ci->c, &ModeManager::DefaultBotModes); } diff --git a/src/modes.cpp b/src/modes.cpp index e50d4affb..d8926d7e8 100644 --- a/src/modes.cpp +++ b/src/modes.cpp @@ -599,6 +599,9 @@ void ModeManager::UpdateDefaultMLock(ServerConfig *config) if (cm && cm->type == MODE_STATUS) DefaultBotModes.modes.insert(cm->name); + else + /* We don't know the mode yet so just use the mode char */ + DefaultBotModes.modes.insert(config->BotModes[i]); } } |