diff options
Diffstat (limited to 'src/modes')
-rw-r--r-- | src/modes/cmode_b.cpp | 25 | ||||
-rw-r--r-- | src/modes/cmode_h.cpp | 26 | ||||
-rw-r--r-- | src/modes/cmode_k.cpp | 24 | ||||
-rw-r--r-- | src/modes/cmode_o.cpp | 27 | ||||
-rw-r--r-- | src/modes/cmode_v.cpp | 26 |
5 files changed, 127 insertions, 1 deletions
diff --git a/src/modes/cmode_b.cpp b/src/modes/cmode_b.cpp index 546bcb30f..9e2c777f0 100644 --- a/src/modes/cmode_b.cpp +++ b/src/modes/cmode_b.cpp @@ -37,6 +37,31 @@ ModeAction ModeChannelBan::OnModeChange(userrec* source, userrec* dest, chanrec* return MODEACTION_ALLOW; } +void ModeChannelBan::RemoveMode(chanrec* channel) +{ + BanList copy; + char moderemove[MAXBUF]; + userrec* n = new userrec(ServerInstance); + n->SetFd(FD_MAGIC_NUMBER); + + for (BanList::iterator i = channel->bans.begin(); i != channel->bans.end(); i++) + { + copy.push_back(*i); + } + 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, n); + } + + delete n; +} + +void ModeChannelBan::RemoveMode(userrec* user) +{ +} + void ModeChannelBan::DisplayList(userrec* user, chanrec* channel) { /* Display the channel banlist */ diff --git a/src/modes/cmode_h.cpp b/src/modes/cmode_h.cpp index 9197cbd72..667402ace 100644 --- a/src/modes/cmode_h.cpp +++ b/src/modes/cmode_h.cpp @@ -32,6 +32,32 @@ ModePair ModeChannelHalfOp::ModeSet(userrec* source, userrec* dest, chanrec* cha return std::make_pair(false, parameter); } +void ModeChannelHalfOp::RemoveMode(chanrec* channel) +{ + CUList* list = channel->GetHalfoppedUsers(); + CUList copy; + char moderemove[MAXBUF]; + userrec* n = new userrec(ServerInstance); + n->SetFd(FD_MAGIC_NUMBER); + + for (CUList::iterator i = list->begin(); i != list->end(); i++) + { + userrec* n = i->second; + copy.insert(std::make_pair(n,n)); + } + for (CUList::iterator i = copy.begin(); i != copy.end(); i++) + { + sprintf(moderemove,"-%c",this->GetModeChar()); + const char* parameters[] = { channel->name, moderemove, i->second->nick }; + ServerInstance->SendMode(parameters, 3, n); + } + delete n; +} + +void ModeChannelHalfOp::RemoveMode(userrec* user) +{ +} + ModeAction ModeChannelHalfOp::OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string ¶meter, bool adding) { /* If halfops are not enabled in the conf, we don't execute diff --git a/src/modes/cmode_k.cpp b/src/modes/cmode_k.cpp index 4f95f3ad1..b32ad5c2b 100644 --- a/src/modes/cmode_k.cpp +++ b/src/modes/cmode_k.cpp @@ -18,7 +18,29 @@ ModePair ModeChannelKey::ModeSet(userrec* source, userrec* dest, chanrec* channe { return std::make_pair(false, parameter); } -} +} + +void ModeChannelKey::RemoveMode(chanrec* channel) +{ + char moderemove[MAXBUF]; + const char* parameters[] = { channel->name, moderemove, channel->key }; + + if (channel->IsModeSet(this->GetModeChar())) + { + userrec* n = new userrec(ServerInstance); + + sprintf(moderemove,"-%c",this->GetModeChar()); + n->SetFd(FD_MAGIC_NUMBER); + + ServerInstance->SendMode(parameters, 3, n); + + delete n; + } +} + +void ModeChannelKey::RemoveMode(userrec* user) +{ +} bool ModeChannelKey::CheckTimeStamp(time_t theirs, time_t ours, const std::string &their_param, const std::string &our_param, chanrec* channel) { diff --git a/src/modes/cmode_o.cpp b/src/modes/cmode_o.cpp index 85eb08c38..b9fb0208b 100644 --- a/src/modes/cmode_o.cpp +++ b/src/modes/cmode_o.cpp @@ -32,6 +32,33 @@ ModePair ModeChannelOp::ModeSet(userrec* source, userrec* dest, chanrec* channel return std::make_pair(false, parameter); } + +void ModeChannelOp::RemoveMode(chanrec* channel) +{ + CUList* list = channel->GetOppedUsers(); + CUList copy; + char moderemove[MAXBUF]; + userrec* n = new userrec(ServerInstance); + n->SetFd(FD_MAGIC_NUMBER); + + for (CUList::iterator i = list->begin(); i != list->end(); i++) + { + userrec* n = i->second; + copy.insert(std::make_pair(n,n)); + } + for (CUList::iterator i = copy.begin(); i != copy.end(); i++) + { + sprintf(moderemove,"-%c",this->GetModeChar()); + const char* parameters[] = { channel->name, moderemove, i->second->nick }; + ServerInstance->SendMode(parameters, 3, n); + } + delete n; +} + +void ModeChannelOp::RemoveMode(userrec* user) +{ +} + ModeAction ModeChannelOp::OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string ¶meter, bool adding) { int status = channel->GetStatus(source); diff --git a/src/modes/cmode_v.cpp b/src/modes/cmode_v.cpp index 50b74cef7..9fd5df7bd 100644 --- a/src/modes/cmode_v.cpp +++ b/src/modes/cmode_v.cpp @@ -32,6 +32,32 @@ ModePair ModeChannelVoice::ModeSet(userrec* source, userrec* dest, chanrec* chan return std::make_pair(false, parameter); } +void ModeChannelVoice::RemoveMode(chanrec* channel) +{ + CUList* list = channel->GetVoicedUsers(); + CUList copy; + char moderemove[MAXBUF]; + userrec* n = new userrec(ServerInstance); + n->SetFd(FD_MAGIC_NUMBER); + + for (CUList::iterator i = list->begin(); i != list->end(); i++) + { + userrec* n = i->second; + copy.insert(std::make_pair(n,n)); + } + for (CUList::iterator i = copy.begin(); i != copy.end(); i++) + { + sprintf(moderemove,"-%c",this->GetModeChar()); + const char* parameters[] = { channel->name, moderemove, i->second->nick }; + ServerInstance->SendMode(parameters, 3, n); + } + delete n; +} + +void ModeChannelVoice::RemoveMode(userrec* user) +{ +} + ModeAction ModeChannelVoice::OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string ¶meter, bool adding) { int status = channel->GetStatus(source); |