summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bots.cpp2
-rw-r--r--src/channels.cpp15
-rw-r--r--src/init.cpp6
-rw-r--r--src/logger.cpp8
-rw-r--r--src/modes.cpp6
-rw-r--r--src/operserv.cpp4
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;