summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/cs_modes.c591
1 files changed, 340 insertions, 251 deletions
diff --git a/src/core/cs_modes.c b/src/core/cs_modes.c
index 090cc7afe..58d19549e 100644
--- a/src/core/cs_modes.c
+++ b/src/core/cs_modes.c
@@ -15,71 +15,6 @@
#include "module.h"
-void myChanServHelp(User * u);
-int do_util(User * u, CSModeUtil * util);
-int do_op(User * u);
-int do_deop(User * u);
-int do_voice(User * u);
-int do_devoice(User * u);
-int do_halfop(User * u);
-int do_dehalfop(User * u);
-int do_protect(User * u);
-int do_deprotect(User * u);
-int do_owner(User * u);
-int do_deowner(User * u);
-
-class CSModes : public Module
-{
- public:
- CSModes(const std::string &modname, const std::string &creator) : Module(modname, creator)
- {
- Command *c;
-
- this->SetAuthor("Anope");
- this->SetVersion("$Id$");
- this->SetType(CORE);
-
- c = createCommand("OP", do_op, NULL, CHAN_HELP_OP, -1, -1, -1, -1);
- this->AddCommand(CHANSERV, c, MOD_UNIQUE);
- c = createCommand("DEOP", do_deop, NULL, CHAN_HELP_DEOP, -1, -1, -1, -1);
- this->AddCommand(CHANSERV, c, MOD_UNIQUE);
- c = createCommand("VOICE", do_voice, NULL, CHAN_HELP_VOICE, -1, -1, -1, -1);
- this->AddCommand(CHANSERV, c, MOD_UNIQUE);
- c = createCommand("DEVOICE", do_devoice, NULL, CHAN_HELP_DEVOICE, -1, -1, -1, -1);
- this->AddCommand(CHANSERV, c, MOD_UNIQUE);
- if (ircd->halfop)
- {
- c = createCommand("HALFOP", do_halfop, NULL, CHAN_HELP_HALFOP, -1, -1, -1, -1);
- this->AddCommand(CHANSERV, c, MOD_UNIQUE);
- c = createCommand("DEHALFOP", do_dehalfop, NULL, CHAN_HELP_DEHALFOP, -1, -1, -1, -1);
- this->AddCommand(CHANSERV, c, MOD_UNIQUE);
- }
- if (ircd->protect)
- {
- c = createCommand("PROTECT", do_protect, NULL, CHAN_HELP_PROTECT, -1, -1, -1, -1);
- this->AddCommand(CHANSERV, c, MOD_UNIQUE);
- c = createCommand("DEPROTECT", do_deprotect, NULL, CHAN_HELP_DEPROTECT, -1, -1, -1, -1);
- this->AddCommand(CHANSERV, c, MOD_UNIQUE);
- }
- if (ircd->owner)
- {
- c = createCommand("OWNER", do_owner, NULL, CHAN_HELP_OWNER, -1, -1, -1, -1);
- this->AddCommand(CHANSERV, c, MOD_UNIQUE);
- c = createCommand("DEOWNER", do_deowner, NULL, CHAN_HELP_DEOWNER, -1, -1, -1, -1);
- this->AddCommand(CHANSERV, c, MOD_UNIQUE);
- }
- if (ircd->admin)
- {
- c = createCommand("ADMIN", do_protect, NULL, CHAN_HELP_PROTECT, -1, -1, -1, -1);
- this->AddCommand(CHANSERV, c, MOD_UNIQUE);
- c = createCommand("DEADMIN", do_deprotect, NULL, CHAN_HELP_DEPROTECT, -1, -1, -1, -1);
- this->AddCommand(CHANSERV, c, MOD_UNIQUE);
- }
-
- this->SetChanHelp(myChanServHelp);
- }
-};
-
/**
* Add the help response to anopes /cs help output.
* @param u The user who is requesting help
@@ -108,264 +43,418 @@ void myChanServHelp(User * u)
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_DEVOICE);
}
-/**
- * The /cs op/deop/voice/devoice etc.. commands.
- * @param u The user who issued the command
- * @param MOD_CONT to continue processing other modules, MOD_STOP to stop processing.
- **/
+/* do_util: not a command, but does the job of other */
-int do_op(User * u)
+static CommandReturn do_util(User *u, CSModeUtil *util, const char *chan, const char *nick)
{
- return do_util(u, &csmodeutils[MUT_OP]);
-}
+ const char *av[2];
+ Channel *c;
+ ChannelInfo *ci;
+ User *u2;
-/*************************************************************************/
+ int is_same;
-int do_deop(User * u)
-{
- return do_util(u, &csmodeutils[MUT_DEOP]);
-}
+ if (!chan) {
+ struct u_chanlist *uc;
-/*************************************************************************/
+ av[0] = util->mode;
+ av[1] = u->nick;
-int do_voice(User * u)
-{
- return do_util(u, &csmodeutils[MUT_VOICE]);
-}
+ /* Sets the mode to the user on every channels he is on. */
-/*************************************************************************/
+ for (uc = u->chans; uc; uc = uc->next) {
+ if ((ci = uc->chan->ci) && !(ci->flags & CI_VERBOTEN)
+ && check_access(u, ci, util->levelself)) {
+ ircdproto->SendMode(whosends(ci), uc->chan->name, "%s %s",
+ util->mode, u->nick);
+ chan_set_modes(s_ChanServ, uc->chan, 2, av, 2);
-int do_devoice(User * u)
-{
- return do_util(u, &csmodeutils[MUT_DEVOICE]);
-}
+ if (util->notice && ci->flags & util->notice)
+ ircdproto->SendMessage(whosends(ci), uc->chan->name,
+ "%s command used for %s by %s", util->name,
+ u->nick, u->nick);
+ }
+ }
-/*************************************************************************/
+ return MOD_CONT;
+ } else if (!nick) {
+ nick = u->nick;
+ }
-int do_halfop(User * u)
-{
- if (ircd->halfop) {
- return do_util(u, &csmodeutils[MUT_HALFOP]);
+ is_same = (nick == u->nick) ? 1 : (stricmp(nick, u->nick) == 0);
+
+ if (!(c = findchan(chan))) {
+ notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
+ } else if (!(ci = c->ci)) {
+ notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
+ } else if (ci->flags & CI_VERBOTEN) {
+ notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
+ } else if (is_same ? !(u2 = u) : !(u2 = finduser(nick))) {
+ notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, nick);
+ } else if (!is_on_chan(c, u2)) {
+ notice_lang(s_ChanServ, u, NICK_X_NOT_ON_CHAN, u2->nick, c->name);
+ } else if (is_same ? !check_access(u, ci, util->levelself) :
+ !check_access(u, ci, util->level)) {
+ notice_lang(s_ChanServ, u, ACCESS_DENIED);
+ } else if (*util->mode == '-' && !is_same && (ci->flags & CI_PEACE)
+ && (get_access(u2, ci) >= get_access(u, ci))) {
+ notice_lang(s_ChanServ, u, PERMISSION_DENIED);
+ } else if (*util->mode == '-' && is_protected(u2) && !is_same) {
+ notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
- return MOD_CONT;
+ ircdproto->SendMode(whosends(ci), c->name, "%s %s", util->mode,
+ u2->nick);
+
+ av[0] = util->mode;
+ av[1] = u2->nick;
+ chan_set_modes(s_ChanServ, c, 2, av, 3);
+
+ if (util->notice && ci->flags & util->notice)
+ ircdproto->SendMessage(whosends(ci), c->name, "%s command used for %s by %s",
+ util->name, u2->nick, u->nick);
}
+ return MOD_CONT;
}
-/*************************************************************************/
-int do_dehalfop(User * u)
+class CommandCSOp : public Command
{
- if (ircd->halfop) {
- return do_util(u, &csmodeutils[MUT_DEHALFOP]);
- } else {
- return MOD_CONT;
+ public:
+ CommandCSOp() : Command("OP", 2, 2)
+ {
+
}
-}
-/*************************************************************************/
+ CommandReturn Execute(User *u, std::vector<std::string> &params)
+ {
+ return do_util(u, &csmodeutils[MUT_OP], params[0].c_str(), params[1].c_str());
+ }
-int do_protect(User * u)
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ notice_lang(s_ChanServ, u, CHAN_HELP_OP);
+ return true;
+ }
+};
+
+
+class CommandCSDeOp : public Command
{
- if (ircd->protect || ircd->admin) {
- return do_util(u, &csmodeutils[MUT_PROTECT]);
- } else {
- return MOD_CONT;
+ public:
+ CommandCSDeOp() : Command("DEOP", 2, 2)
+ {
+
}
-}
-/*************************************************************************/
+ CommandReturn Execute(User *u, std::vector<std::string> &params)
+ {
+ return do_util(u, &csmodeutils[MUT_DEOP], params[0].c_str(), params[1].c_str());
+ }
-int do_deprotect(User * u)
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ notice_lang(s_ChanServ, u, CHAN_HELP_DEOP);
+ return true;
+ }
+};
+
+
+class CommandCSVoice : public Command
{
- if (ircd->protect || ircd->admin) {
- return do_util(u, &csmodeutils[MUT_DEPROTECT]);
- } else {
- return MOD_CONT;
+ public:
+ CommandCSVoice() : Command("VOICE", 2, 2)
+ {
+
}
-}
-/*************************************************************************/
+ CommandReturn Execute(User *u, std::vector<std::string> &params)
+ {
+ return do_util(u, &csmodeutils[MUT_VOICE], params[0].c_str(), params[1].c_str());
+ }
+
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ notice_lang(s_ChanServ, u, CHAN_HELP_VOICE);
+ return true;
+ }
+};
+
-int do_owner(User * u)
+class CommandCSDeVoice : public Command
{
- const char *av[2];
- char *chan = strtok(NULL, " ");
+ public:
+ CommandCSDeVoice() : Command("DEVOICE", 2, 2)
+ {
- Channel *c;
- ChannelInfo *ci;
- struct u_chanlist *uc;
+ }
- if (!ircd->owner) {
- return MOD_CONT;
+ CommandReturn Execute(User *u, std::vector<std::string> &params)
+ {
+ return do_util(u, &csmodeutils[MUT_DEVOICE], params[0].c_str(), params[1].c_str());
}
- if (!chan) {
- av[0] = ircd->ownerset;
- av[1] = u->nick;
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ notice_lang(s_ChanServ, u, CHAN_HELP_DEVOICE);
+ return true;
+ }
+};
- /* Sets the mode to the user on every channels he is on. */
- for (uc = u->chans; uc; uc = uc->next) {
- if ((ci = uc->chan->ci) && !(ci->flags & CI_VERBOTEN)
- && is_founder(u, ci)) {
- ircdproto->SendMode(whosends(ci), uc->chan->name, "%s %s",
- av[0], u->nick);
- chan_set_modes(s_ChanServ, uc->chan, 2, av, 1);
- }
- }
+class CommandCSHalfOp : public Command
+{
+ public:
+ CommandCSHalfOp() : Command("HALFOP", 2, 2)
+ {
- return MOD_CONT;
}
- if (!(c = findchan(chan))) {
- notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
- } else if (!(ci = c->ci)) {
- notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
- } else if (ci->flags & CI_VERBOTEN) {
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
- } else if (!is_on_chan(c, u)) {
- notice_lang(s_ChanServ, u, NICK_X_NOT_ON_CHAN, u->nick, c->name);
- } else if (!is_founder(u, ci)) {
- notice_lang(s_ChanServ, u, ACCESS_DENIED);
- } else {
- ircdproto->SendMode(whosends(ci), c->name, "%s %s", ircd->ownerset,
- u->nick);
+ CommandReturn Execute(User *u, std::vector<std::string> &params)
+ {
+ if (!ircd->halfop)
+ {
+ return MOD_CONT;
- av[0] = ircd->ownerset;
- av[1] = u->nick;
- chan_set_modes(s_ChanServ, c, 2, av, 1);
+ }
+
+ return do_util(u, &csmodeutils[MUT_HALFOP], params[0].c_str(), params[1].c_str());
}
- return MOD_CONT;
-}
-/*************************************************************************/
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ notice_lang(s_ChanServ, u, CHAN_HELP_HALFOP);
+ return true;
+ }
+};
-int do_deowner(User * u)
+
+class CommandCSDeHalfOp : public Command
{
- const char *av[2];
- char *chan = strtok(NULL, " ");
+ public:
+ CommandCSDeHalfOp() : Command("DEHALFOP", 2, 2)
+ {
- Channel *c;
- ChannelInfo *ci;
- struct u_chanlist *uc;
+ }
- if (!ircd->owner) {
- return MOD_CONT;
+ CommandReturn Execute(User *u, std::vector<std::string> &params)
+ {
+ if (!ircd->halfop)
+ {
+ return MOD_CONT;
+ }
+
+ return do_util(u, &csmodeutils[MUT_DEHALFOP], params[0].c_str(), params[1].c_str());
}
- if (!chan) {
- av[0] = ircd->ownerunset;
- av[1] = u->nick;
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ notice_lang(s_ChanServ, u, CHAN_HELP_DEHALFOP);
+ return true;
+ }
+};
- /* Sets the mode to the user on every channels he is on. */
- for (uc = u->chans; uc; uc = uc->next) {
- if ((ci = uc->chan->ci) && !(ci->flags & CI_VERBOTEN)
- && is_founder(u, ci)) {
- ircdproto->SendMode(whosends(ci), uc->chan->name, "%s %s",
- av[0], u->nick);
- chan_set_modes(s_ChanServ, uc->chan, 2, av, 1);
- }
+class CommandCSProtect : public Command
+{
+ public:
+ CommandCSProtect() : Command("PROTECT", 2, 2)
+ {
+
+ }
+
+ CommandReturn Execute(User *u, std::vector<std::string> &params)
+ {
+ if (!ircd->protect && !ircd->admin)
+ {
+ return MOD_CONT;
}
- return MOD_CONT;
+ return do_util(u, &csmodeutils[MUT_PROTECT], params[0].c_str(), params[1].c_str());
}
- if (!(c = findchan(chan))) {
- notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
- } else if (!(ci = c->ci)) {
- notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
- } else if (ci->flags & CI_VERBOTEN) {
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
- } else if (!is_on_chan(c, u)) {
- notice_lang(s_ChanServ, u, NICK_X_NOT_ON_CHAN, u->nick, c->name);
- } else if (!is_founder(u, ci)) {
- notice_lang(s_ChanServ, u, ACCESS_DENIED);
- } else {
- ircdproto->SendMode(whosends(ci), c->name, "%s %s", ircd->ownerunset,
- u->nick);
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ notice_lang(s_ChanServ, u, CHAN_HELP_PROTECT);
+ return true;
+ }
+};
+
+/*************************************************************************/
+
+class CommandCSDeProtect : public Command
+{
+ public:
+ CommandCSDeProtect() : Command("DEPROTECT", 2, 2)
+ {
- av[0] = ircd->ownerunset;
- av[1] = u->nick;
- chan_set_modes(s_ChanServ, c, 2, av, 1);
}
- return MOD_CONT;
-}
-/* do_util: not a command, but does the job of other */
+ CommandReturn Execute(User *u, std::vector<std::string> &params)
+ {
+ if (!ircd->protect && !ircd->admin)
+ {
+ return MOD_CONT;
+ }
+
+ return do_util(u, &csmodeutils[MUT_DEPROTECT], params[0].c_str(), params[1].c_str());
+ }
+
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ notice_lang(s_ChanServ, u, CHAN_HELP_DEPROTECT);
+ return true;
+ }
+};
-int do_util(User * u, CSModeUtil * util)
+/*************************************************************************/
+
+class CommandCSOwner : public Command
{
- const char *av[2];
- char *chan = strtok(NULL, " ");
- char *nick = strtok(NULL, " ");
+ public:
+ CommandCSOwner() : Command("OWNER", 2, 2)
+ {
- Channel *c;
- ChannelInfo *ci;
- User *u2;
+ }
- int is_same;
+ CommandReturn Execute(User *u, std::vector<std::string> &params)
+ {
+ const char *av[2];
+ const char *chan = params[0].c_str();
+ const char *nick = params[1].c_str();
+ User *u2;
+ Channel *c;
+ ChannelInfo *ci;
+
+ if (!ircd->owner)
+ {
+ return MOD_CONT;
+ }
- if (!chan) {
- struct u_chanlist *uc;
+ if (!(c = findchan(chan))) {
+ notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
+ } else if (!(ci = c->ci)) {
+ notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
+ } else if (ci->flags & CI_VERBOTEN) {
+ notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
+ } else if (!(u2 = finduser(nick))) {
+ notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, nick);
+ } else if (!is_on_chan(c, u2)) {
+ notice_lang(s_ChanServ, u, NICK_X_NOT_ON_CHAN, u2->nick, c->name);
+ } else if (!is_founder(u, ci)) {
+ notice_lang(s_ChanServ, u, ACCESS_DENIED);
+ } else {
+ ircdproto->SendMode(whosends(ci), c->name, "%s %s", ircd->ownerset,
+ u2->nick);
+
+ av[0] = ircd->ownerset;
+ av[1] = u2->nick;
+ chan_set_modes(s_ChanServ, c, 2, av, 1);
+ }
+ return MOD_CONT;
+ }
- av[0] = util->mode;
- av[1] = u->nick;
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ notice_lang(s_ChanServ, u, CHAN_HELP_OWNER);
+ return true;
+ }
+};
- /* Sets the mode to the user on every channels he is on. */
+/*************************************************************************/
- for (uc = u->chans; uc; uc = uc->next) {
- if ((ci = uc->chan->ci) && !(ci->flags & CI_VERBOTEN)
- && check_access(u, ci, util->levelself)) {
- ircdproto->SendMode(whosends(ci), uc->chan->name, "%s %s",
- util->mode, u->nick);
- chan_set_modes(s_ChanServ, uc->chan, 2, av, 2);
+class CommandCSDeOwner : public Command
+{
+ public:
+ CommandCSDeOwner() : Command("DEOWNER", 2, 2)
+ {
- if (util->notice && ci->flags & util->notice)
- ircdproto->SendMessage(whosends(ci), uc->chan->name,
- "%s command used for %s by %s", util->name,
- u->nick, u->nick);
- }
+ }
+
+ CommandReturn Execute(User *u, std::vector<std::string> &params)
+ {
+ const char *av[2];
+ const char *chan = params[0].c_str();
+ const char *nick = params[1].c_str();
+ User *u2;
+
+ Channel *c;
+ ChannelInfo *ci;
+
+ if (!ircd->owner) {
+ return MOD_CONT;
}
+ if (!(c = findchan(chan))) {
+ notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
+ } else if (!(ci = c->ci)) {
+ notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
+ } else if (ci->flags & CI_VERBOTEN) {
+ notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
+ } else if (!(u2 = finduser(nick))) {
+ notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, nick);
+ } else if (!is_on_chan(c, u2)) {
+ notice_lang(s_ChanServ, u, NICK_X_NOT_ON_CHAN, u2->nick, c->name);
+ } else if (!is_founder(u, ci)) {
+ notice_lang(s_ChanServ, u, ACCESS_DENIED);
+ } else {
+ ircdproto->SendMode(whosends(ci), c->name, "%s %s", ircd->ownerunset, u2->nick);
+
+ av[0] = ircd->ownerunset;
+ av[1] = u2->nick;
+ chan_set_modes(s_ChanServ, c, 2, av, 1);
+ }
return MOD_CONT;
- } else if (!nick) {
- nick = u->nick;
}
- is_same = (nick == u->nick) ? 1 : (stricmp(nick, u->nick) == 0);
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ notice_lang(s_ChanServ, u, CHAN_HELP_DEOWNER);
+ return true;
+ }
+};
- if (!(c = findchan(chan))) {
- notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
- } else if (!(ci = c->ci)) {
- notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
- } else if (ci->flags & CI_VERBOTEN) {
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
- } else if (is_same ? !(u2 = u) : !(u2 = finduser(nick))) {
- notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, nick);
- } else if (!is_on_chan(c, u2)) {
- notice_lang(s_ChanServ, u, NICK_X_NOT_ON_CHAN, u2->nick, c->name);
- } else if (is_same ? !check_access(u, ci, util->levelself) :
- !check_access(u, ci, util->level)) {
- notice_lang(s_ChanServ, u, ACCESS_DENIED);
- } else if (*util->mode == '-' && !is_same && (ci->flags & CI_PEACE)
- && (get_access(u2, ci) >= get_access(u, ci))) {
- notice_lang(s_ChanServ, u, PERMISSION_DENIED);
- } else if (*util->mode == '-' && is_protected(u2) && !is_same) {
- notice_lang(s_ChanServ, u, PERMISSION_DENIED);
- } else {
- ircdproto->SendMode(whosends(ci), c->name, "%s %s", util->mode,
- u2->nick);
- av[0] = util->mode;
- av[1] = u2->nick;
- chan_set_modes(s_ChanServ, c, 2, av, 3);
+class CSModes : public Module
+{
+ public:
+ CSModes(const std::string &modname, const std::string &creator) : Module(modname, creator)
+ {
+ this->SetAuthor("Anope");
+ this->SetVersion("$Id$");
+ this->SetType(CORE);
- if (util->notice && ci->flags & util->notice)
- ircdproto->SendMessage(whosends(ci), c->name, "%s command used for %s by %s",
- util->name, u2->nick, u->nick);
+ this->AddCommand(CHANSERV, new CommandCSOp(), MOD_UNIQUE);
+ this->AddCommand(CHANSERV, new CommandCSDeOp(), MOD_UNIQUE);
+ this->AddCommand(CHANSERV, new CommandCSVoice(), MOD_UNIQUE);
+ this->AddCommand(CHANSERV, new CommandCSDeVoice(), MOD_UNIQUE);
+
+ if (ircd->halfop)
+ {
+ this->AddCommand(CHANSERV, new CommandCSHalfOp(), MOD_UNIQUE);
+ this->AddCommand(CHANSERV, new CommandCSDeHalfOp(), MOD_UNIQUE);
+ }
+
+ if (ircd->protect)
+ {
+ this->AddCommand(CHANSERV, new CommandCSProtect(), MOD_UNIQUE);
+ this->AddCommand(CHANSERV, new CommandCSDeProtect(), MOD_UNIQUE);
+ }
+
+ if (ircd->admin)
+ {
+ this->AddCommand(CHANSERV, new CommandCSProtect(), MOD_UNIQUE);
+ this->AddCommand(CHANSERV, new CommandCSDeProtect(), MOD_UNIQUE);
+ }
+
+ if (ircd->owner)
+ {
+ this->AddCommand(CHANSERV, new CommandCSOwner(), MOD_UNIQUE);
+ this->AddCommand(CHANSERV, new CommandCSDeOwner(), MOD_UNIQUE);
+ }
+
+ this->SetChanHelp(myChanServHelp);
}
- return MOD_CONT;
-}
+};
+
MODULE_INIT("cs_modes", CSModes)