diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-04-02 23:53:29 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-04-02 23:53:29 +0000 |
commit | 57608fe351cff19679b1d78fb5cbfb7cad89dfc1 (patch) | |
tree | d88625afe327da2794cd34bd4d723d87df251cb7 /src/modes/cmode_b.cpp | |
parent | 80959555778404b7f0cdd4bd171ea7e1fe6116e9 (diff) |
Fixes for bug #493, tidyups to clearing of channel modes on losing FJOIN. Module unloads may also be tidied at a future date but it means reordering some loops in mode.cpp. See around the comment added.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9283 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modes/cmode_b.cpp')
-rw-r--r-- | src/modes/cmode_b.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/modes/cmode_b.cpp b/src/modes/cmode_b.cpp index 1efb5d399..4eea2e44d 100644 --- a/src/modes/cmode_b.cpp +++ b/src/modes/cmode_b.cpp @@ -49,7 +49,7 @@ ModeAction ModeChannelBan::OnModeChange(User* source, User*, Channel* channel, s return MODEACTION_ALLOW; } -void ModeChannelBan::RemoveMode(Channel* channel) +void ModeChannelBan::RemoveMode(Channel* channel, irc::modestacker* stack) { BanList copy; char moderemove[MAXBUF]; @@ -61,13 +61,20 @@ void ModeChannelBan::RemoveMode(Channel* channel) for (BanList::iterator i = copy.begin(); i != copy.end(); i++) { - sprintf(moderemove,"-%c",this->GetModeChar()); - const char* parameters[] = { channel->name, moderemove, i->data }; - ServerInstance->SendMode(parameters, 3, ServerInstance->FakeClient); + if (stack) + { + stack->Push(this->GetModeChar(), i->data); + } + else + { + sprintf(moderemove,"-%c",this->GetModeChar()); + const char* parameters[] = { channel->name, moderemove, i->data }; + ServerInstance->SendMode(parameters, 3, ServerInstance->FakeClient); + } } } -void ModeChannelBan::RemoveMode(User*) +void ModeChannelBan::RemoveMode(User*, irc::modestacker* stack) { } |