diff options
Diffstat (limited to 'src/core/cs_modes.c')
-rw-r--r-- | src/core/cs_modes.c | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/src/core/cs_modes.c b/src/core/cs_modes.c index e2d6028bf..128c1fb8e 100644 --- a/src/core/cs_modes.c +++ b/src/core/cs_modes.c @@ -381,10 +381,21 @@ class CSModes : public Module this->AddCommand(CHANSERV, new CommandCSVoice()); this->AddCommand(CHANSERV, new CommandCSDeVoice()); - if (ModeManager::FindChannelModeByName(CMODE_HALFOP)) + if (serv_uplink && is_sync(serv_uplink)) + OnUplinkSync(); + + Implementation i[] = { + I_OnUplinkSync, I_OnServerDisconnect, I_OnChanServHelp + }; + ModuleManager::Attach(i, this, 3); + } + + void OnUplinkSync() + { + if (ModeManager::FindChannelModeByName(CMODE_OWNER)) { - this->AddCommand(CHANSERV, new CommandCSHalfOp()); - this->AddCommand(CHANSERV, new CommandCSDeHalfOp()); + this->AddCommand(CHANSERV, new CommandCSOwner()); + this->AddCommand(CHANSERV, new CommandCSDeOwner()); } if (ModeManager::FindChannelModeByName(CMODE_PROTECT)) @@ -393,14 +404,23 @@ class CSModes : public Module this->AddCommand(CHANSERV, new CommandCSDeProtect()); } - if (ModeManager::FindChannelModeByName(CMODE_OWNER)) + if (ModeManager::FindChannelModeByName(CMODE_HALFOP)) { - this->AddCommand(CHANSERV, new CommandCSOwner()); - this->AddCommand(CHANSERV, new CommandCSDeOwner()); + this->AddCommand(CHANSERV, new CommandCSHalfOp()); + this->AddCommand(CHANSERV, new CommandCSDeHalfOp()); } + } - ModuleManager::Attach(I_OnChanServHelp, this); + void OnServerDisconnect() + { + this->DelCommand(CHANSERV, "OWNER"); + this->DelCommand(CHANSERV, "DEOWNER"); + this->DelCommand(CHANSERV, "PROTECT"); + this->DelCommand(CHANSERV, "DEPROTECT"); + this->DelCommand(CHANSERV, "HALFOP"); + this->DelCommand(CHANSERV, "DEHALFOP"); } + void OnChanServHelp(User *u) { if (ModeManager::FindChannelModeByName(CMODE_OWNER)) |