diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bots.cpp | 2 | ||||
-rw-r--r-- | src/channels.cpp | 15 | ||||
-rw-r--r-- | src/init.cpp | 6 | ||||
-rw-r--r-- | src/logger.cpp | 8 | ||||
-rw-r--r-- | src/modes.cpp | 6 | ||||
-rw-r--r-- | src/operserv.cpp | 4 |
6 files changed, 27 insertions, 14 deletions
diff --git a/src/bots.cpp b/src/bots.cpp index e6124e135..13b21e1ce 100644 --- a/src/bots.cpp +++ b/src/bots.cpp @@ -183,7 +183,7 @@ void BotInfo::Join(Channel *c, bool update_ts) } if (!update_ts) ircdproto->SendJoin(this, c->name, c->creation_time); - else + else if (Me && Me->IsSynced()) { ircdproto->SendJoin(this, cc); diff --git a/src/channels.cpp b/src/channels.cpp index 55de669fd..389577f71 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -82,10 +82,21 @@ void Channel::Reset() { UserContainer *uc = *it; + Flags<ChannelModeName, CMODE_END * 2> flags = *debug_cast<Flags<ChannelModeName, CMODE_END * 2> *>(uc->Status); + uc->Status->ClearFlags(); + if (findbot(uc->user->nick)) - continue; + { + for (std::map<char, ChannelMode *>::iterator mit = ModeManager::ChannelModesByChar.begin(), mit_end = ModeManager::ChannelModesByChar.end(); mit != mit_end; ++mit) + { + ChannelMode *cm = mit->second; - uc->Status->ClearFlags(); + if (flags.HasFlag(cm->Name)) + { + this->SetMode(NULL, cm, uc->user->nick, false); + } + } + } } check_modes(this); diff --git a/src/init.cpp b/src/init.cpp index 94cf37ce9..da3c30587 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -353,9 +353,6 @@ void Init(int ac, char **av) if (!Config->s_GlobalNoticer.empty()) new BotInfo(Config->s_GlobalNoticer, Config->ServiceUser, Config->ServiceHost, Config->desc_GlobalNoticer); - /* Init the log channels */ - InitLogChannels(Config); - /* Add Encryption Modules */ ModuleManager::LoadModuleList(Config->EncModuleList); @@ -437,6 +434,9 @@ void Init(int ac, char **av) rand_init(); add_entropy_userkeys(); + /* Init log channels */ + InitLogChannels(Config); + /* Load up databases */ Log() << "Loading databases..."; EventReturn MOD_RESULT; diff --git a/src/logger.cpp b/src/logger.cpp index de5e58c32..a5637d4d8 100644 --- a/src/logger.cpp +++ b/src/logger.cpp @@ -27,8 +27,12 @@ void InitLogChannels(ServerConfig *config) if (target[0] == '#') { Channel *c = findchan(target); + bool created = false; if (!c) + { c = new Channel(target); + created = true; + } c->SetFlag(CH_LOGCHAN); c->SetFlag(CH_PERSIST); @@ -38,9 +42,7 @@ void InitLogChannels(ServerConfig *config) if (bi->HasFlag(BI_CORE) && !c->FindUser(bi)) { - bi->Join(c); - for (unsigned j = 0; j < config->BotModeList.size(); ++j) - c->SetMode(OperServ, config->BotModeList[j], bi->nick, false); + bi->Join(c, created); } } } diff --git a/src/modes.cpp b/src/modes.cpp index da9f22bef..d3f8ddb9f 100644 --- a/src/modes.cpp +++ b/src/modes.cpp @@ -28,9 +28,9 @@ std::map<ChannelModeName, ChannelMode *> ModeManager::ChannelModesByName; /* Number of generic modes we support */ unsigned GenericChannelModes = 0, GenericUserModes = 0; /* Default mlocked modes on */ -Flags<ChannelModeName> DefMLockOn; +Flags<ChannelModeName, CMODE_END * 2> DefMLockOn; /* Default mlocked modes off */ -Flags<ChannelModeName> DefMLockOff; +Flags<ChannelModeName, CMODE_END * 2> DefMLockOff; /* Map for default mlocked mode parameters */ std::map<ChannelModeName, Anope::string> DefMLockParams; @@ -41,7 +41,7 @@ void SetDefaultMLock(ServerConfig *config) DefMLockOn.ClearFlags(); DefMLockOff.ClearFlags(); DefMLockParams.clear(); - Flags<ChannelModeName> *ptr = NULL; + Flags<ChannelModeName, CMODE_END * 2> *ptr = NULL; Anope::string modes, param; spacesepstream sep(config->MLock); diff --git a/src/operserv.cpp b/src/operserv.cpp index 89e84a73e..bbc38eb1a 100644 --- a/src/operserv.cpp +++ b/src/operserv.cpp @@ -18,9 +18,9 @@ std::vector<NewsItem *> News; std::vector<std::bitset<32> > DefCon; bool DefConModesSet = false; /* Defcon modes mlocked on */ -Flags<ChannelModeName> DefConModesOn; +Flags<ChannelModeName, CMODE_END * 2> DefConModesOn; /* Defcon modes mlocked off */ -Flags<ChannelModeName> DefConModesOff; +Flags<ChannelModeName, CMODE_END * 2> DefConModesOff; /* Map of Modesa and Params for DefCon */ std::map<ChannelModeName, Anope::string> DefConModesOnParams; |