summaryrefslogtreecommitdiff
path: root/src/channels.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/channels.cpp')
-rw-r--r--src/channels.cpp15
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);