diff options
Diffstat (limited to 'src/channels.cpp')
-rw-r--r-- | src/channels.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
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); |