summaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
authorrburchell <rburchell@5417fbe8-f217-4b02-8779-1006273d7864>2009-02-09 21:01:05 +0000
committerrburchell <rburchell@5417fbe8-f217-4b02-8779-1006273d7864>2009-02-09 21:01:05 +0000
commitd7d01bdc5c667a1fafd95241282b58e03b4caa5b (patch)
treef1482d8734da609923c6d8af6bc8fcb0fc187534 /src/modules
parentd49b3a25fda5f597491e73640dd1e76babc240eb (diff)
Squashed commit: merge next (1.9.1) back to trunk.
SVN users, NOTE: THIS WILL NOT BUILD, NOR SHOULD YOU RUN IT YET. git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1953 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/cs_appendtopic.c266
-rw-r--r--src/modules/cs_enforce.c778
-rw-r--r--src/modules/cs_tban.c210
-rw-r--r--src/modules/hs_request.c1308
-rw-r--r--src/modules/ns_maxemail.c166
-rw-r--r--src/modules/os_info.c955
6 files changed, 1822 insertions, 1861 deletions
diff --git a/src/modules/cs_appendtopic.c b/src/modules/cs_appendtopic.c
index b84fb0e3e..6aac5a1e1 100644
--- a/src/modules/cs_appendtopic.c
+++ b/src/modules/cs_appendtopic.c
@@ -48,102 +48,176 @@
#define LNG_CHAN_HELP_APPENDTOPIC 1
#define LNG_APPENDTOPIC_SYNTAX 2
-int my_cs_appendtopic(User * u);
-void my_cs_help(User * u);
-int my_cs_help_appendtopic(User * u);
-void my_add_languages();
+void my_cs_help(User *u);
static Module *me;
+class CommandCSAppendTopic : public Command
+{
+ public:
+ CommandCSAppendTopic() : Command("APPENDTOPIC", 2, 2)
+ {
+ }
+
+ CommandResult Execute(User *u, std::vector<std::string> &params)
+ {
+ const char *chan = params[0].c_str();
+ const char *newtopic = params[1].c_str();
+ char topic[1024];
+ Channel *c;
+ ChannelInfo *ci;
+
+ 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_services_admin(u) && !check_access(u, ci, CA_TOPIC))
+ notice_lang(s_ChanServ, u, PERMISSION_DENIED);
+ else
+ {
+ if (ci->last_topic)
+ {
+ snprintf(topic, sizeof(topic), "%s %s", ci->last_topic, newtopic);
+ delete [] ci->last_topic;
+ }
+ else
+ strscpy(topic, newtopic, sizeof(topic));
+
+ ci->last_topic = *topic ? sstrdup(topic) : NULL;
+ strscpy(ci->last_topic_setter, u->nick, NICKMAX);
+ ci->last_topic_time = time(NULL);
+
+ if (c->topic)
+ delete [] c->topic;
+ c->topic = *topic ? sstrdup(topic) : NULL;
+ strscpy(c->topic_setter, u->nick, NICKMAX);
+ if (ircd->topictsbackward)
+ c->topic_time = c->topic_time - 1;
+ else
+ c->topic_time = ci->last_topic_time;
+
+ if (is_services_admin(u) && !check_access(u, ci, CA_TOPIC))
+ alog("%s: %s!%s@%s changed topic of %s as services admin.", s_ChanServ, u->nick, u->GetIdent().c_str(), u->host, c->name);
+ if (ircd->join2set)
+ {
+ if (whosends(ci) == findbot(s_ChanServ))
+ {
+ ircdproto->SendJoin(findbot(s_ChanServ), c->name, c->creation_time);
+ ircdproto->SendMode(NULL, c->name, "+o %s", s_ChanServ);
+ }
+ }
+ ircdproto->SendTopic(whosends(ci), c->name, u->nick, topic, c->topic_time);
+ if (ircd->join2set)
+ {
+ if (whosends(ci) == findbot(s_ChanServ))
+ ircdproto->SendPart(findbot(s_ChanServ), c->name, NULL);
+ }
+ }
+ return MOD_CONT;
+ }
+
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ me->NoticeLang(s_ChanServ, u, LNG_APPENDTOPIC_SYNTAX);
+ ircdproto->SendMessage(findbot(s_ChanServ), u->nick, " ");
+ me->NoticeLang(s_ChanServ, u, LNG_CHAN_HELP_APPENDTOPIC);
+
+ return true;
+ }
+
+ void OnSyntaxError(User *u)
+ {
+ me->NoticeLang(s_ChanServ, u, LNG_APPENDTOPIC_SYNTAX);
+ }
+};
+
class CSAppendTopic : public Module
{
public:
CSAppendTopic(const std::string &modname, const std::string &creator) : Module(modname, creator)
{
- Command *c;
-
me = this;
this->SetAuthor(AUTHOR);
this->SetVersion(VERSION);
this->SetType(SUPPORTED);
- c = createCommand("APPENDTOPIC", my_cs_appendtopic, NULL, -1, -1, -1, -1, -1);
- this->AddCommand(CHANSERV, c, MOD_HEAD);
- moduleAddHelp(c, my_cs_help_appendtopic);
+ this->AddCommand(CHANSERV, new CommandCSAppendTopic(), MOD_HEAD);
this->SetChanHelp(my_cs_help);
/* English (US) */
const char* langtable_en_us[] = {
- /* LNG_CHAN_HELP */
- " APPENDTOPIC Add text to a channels topic",
- /* LNG_CHAN_HELP_APPENDTOPIC */
- "This command allows users to append text to a currently set\n"
- "channel topic. When TOPICLOCK is on, the topic is updated and\n"
- "the new, updated topic is locked.",
- /* LNG_APPENDTOPIC_SYNTAX */
- "Syntax: APPENDTOPIC channel text\n"
+ /* LNG_CHAN_HELP */
+ " APPENDTOPIC Add text to a channels topic",
+ /* LNG_CHAN_HELP_APPENDTOPIC */
+ "This command allows users to append text to a currently set\n"
+ "channel topic. When TOPICLOCK is on, the topic is updated and\n"
+ "the new, updated topic is locked.",
+ /* LNG_APPENDTOPIC_SYNTAX */
+ "Syntax: APPENDTOPIC channel text\n"
};
/* Dutch (NL) */
const char* langtable_nl[] = {
- /* LNG_CHAN_HELP */
- " APPENDTOPIC Voeg tekst aan een kanaal onderwerp toe",
- /* LNG_CHAN_HELP_APPENDTOPIC */
- "Dit command stelt gebruikers in staat om text toe te voegen\n"
- "achter het huidige onderwerp van een kanaal. Als TOPICLOCK aan\n"
- "staat, zal het onderwerp worden bijgewerkt en zal het nieuwe,\n"
- "bijgewerkte topic worden geforceerd.",
- /* LNG_APPENDTOPIC_SYNTAX */
- "Gebruik: APPENDTOPIC kanaal tekst\n"
+ /* LNG_CHAN_HELP */
+ " APPENDTOPIC Voeg tekst aan een kanaal onderwerp toe",
+ /* LNG_CHAN_HELP_APPENDTOPIC */
+ "Dit command stelt gebruikers in staat om text toe te voegen\n"
+ "achter het huidige onderwerp van een kanaal. Als TOPICLOCK aan\n"
+ "staat, zal het onderwerp worden bijgewerkt en zal het nieuwe,\n"
+ "bijgewerkte topic worden geforceerd.",
+ /* LNG_APPENDTOPIC_SYNTAX */
+ "Gebruik: APPENDTOPIC kanaal tekst\n"
};
/* German (DE) */
const char* langtable_de[] = {
- /* LNG_CHAN_HELP */
- " APPENDTOPIC Fьgt einen Text zu einem Channel-Topic hinzu.",
- /* LNG_CHAN_HELP_APPENDTOPIC */
- "Dieser Befehl erlaubt Benutzern, einen Text zu dem vorhandenen Channel-Topic\n"
- "hinzuzufьgen. Wenn TOPICLOCK gesetzt ist, wird das Topic aktualisiert\n"
- "und das neue, aktualisierte Topic wird gesperrt.",
- /* LNG_APPENDTOPIC_SYNTAX */
- "Syntax: APPENDTOPIC Channel Text\n"
+ /* LNG_CHAN_HELP */
+ " APPENDTOPIC Fьgt einen Text zu einem Channel-Topic hinzu.",
+ /* LNG_CHAN_HELP_APPENDTOPIC */
+ "Dieser Befehl erlaubt Benutzern, einen Text zu dem vorhandenen Channel-Topic\n"
+ "hinzuzufьgen. Wenn TOPICLOCK gesetzt ist, wird das Topic aktualisiert\n"
+ "und das neue, aktualisierte Topic wird gesperrt.",
+ /* LNG_APPENDTOPIC_SYNTAX */
+ "Syntax: APPENDTOPIC Channel Text\n"
};
/* Portuguese (PT) */
const char* langtable_pt[] = {
- /* LNG_CHAN_HELP */
- " APPENDTOPIC Adiciona texto ao tуpico de um canal",
- /* LNG_CHAN_HELP_APPENDTOPIC */
- "Este comando permite aos usuбrios anexar texto a um tуpico de canal\n"
- "jб definido. Quando TOPICLOCK estб ativado, o tуpico й atualizado e\n"
- "o novo tуpico й travado.",
- /* LNG_APPENDTOPIC_SYNTAX */
- "Sintaxe: APPENDTOPIC canal texto\n"
+ /* LNG_CHAN_HELP */
+ " APPENDTOPIC Adiciona texto ao tуpico de um canal",
+ /* LNG_CHAN_HELP_APPENDTOPIC */
+ "Este comando permite aos usuбrios anexar texto a um tуpico de canal\n"
+ "jб definido. Quando TOPICLOCK estб ativado, o tуpico й atualizado e\n"
+ "o novo tуpico й travado.",
+ /* LNG_APPENDTOPIC_SYNTAX */
+ "Sintaxe: APPENDTOPIC canal texto\n"
};
/* Russian (RU) */
const char* langtable_ru[] = {
- /* LNG_CHAN_HELP */
- " APPENDTOPIC Добавляет текст к топику канала",
- /* LNG_CHAN_HELP_APPENDTOPIC */
- "Данная команда позволяет добавить текст к топику, который установлен на указанном\n"
- "канале. Если активирован режим TOPICLOCK, топик будет обновлен и заблокирован.\n"
- "Примечание: текст будет ДОБАВЛЕН к топику, то есть старый топик удален НЕ БУДЕТ.\n",
- /* LNG_APPENDTOPIC_SYNTAX */
- "Синтаксис: APPENDTOPIC #канал текст\n"
+ /* LNG_CHAN_HELP */
+ " APPENDTOPIC Добавляет текст к топику канала",
+ /* LNG_CHAN_HELP_APPENDTOPIC */
+ "Данная команда позволяет добавить текст к топику, который установлен на указанном\n"
+ "канале. Если активирован режим TOPICLOCK, топик будет обновлен и заблокирован.\n"
+ "Примечание: текст будет ДОБАВЛЕН к топику, то есть старый топик удален НЕ БУДЕТ.\n",
+ /* LNG_APPENDTOPIC_SYNTAX */
+ "Синтаксис: APPENDTOPIC #канал текст\n"
};
/* Italian (IT) */
const char* langtable_it[] = {
- /* LNG_CHAN_HELP */
- " APPENDTOPIC Aggiunge del testo al topic di un canale",
- /* LNG_CHAN_HELP_APPENDTOPIC */
- "Questo comando permette agli utenti di aggiungere del testo ad un topic di un canale\n"
- "giа impostato. Se TOPICLOCK и attivato, il topic viene aggiornato e il nuovo topic\n"
- "viene bloccato.",
- /* LNG_APPENDTOPIC_SYNTAX */
- "Sintassi: APPENDTOPIC canale testo\n"
+ /* LNG_CHAN_HELP */
+ " APPENDTOPIC Aggiunge del testo al topic di un canale",
+ /* LNG_CHAN_HELP_APPENDTOPIC */
+ "Questo comando permette agli utenti di aggiungere del testo ad un topic di un canale\n"
+ "giа impostato. Se TOPICLOCK и attivato, il topic viene aggiornato e il nuovo topic\n"
+ "viene bloccato.",
+ /* LNG_APPENDTOPIC_SYNTAX */
+ "Sintassi: APPENDTOPIC canale testo\n"
};
this->InsertLanguage(LANG_EN_US, LNG_NUM_STRINGS, langtable_en_us);
@@ -155,83 +229,9 @@ class CSAppendTopic : public Module
}
};
-void my_cs_help(User * u)
+void my_cs_help(User *u)
{
me->NoticeLang(s_ChanServ, u, LNG_CHAN_HELP);
}
-int my_cs_help_appendtopic(User * u)
-{
- me->NoticeLang(s_ChanServ, u, LNG_APPENDTOPIC_SYNTAX);
- ircdproto->SendMessage(findbot(s_ChanServ), u->nick, " ");
- me->NoticeLang(s_ChanServ, u, LNG_CHAN_HELP_APPENDTOPIC);
- return MOD_STOP;
-}
-
-int my_cs_appendtopic(User * u)
-{
- char *cur_buffer;
- char *chan;
- char *newtopic;
- char topic[1024];
- Channel *c;
- ChannelInfo *ci;
-
- cur_buffer = moduleGetLastBuffer();
- chan = myStrGetToken(cur_buffer, ' ', 0);
- newtopic = myStrGetTokenRemainder(cur_buffer, ' ', 1);
-
- if (!chan || !newtopic) {
- me->NoticeLang(s_ChanServ, u, LNG_APPENDTOPIC_SYNTAX);
- } else 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_services_admin(u) && !check_access(u, ci, CA_TOPIC)) {
- notice_lang(s_ChanServ, u, PERMISSION_DENIED);
- } else {
- if (ci->last_topic) {
- snprintf(topic, sizeof(topic), "%s %s", ci->last_topic,
- newtopic);
- delete [] ci->last_topic;
- } else {
- strscpy(topic, newtopic, sizeof(topic));
- }
-
- ci->last_topic = *topic ? sstrdup(topic) : NULL;
- strscpy(ci->last_topic_setter, u->nick, NICKMAX);
- ci->last_topic_time = time(NULL);
-
- if (c->topic)
- delete [] c->topic;
- c->topic = *topic ? sstrdup(topic) : NULL;
- strscpy(c->topic_setter, u->nick, NICKMAX);
- if (ircd->topictsbackward)
- c->topic_time = c->topic_time - 1;
- else
- c->topic_time = ci->last_topic_time;
-
- if (is_services_admin(u) && !check_access(u, ci, CA_TOPIC))
- alog("%s: %s!%s@%s changed topic of %s as services admin.",
- s_ChanServ, u->nick, u->username, u->host, c->name);
- if (ircd->join2set) {
- if (whosends(ci) == findbot(s_ChanServ)) {
- ircdproto->SendJoin(findbot(s_ChanServ), c->name, c->creation_time);
- ircdproto->SendMode(NULL, c->name, "+o %s", s_ChanServ);
- }
- }
- ircdproto->SendTopic(whosends(ci), c->name, u->nick, topic, c->topic_time);
- if (ircd->join2set) {
- if (whosends(ci) == findbot(s_ChanServ)) {
- ircdproto->SendPart(findbot(s_ChanServ), c->name, NULL);
- }
- }
- }
- if (newtopic) delete [] newtopic;
- if (chan) delete [] chan;
- return MOD_CONT;
-}
-
MODULE_INIT("cs_appendtopic", CSAppendTopic)
diff --git a/src/modules/cs_enforce.c b/src/modules/cs_enforce.c
index b85787311..19ff90b2b 100644
--- a/src/modules/cs_enforce.c
+++ b/src/modules/cs_enforce.c
@@ -18,10 +18,7 @@
#define AUTHOR "Anope"
#define VERSION "$Id$"
-int my_cs_enforce(User * u);
-void my_cs_help(User * u);
-int my_cs_help_enforce(User * u);
-void my_add_languages();
+void my_cs_help(User *u);
#define LNG_NUM_STRINGS 6
@@ -34,224 +31,430 @@ void my_add_languages();
static Module *me;
+class CommandCSEnforce : public Command
+{
+ private:
+ void DoSet(Channel *c)
+ {
+ ChannelInfo *ci;
+
+ if (!(ci = c->ci))
+ return;
+
+ if (ci->flags & CI_SECUREOPS)
+ this->DoSecureOps(c);
+ if (ci->flags & CI_RESTRICTED)
+ this->DoRestricted(c);
+ }
+
+ void DoModes(Channel *c)
+ {
+ CBMode *cbm;
+
+ if ((cbm = &cbmodes[static_cast<int>('R')])->flag && (c->mode & cbm->flag))
+ this->DoCModeR(c);
+ }
+
+ void DoSecureOps(Channel *c)
+ {
+ struct c_userlist *user;
+ struct c_userlist *next;
+ ChannelInfo *ci;
+ uint32 flags;
+
+ if (!(ci = c->ci))
+ return;
+
+ if (debug)
+ alog("debug: cs_enforce: Enforcing SECUREOPS on %s", c->name);
+
+ /* Dirty hack to allow chan_set_correct_modes to work ok.
+ * We pretend like SECUREOPS is on so it doesn't ignore that
+ * part of the code. This way we can enforce SECUREOPS even
+ * if it's off.
+ */
+ flags = ci->flags;
+ ci->flags |= CI_SECUREOPS;
+
+ user = c->users;
+ do
+ {
+ next = user->next;
+ chan_set_correct_modes(user->user, c, 0);
+ user = next;
+ } while (user);
+
+ ci->flags = flags;
+ }
+
+ void DoRestricted(Channel *c)
+ {
+ struct c_userlist *user;
+ struct c_userlist *next;
+ ChannelInfo *ci;
+ int16 old_nojoin_level;
+ char mask[BUFSIZE];
+ char *reason;
+ const char *av[3];
+ User *u;
+
+ if (!(ci = c->ci))
+ return;
+
+ if (debug)
+ alog("debug: cs_enforce: Enforcing RESTRICTED on %s", c->name);
+
+ old_nojoin_level = ci->levels[CA_NOJOIN];
+ if (ci->levels[CA_NOJOIN] < 0)
+ ci->levels[CA_NOJOIN] = 0;
+
+ user = c->users;
+ do
+ {
+ next = user->next;
+ u = user->user;
+ if (check_access(u, c->ci, CA_NOJOIN))
+ {
+ get_idealban(ci, u, mask, sizeof(mask));
+ reason = getstring(u->na, CHAN_NOT_ALLOWED_TO_JOIN);
+ ircdproto->SendMode(whosends(ci), ci->name, "+b %s %lu", mask, time(NULL));
+ ircdproto->SendKick(whosends(ci), ci->name, u->nick, "%s", reason);
+ av[0] = ci->name;
+ av[1] = u->nick;
+ av[2] = reason;
+ do_kick(s_ChanServ, 3, av);
+ }
+ user = next;
+ } while (user);
+
+ ci->levels[CA_NOJOIN] = old_nojoin_level;
+ }
+
+ void DoCModeR(Channel *c)
+ {
+ struct c_userlist *user;
+ struct c_userlist *next;
+ ChannelInfo *ci;
+ char mask[BUFSIZE];
+ char *reason;
+ const char *av[3];
+ User *u;
+ CBMode *cbm;
+
+ if (!(ci = c->ci))
+ return;
+
+ if (debug)
+ alog("debug: cs_enforce: Enforcing mode +R on %s", c->name);
+
+ user = c->users;
+ do
+ {
+ next = user->next;
+ u = user->user;
+ if (!nick_identified(u))
+ {
+ get_idealban(ci, u, mask, sizeof(mask));
+ reason = getstring(u->na, CHAN_NOT_ALLOWED_TO_JOIN);
+ if (!(cbm = &cbmodes[static_cast<int>('R')])->flag || !(c->mode & cbm->flag))
+ ircdproto->SendMode(whosends(ci), ci->name, "+b %s %lu", mask, time(NULL));
+ ircdproto->SendKick(whosends(ci), ci->name, u->nick, "%s", reason);
+ av[0] = ci->name;
+ av[1] = u->nick;
+ av[2] = reason;
+ do_kick(s_ChanServ, 3, av);
+ }
+ user = next;
+ } while (user);
+ }
+ public:
+ CommandCSEnforce() : Command("ENFORCE", 1, 2)
+ {
+ }
+
+ CommandResult Execute(User *u, std::vector<std::string> &params)
+ {
+ const char *chan = params[0].c_str();
+ const char *what = params.size() > 1 ? params[1].c_str() : NULL;
+ Channel *c;
+ ChannelInfo *ci;
+
+ 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, chan);
+ else if (ci->flags & CI_VERBOTEN)
+ notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
+ else if (!is_services_admin(u) && !check_access(u, ci, CA_AKICK))
+ notice_lang(s_ChanServ, u, PERMISSION_DENIED);
+ else
+ {
+ if (!what || !stricmp(what, "SET"))
+ {
+ this->DoSet(c);
+ me->NoticeLang(s_ChanServ, u, LNG_CHAN_RESPONSE, what);
+ }
+ else if (!stricmp(what, "MODES"))
+ {
+ this->DoModes(c);
+ me->NoticeLang(s_ChanServ, u, LNG_CHAN_RESPONSE, what);
+ }
+ else if (!stricmp(what, "SECUREOPS"))
+ {
+ this->DoSecureOps(c);
+ me->NoticeLang(s_ChanServ, u, LNG_CHAN_RESPONSE, what);
+ }
+ else if (!stricmp(what, "RESTRICTED"))
+ {
+ this->DoRestricted(c);
+ me->NoticeLang(s_ChanServ, u, LNG_CHAN_RESPONSE, what);
+ }
+ else if (!stricmp(what, "+R"))
+ {
+ this->DoCModeR(c);
+ me->NoticeLang(s_ChanServ, u, LNG_CHAN_RESPONSE, what);
+ }
+ else
+ this->OnSyntaxError(u);
+ }
+
+ return MOD_CONT;
+ }
+
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ me->NoticeLang(s_ChanServ, u, LNG_ENFORCE_SYNTAX);
+ ircdproto->SendMessage(findbot(s_ChanServ), u->nick, " ");
+ me->NoticeLang(s_ChanServ, u, LNG_CHAN_HELP_ENFORCE);
+ ircdproto->SendMessage(findbot(s_ChanServ), u->nick, " ");
+ if (cbmodes[static_cast<int>('R')].flag)
+ me->NoticeLang(s_ChanServ, u, LNG_CHAN_HELP_ENFORCE_R_ENABLED);
+ else
+ me->NoticeLang(s_ChanServ, u, LNG_CHAN_HELP_ENFORCE_R_DISABLED);
+
+ return true;
+ }
+
+ void OnSyntaxError(User *u)
+ {
+ me->NoticeLang(s_ChanServ, u, LNG_ENFORCE_SYNTAX);
+ }
+};
+
class CSEnforce : public Module
{
public:
CSEnforce(const std::string &modname, const std::string &creator) : Module(modname, creator)
{
- Command *c;
-
me = this;
this->SetAuthor(AUTHOR);
this->SetVersion(VERSION);
this->SetType(SUPPORTED);
- c = createCommand("ENFORCE", my_cs_enforce, NULL, -1, -1, -1, -1, -1);
- this->AddCommand(CHANSERV, c, MOD_HEAD);
+ this->AddCommand(CHANSERV, new CommandCSEnforce(), MOD_HEAD);
- moduleAddHelp(c, my_cs_help_enforce);
this->SetChanHelp(my_cs_help);
/* English (US) */
const char* langtable_en_us[] = {
- /* LNG_CHAN_HELP */
- " ENFORCE Enforce various channel modes and set options",
- /* LNG_ENFORCE_SYNTAX */
- "Syntax: \002ENFORCE \037channel\037 [\037what\037]\002",
- /* LNG_CHAN_HELP_ENFORCE */
- "Enforce various channel modes and set options. The \037channel\037\n"
- "option indicates what channel to enforce the modes and options\n"
- "on. The \037what\037 option indicates what modes and options to\n"
- "enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n"
- "or +R. When left out, it defaults to SET.\n"
- " \n"
- "If \037what\037 is SET, it will enforce SECUREOPS and RESTRICTED\n"
- "on the users currently in the channel, if they are set. Give\n"
- "SECUREOPS to enforce the SECUREOPS option, even if it is not\n"
- "enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
- "if it's not enabled.",
- /* LNG_CHAN_HELP_ENFORCE_R_ENABLED */
- "If \037what\037 is MODES, it will enforce channelmode +R if it is\n"
- "set. If +R is specified for \037what\037, the +R channelmode will\n"
- "also be enforced, but even if it is not set. If it is not set,\n"
- "users will be banned to ensure they don't just rejoin.",
- /* LNG_CHAN_HELP_ENFORCE_R_DISABLED */
- "If \037what\037 is MODES, nothing will be enforced, since it would\n"
- "enforce modes that the current ircd does not support. If +R is\n"
- "specified for \037what\037, an equalivant of channelmode +R on\n"
- "other ircds will be enforced. All users that are in the channel\n"
- "but have not identified for their nickname will be kicked and\n"
- "banned from the channel.",
- /* LNG_CHAN_RESPONSE */
- "Enforced %s"
+ /* LNG_CHAN_HELP */
+ " ENFORCE Enforce various channel modes and set options",
+ /* LNG_ENFORCE_SYNTAX */
+ "Syntax: \002ENFORCE \037channel\037 [\037what\037]\002",
+ /* LNG_CHAN_HELP_ENFORCE */
+ "Enforce various channel modes and set options. The \037channel\037\n"
+ "option indicates what channel to enforce the modes and options\n"
+ "on. The \037what\037 option indicates what modes and options to\n"
+ "enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n"
+ "or +R. When left out, it defaults to SET.\n"
+ " \n"
+ "If \037what\037 is SET, it will enforce SECUREOPS and RESTRICTED\n"
+ "on the users currently in the channel, if they are set. Give\n"
+ "SECUREOPS to enforce the SECUREOPS option, even if it is not\n"
+ "enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
+ "if it's not enabled.",
+ /* LNG_CHAN_HELP_ENFORCE_R_ENABLED */
+ "If \037what\037 is MODES, it will enforce channelmode +R if it is\n"
+ "set. If +R is specified for \037what\037, the +R channelmode will\n"
+ "also be enforced, but even if it is not set. If it is not set,\n"
+ "users will be banned to ensure they don't just rejoin.",
+ /* LNG_CHAN_HELP_ENFORCE_R_DISABLED */
+ "If \037what\037 is MODES, nothing will be enforced, since it would\n"
+ "enforce modes that the current ircd does not support. If +R is\n"
+ "specified for \037what\037, an equalivant of channelmode +R on\n"
+ "other ircds will be enforced. All users that are in the channel\n"
+ "but have not identified for their nickname will be kicked and\n"
+ "banned from the channel.",
+ /* LNG_CHAN_RESPONSE */
+ "Enforced %s"
};
/* Dutch (NL) */
const char* langtable_nl[] = {
- /* LNG_CHAN_HELP */
- " ENFORCE Forceer enkele kanaalmodes en set-opties",
- /* LNG_ENFORCE_SYNTAX */
- "Syntax: \002ENFORCE \037kanaal\037 [\037wat\037]\002",
- /* LNG_CHAN_HELP_ENFORCE */
- "Forceer enkele kannalmodes en set-opties. De \037kanaal\037 optie\n"
- "geeft aan op welk kanaal de modes en opties geforceerd moeten\n"
- "worden. De \037wat\037 optie geeft aan welke modes en opties\n"
- "geforceerd moeten worden; dit kan SET, SECUREOPS, RESTRICTED,\n"
- "MODES, of +R zijn. Indien weggelaten is dit standaard SET.\n"
- " \n"
- "Als er voor \037wat\037 SET wordt ingevuld, zullen SECUREOPS en\n"
- "RESTRICTED geforceerd worden op de gebruikers in het kanaal,\n"
- "maar alleen als die opties aangezet zijn voor het kanaal. Als\n"
- "SECUREOPS of RESTRICTED wordt gegeven voor \037wat\037 zal die optie\n"
- "altijd geforceerd worden, ook als die niet is aangezet.",
- /* LNG_CHAN_HELP_ENFORCE_R_ENABLED */
- "Als er voor \037wat\037 MODES wordt ingevuld, zal kanaalmode +R worden\n"
- "geforceerd, als die op het kanaal aan staat. Als +R wordt ingevuld,\n"
- "zal kanaalmode +R worden geforceerd, maar ook als die niet aan"
- "staat voor het kanaal. Als +R niet aan staat, zullen alle ook\n"
- "gebanned worden om te zorgen dat ze niet opnieuw het kanaal binnen\n"
- "kunnen komen.",
- /* LNG_CHAN_HELP_ENFORCE_R_DISABLED */
- "Als er voor \037wat\037 MODES wordt ingevuld, zal er niks gebeuren.\n"
- "Normaal gesproken wordt er een kanaalmode geforceerd die op deze\n"
- "server niet ondersteund wordt. Als +R wordt ingevuld voor \037wat\037\n"
- "zullen alle gebruikers die in het kanaal zitten maar zich niet\n"
- "hebben geidentificeerd voor hun nick uit het kanaal gekicked en\n"
- "verbannen worden.",
- /* LNG_CHAN_RESPONSE */
- "Enforced %s"
+ /* LNG_CHAN_HELP */
+ " ENFORCE Forceer enkele kanaalmodes en set-opties",
+ /* LNG_ENFORCE_SYNTAX */
+ "Syntax: \002ENFORCE \037kanaal\037 [\037wat\037]\002",
+ /* LNG_CHAN_HELP_ENFORCE */
+ "Forceer enkele kannalmodes en set-opties. De \037kanaal\037 optie\n"
+ "geeft aan op welk kanaal de modes en opties geforceerd moeten\n"
+ "worden. De \037wat\037 optie geeft aan welke modes en opties\n"
+ "geforceerd moeten worden; dit kan SET, SECUREOPS, RESTRICTED,\n"
+ "MODES, of +R zijn. Indien weggelaten is dit standaard SET.\n"
+ " \n"
+ "Als er voor \037wat\037 SET wordt ingevuld, zullen SECUREOPS en\n"
+ "RESTRICTED geforceerd worden op de gebruikers in het kanaal,\n"
+ "maar alleen als die opties aangezet zijn voor het kanaal. Als\n"
+ "SECUREOPS of RESTRICTED wordt gegeven voor \037wat\037 zal die optie\n"
+ "altijd geforceerd worden, ook als die niet is aangezet.",
+ /* LNG_CHAN_HELP_ENFORCE_R_ENABLED */
+ "Als er voor \037wat\037 MODES wordt ingevuld, zal kanaalmode +R worden\n"
+ "geforceerd, als die op het kanaal aan staat. Als +R wordt ingevuld,\n"
+ "zal kanaalmode +R worden geforceerd, maar ook als die niet aan"
+ "staat voor het kanaal. Als +R niet aan staat, zullen alle ook\n"
+ "gebanned worden om te zorgen dat ze niet opnieuw het kanaal binnen\n"
+ "kunnen komen.",
+ /* LNG_CHAN_HELP_ENFORCE_R_DISABLED */
+ "Als er voor \037wat\037 MODES wordt ingevuld, zal er niks gebeuren.\n"
+ "Normaal gesproken wordt er een kanaalmode geforceerd die op deze\n"
+ "server niet ondersteund wordt. Als +R wordt ingevuld voor \037wat\037\n"
+ "zullen alle gebruikers die in het kanaal zitten maar zich niet\n"
+ "hebben geidentificeerd voor hun nick uit het kanaal gekicked en\n"
+ "verbannen worden.",
+ /* LNG_CHAN_RESPONSE */
+ "Enforced %s"
};
/* German (DE) */
const char* langtable_de[] = {
- /* LNG_CHAN_HELP */
- " ENFORCE Erzwingt verschieden Modes und SET Optionen",
- /* LNG_ENFORCE_SYNTAX */
- "Syntax: \002ENFORCE \037Channel\037 [\037was\037]\002",
- /* LNG_CHAN_HELP_ENFORCE */
- "Erzwingt verschieden Modes und SET Optionen. Die \037Channel\037\n"
- "Option zeigt dir den Channel an, indem Modes und Optionen\n"
- "zu erzwingen sind. Die \037was\037 Option zeigt dir welche Modes\n"
- "und Optionen zu erzwingen sind. Die kцnnen nur SET, SECUREOPS,\n"
- "RESTRICTED, MODES oder +R sein.Default ist SET.\n"
- " \n"
- "Wenn \037was\037 SET ist, wird SECUREOPS und RESTRICTED\n"
- "auf die User die z.Z.in Channel sind erzwungen, wenn sie AN sind.\n"
- "Benutze SECUREOPS oder RESTRICTED , um die Optionen einzeln\n"
- "zu erzwingen, also wenn sie nicht eingeschaltet sind.",
- /* LNG_CHAN_HELP_ENFORCE_R_ENABLED */
- "Wenn \037was\037 MODES ist, wird das ChannelMode +R erzwungen\n"
- "falls an. Wenn \037was\037 +R ist, wird +R erzwungen aber eben\n"
- "wenn noch nicht als Channel-Mode ist. Wenn +R noch nicht als\n"
- "Channel-Mode war werden alle User aus den Channel gebannt um\n"
- "sicher zu sein das sie nicht rejoinen.",
- /* LNG_CHAN_HELP_ENFORCE_R_DISABLED */
- "Wenn \037was\037 MODES ist, wird nichts erzwungen weil es MODES seine\n"
- "kцnnen die dein IRCD nicht unterstьtzt. Wenn \037was\037 +R ist\n"
- "oder ein Modes was auf ein anderen IRCD gleich +R ist, wird es\n"
- "erzwungen. Alle User die nicht fьr deren Nicknamen identifiziert\n"
- "sind werden aus den Channel gekickt und gebannt.",
- /* LNG_CHAN_RESPONSE */
- "Erzwungen %s"
+ /* LNG_CHAN_HELP */
+ " ENFORCE Erzwingt verschieden Modes und SET Optionen",
+ /* LNG_ENFORCE_SYNTAX */
+ "Syntax: \002ENFORCE \037Channel\037 [\037was\037]\002",
+ /* LNG_CHAN_HELP_ENFORCE */
+ "Erzwingt verschieden Modes und SET Optionen. Die \037Channel\037\n"
+ "Option zeigt dir den Channel an, indem Modes und Optionen\n"
+ "zu erzwingen sind. Die \037was\037 Option zeigt dir welche Modes\n"
+ "und Optionen zu erzwingen sind. Die kцnnen nur SET, SECUREOPS,\n"
+ "RESTRICTED, MODES oder +R sein.Default ist SET.\n"
+ " \n"
+ "Wenn \037was\037 SET ist, wird SECUREOPS und RESTRICTED\n"
+ "auf die User die z.Z.in Channel sind erzwungen, wenn sie AN sind.\n"
+ "Benutze SECUREOPS oder RESTRICTED , um die Optionen einzeln\n"
+ "zu erzwingen, also wenn sie nicht eingeschaltet sind.",
+ /* LNG_CHAN_HELP_ENFORCE_R_ENABLED */
+ "Wenn \037was\037 MODES ist, wird das ChannelMode +R erzwungen\n"
+ "falls an. Wenn \037was\037 +R ist, wird +R erzwungen aber eben\n"
+ "wenn noch nicht als Channel-Mode ist. Wenn +R noch nicht als\n"
+ "Channel-Mode war werden alle User aus den Channel gebannt um\n"
+ "sicher zu sein das sie nicht rejoinen.",
+ /* LNG_CHAN_HELP_ENFORCE_R_DISABLED */
+ "Wenn \037was\037 MODES ist, wird nichts erzwungen weil es MODES seine\n"
+ "kцnnen die dein IRCD nicht unterstьtzt. Wenn \037was\037 +R ist\n"
+ "oder ein Modes was auf ein anderen IRCD gleich +R ist, wird es\n"
+ "erzwungen. Alle User die nicht fьr deren Nicknamen identifiziert\n"
+ "sind werden aus den Channel gekickt und gebannt.",
+ /* LNG_CHAN_RESPONSE */
+ "Erzwungen %s"
};
/* Portuguese (PT) */
const char* langtable_pt[] = {
- /* LNG_CHAN_HELP */
- " ENFORCE Verifica o cumprimento de vбrios modos de canal e opзхes ajustadas",
- /* LNG_ENFORCE_SYNTAX */
- "Sintaxe: \002ENFORCE \037canal\037 [\037opзгo\037]\002",
- /* LNG_CHAN_HELP_ENFORCE */
- "Verifica o cumprimento de vбrios modos de canal e opзхes ajustadas.\n"
- "O campo \037canal\037 indica qual canal deve ter os modos e opзхes verificadas\n"
- "O campo \037opзгo\037 indica quais modos e opзхes devem ser verificadas,\n"
- "e pode ser: SET, SECUREOPS, RESTRICTED, MODES ou +R\n"
- "Quando deixado em branco, o padrгo й SET.\n"
- " \n"
- "Se \037opзгo\037 for SET, serгo verificadas as opзхes SECUREOPS e RESTRICTED\n"
- "para usuбrios que estiverem no canal, caso elas estejam ativadas. Use\n"
- "SECUREOPS para verificar a opзгo SECUREOPS, mesmo que ela nгo esteja ativada\n"
- "Use RESTRICTED para verificar a opзгo RESTRICTED, mesmo que ela nгo esteja\n"
- "ativada.",
- /* LNG_CHAN_HELP_ENFORCE_R_ENABLED */
- "Se \037opзгo\037 for MODES, serб verificado o modo de canal +R caso ele\n"
- "esteja ativado. Se +R for especificado para \037opзгo\037, o modo de canal\n"
- "+R tambйm serб verificado, mesmo que ele nгo esteja ativado. Se ele nгo\n"
- "estiver ativado, os usuбrios serгo banidos para evitar que reentrem no canal.",
- /* LNG_CHAN_HELP_ENFORCE_R_DISABLED */
- "Se \037opзгo\037 for MODES, nada serб verificado, visto que isto poderia\n"
- "verificar modos que o IRCd atual nгo suporta. Se +R for especificado\n"
- "para \037opзгo\037, um equivalente ao modo de canal +R em outros IRCds\n"
- "serб verificado. Todos os usuбrios que estгo no canal, mas nгo estejam\n"
- "identificados para seus nicks serгo kickados e banidos do canal.",
- /* LNG_CHAN_RESPONSE */
- "Verificado %s"
+ /* LNG_CHAN_HELP */
+ " ENFORCE Verifica o cumprimento de vбrios modos de canal e opзхes ajustadas",
+ /* LNG_ENFORCE_SYNTAX */
+ "Sintaxe: \002ENFORCE \037canal\037 [\037opзгo\037]\002",
+ /* LNG_CHAN_HELP_ENFORCE */
+ "Verifica o cumprimento de vбrios modos de canal e opзхes ajustadas.\n"
+ "O campo \037canal\037 indica qual canal deve ter os modos e opзхes verificadas\n"
+ "O campo \037opзгo\037 indica quais modos e opзхes devem ser verificadas,\n"
+ "e pode ser: SET, SECUREOPS, RESTRICTED, MODES ou +R\n"
+ "Quando deixado em branco, o padrгo й SET.\n"
+ " \n"
+ "Se \037opзгo\037 for SET, serгo verificadas as opзхes SECUREOPS e RESTRICTED\n"
+ "para usuбrios que estiverem no canal, caso elas estejam ativadas. Use\n"
+ "SECUREOPS para verificar a opзгo SECUREOPS, mesmo que ela nгo esteja ativada\n"
+ "Use RESTRICTED para verificar a opзгo RESTRICTED, mesmo que ela nгo esteja\n"
+ "ativada.",
+ /* LNG_CHAN_HELP_ENFORCE_R_ENABLED */
+ "Se \037opзгo\037 for MODES, serб verificado o modo de canal +R caso ele\n"
+ "esteja ativado. Se +R for especificado para \037opзгo\037, o modo de canal\n"
+ "+R tambйm serб verificado, mesmo que ele nгo esteja ativado. Se ele nгo\n"
+ "estiver ativado, os usuбrios serгo banidos para evitar que reentrem no canal.",
+ /* LNG_CHAN_HELP_ENFORCE_R_DISABLED */
+ "Se \037opзгo\037 for MODES, nada serб verificado, visto que isto poderia\n"
+ "verificar modos que o IRCd atual nгo suporta. Se +R for especificado\n"
+ "para \037opзгo\037, um equivalente ao modo de canal +R em outros IRCds\n"
+ "serб verificado. Todos os usuбrios que estгo no canal, mas nгo estejam\n"
+ "identificados para seus nicks serгo kickados e banidos do canal.",
+ /* LNG_CHAN_RESPONSE */
+ "Verificado %s"
};
/* Russian (RU) */
const char* langtable_ru[] = {
- /* LNG_CHAN_HELP */
- " ENFORCE Перепроверка и установка различных режимов и опций канала",
- /* LNG_ENFORCE_SYNTAX */
- "Синтаксис: \002ENFORCE \037#канал\037 \037параметр\037\002",
- /* LNG_CHAN_HELP_ENFORCE */
- "Перепроверка и установка различных режимов и опций канала.\n"
- "\037Параметр\037 указывает какие опции или режимы канала должны быть\n"
- "перепроверены. В качестве параметра могут быть указаны: SET, SECUREOPS,\n"
- "RESTRICTED, MODES, или +R. Если параметр не указан, по-умолчанию будет SET.\n"
- " \n"
- "Если в качестве \037параметра\037 указано SET, будут перепроверены опции\n"
- "SECUREOPS и RESTRICTED относительно пользователей на указанном канале\n"
- "(при условии, что опции включены). Отдельно указанный параметр SECUREOPS\n"
- "применит опцию SECUREOPS (даже если она \037НЕ\037 установлена). Параметр\n"
- "RESTRICTED применит опцию RESTRICTED (даже если она \037НЕ\037 установлена)",
- /* LNG_CHAN_HELP_ENFORCE_R_ENABLED */
- "Если в качестве \037параметра\037 указано MODES, будет перепроверен режим +R\n"
- "(если он установлен). Отдельно указанный параметр \037+R\037 применит\n"
- "канальный режим +R, даже если он не установлен, и забанит всех пользователей,\n"
- "которые не идентифицировались к своему нику или не имеют зарегистрированного ника.",
- /* LNG_CHAN_HELP_ENFORCE_R_DISABLED */
- "Если в качестве \037параметра\037 указано MODES, перепроверка осуществлена\n"
- "НЕ БУДЕТ, так как текущий IRCD не поддерживает необходимые режимы.\n"
- "Отдельно указанный параметр \037+R\037 применит канальный режим, эквивалентный\n"
- "режиму +R и забанит всех пользователей, которые не идентифицировались к своему\n"
- "нику или не имеют зарегистрированного ника.",
- /* LNG_CHAN_RESPONSE */
- "Перепроверено: %s"
+ /* LNG_CHAN_HELP */
+ " ENFORCE Перепроверка и установка различных режимов и опций канала",
+ /* LNG_ENFORCE_SYNTAX */
+ "Синтаксис: \002ENFORCE \037#канал\037 \037параметр\037\002",
+ /* LNG_CHAN_HELP_ENFORCE */
+ "Перепроверка и установка различных режимов и опций канала.\n"
+ "\037Параметр\037 указывает какие опции или режимы канала должны быть\n"
+ "перепроверены. В качестве параметра могут быть указаны: SET, SECUREOPS,\n"
+ "RESTRICTED, MODES, или +R. Если параметр не указан, по-умолчанию будет SET.\n"
+ " \n"
+ "Если в качестве \037параметра\037 указано SET, будут перепроверены опции\n"
+ "SECUREOPS и RESTRICTED относительно пользователей на указанном канале\n"
+ "(при условии, что опции включены). Отдельно указанный параметр SECUREOPS\n"
+ "применит опцию SECUREOPS (даже если она \037НЕ\037 установлена). Параметр\n"
+ "RESTRICTED применит опцию RESTRICTED (даже если она \037НЕ\037 установлена)",
+ /* LNG_CHAN_HELP_ENFORCE_R_ENABLED */
+ "Если в качестве \037параметра\037 указано MODES, будет перепроверен режим +R\n"
+ "(если он установлен). Отдельно указанный параметр \037+R\037 применит\n"
+ "канальный режим +R, даже если он не установлен, и забанит всех пользователей,\n"
+ "которые не идентифицировались к своему нику или не имеют зарегистрированного ника.",
+ /* LNG_CHAN_HELP_ENFORCE_R_DISABLED */
+ "Если в качестве \037параметра\037 указано MODES, перепроверка осуществлена\n"
+ "НЕ БУДЕТ, так как текущий IRCD не поддерживает необходимые режимы.\n"
+ "Отдельно указанный параметр \037+R\037 применит канальный режим, эквивалентный\n"
+ "режиму +R и забанит всех пользователей, которые не идентифицировались к своему\n"
+ "нику или не имеют зарегистрированного ника.",
+ /* LNG_CHAN_RESPONSE */
+ "Перепроверено: %s"
};
/* Italian (IT) */
const char* langtable_it[] = {
- /* LNG_CHAN_HELP */
- " ENFORCE Forza diversi modi di canale ed opzioni SET",
- /* LNG_ENFORCE_SYNTAX */
- "Sintassi: \002ENFORCE \037canale\037 [\037cosa\037]\002",
- /* LNG_CHAN_HELP_ENFORCE */
- "Forza diversi modi di canale ed opzioni SET. Il parametro \037canale\037\n"
- "indica il canale sul quale forzare i modi e le opzioni. Il parametro\n"
- "\037cosa\037 indica i modi e le opzioni da forzare, e possono essere\n"
- "qualsiasi delle opzioni SET, SECUREOPS, RESTRICTED, MODES, o +R.\n"
- "Se non specificato, viene sottointeso SET.\n"
- " \n"
- "Se \037cosa\037 и SET, forzerа SECUREOPS e RESTRICTED sugli utenti\n"
- "attualmente nel canale, se sono impostati. Specifica SECUREOPS per\n"
- "forzare l'opzione SECUREOPS, anche se non и attivata. Specifica\n"
- "RESTRICTED per forzare l'opzione RESTRICTED, anche se non и\n"
- "attivata.",
- /* LNG_CHAN_HELP_ENFORCE_R_ENABLED */
- "Se \037cosa\037 и MODES, forzerа il modo del canale +R se и impostato.\n"
- "Se +R и specificato per \037cosa\037, il modo del canale +R verrа\n"
- "forzato, anche se non и impostato. Se non и impostato, gli utenti\n"
- "verranno bannati per assicurare che non rientrino semplicemente.",
- /* LNG_CHAN_HELP_ENFORCE_R_DISABLED */
- "Se \037cosa\037 и MODES, niente verrа forzato, siccome forzerebbe\n"
- "dei modi che l'ircd in uso non supporterebbe. Se +R и specificato\n"
- "per \037cosa\037, un modo equivalente a +R sui altri ircd verrа\n"
- "forzato. Tutti gli utenti presenti nel canale ma non identificati\n"
- "per il loro nickname verranno bannati ed espulsi dal canale.\n",
- /* LNG_CHAN_RESPONSE */
- "Forzato %s"
+ /* LNG_CHAN_HELP */
+ " ENFORCE Forza diversi modi di canale ed opzioni SET",
+ /* LNG_ENFORCE_SYNTAX */
+ "Sintassi: \002ENFORCE \037canale\037 [\037cosa\037]\002",
+ /* LNG_CHAN_HELP_ENFORCE */
+ "Forza diversi modi di canale ed opzioni SET. Il parametro \037canale\037\n"
+ "indica il canale sul quale forzare i modi e le opzioni. Il parametro\n"
+ "\037cosa\037 indica i modi e le opzioni da forzare, e possono essere\n"
+ "qualsiasi delle opzioni SET, SECUREOPS, RESTRICTED, MODES, o +R.\n"
+ "Se non specificato, viene sottointeso SET.\n"
+ " \n"
+ "Se \037cosa\037 и SET, forzerа SECUREOPS e RESTRICTED sugli utenti\n"
+ "attualmente nel canale, se sono impostati. Specifica SECUREOPS per\n"
+ "forzare l'opzione SECUREOPS, anche se non и attivata. Specifica\n"
+ "RESTRICTED per forzare l'opzione RESTRICTED, anche se non и\n"
+ "attivata.",
+ /* LNG_CHAN_HELP_ENFORCE_R_ENABLED */
+ "Se \037cosa\037 и MODES, forzerа il modo del canale +R se и impostato.\n"
+ "Se +R и specificato per \037cosa\037, il modo del canale +R verrа\n"
+ "forzato, anche se non и impostato. Se non и impostato, gli utenti\n"
+ "verranno bannati per assicurare che non rientrino semplicemente.",
+ /* LNG_CHAN_HELP_ENFORCE_R_DISABLED */
+ "Se \037cosa\037 и MODES, niente verrа forzato, siccome forzerebbe\n"
+ "dei modi che l'ircd in uso non supporterebbe. Se +R и specificato\n"
+ "per \037cosa\037, un modo equivalente a +R sui altri ircd verrа\n"
+ "forzato. Tutti gli utenti presenti nel canale ma non identificati\n"
+ "per il loro nickname verranno bannati ed espulsi dal canale.\n",
+ /* LNG_CHAN_RESPONSE */
+ "Forzato %s"
};
this->InsertLanguage(LANG_EN_US, LNG_NUM_STRINGS, langtable_en_us);
@@ -263,211 +466,10 @@ class CSEnforce : public Module
}
};
-
-
-/* Enforcing functions */
-void do_enforce_secureops(Channel * c)
-{
- struct c_userlist *user;
- struct c_userlist *next;
- ChannelInfo *ci;
- uint32 flags;
-
- if (!(ci = c->ci))
- return;
-
- if (debug)
- alog("debug: cs_enforce: Enforcing SECUREOPS on %s", c->name);
-
- /* Dirty hack to allow chan_set_correct_modes to work ok.
- * We pretend like SECUREOPS is on so it doesn't ignore that
- * part of the code. This way we can enforce SECUREOPS even
- * if it's off.
- */
- flags = ci->flags;
- ci->flags |= CI_SECUREOPS;
-
- user = c->users;
- do {
- next = user->next;
- chan_set_correct_modes(user->user, c, 0);
- user = next;
- } while (user);
-
- ci->flags = flags;
-}
-
-void do_enforce_restricted(Channel * c)
-{
- struct c_userlist *user;
- struct c_userlist *next;
- ChannelInfo *ci;
- int16 old_nojoin_level;
- char mask[BUFSIZE];
- char *reason;
- const char *av[3];
- User *u;
-
- if (!(ci = c->ci))
- return;
-
- if (debug)
- alog("debug: cs_enforce: Enforcing RESTRICTED on %s", c->name);
-
- old_nojoin_level = ci->levels[CA_NOJOIN];
- if (ci->levels[CA_NOJOIN] < 0)
- ci->levels[CA_NOJOIN] = 0;
-
- user = c->users;
- do {
- next = user->next;
- u = user->user;
- if (check_access(u, c->ci, CA_NOJOIN)) {
- get_idealban(ci, u, mask, sizeof(mask));
- reason = getstring(u->na, CHAN_NOT_ALLOWED_TO_JOIN);
- ircdproto->SendMode(whosends(ci), ci->name, "+b %s %lu", mask,
- time(NULL));
- ircdproto->SendKick(whosends(ci), ci->name, u->nick, "%s", reason);
- av[0] = ci->name;
- av[1] = u->nick;
- av[2] = reason;
- do_kick(s_ChanServ, 3, av);
- }
- user = next;
- } while (user);
-
- ci->levels[CA_NOJOIN] = old_nojoin_level;
-}
-
-void do_enforce_cmode_R(Channel * c)
-{
- struct c_userlist *user;
- struct c_userlist *next;
- ChannelInfo *ci;
- char mask[BUFSIZE];
- char *reason;
- const char *av[3];
- User *u;
- CBMode *cbm;
-
- if (!(ci = c->ci))
- return;
-
- if (debug)
- alog("debug: cs_enforce: Enforcing mode +R on %s", c->name);
-
- user = c->users;
- do {
- next = user->next;
- u = user->user;
- if (!nick_identified(u)) {
- get_idealban(ci, u, mask, sizeof(mask));
- reason = getstring(u->na, CHAN_NOT_ALLOWED_TO_JOIN);
- if (((cbm = &cbmodes[static_cast<int>('R')])->flag == 0)
- || !(c->mode & cbm->flag))
- ircdproto->SendMode(whosends(ci), ci->name, "+b %s %lu", mask,
- time(NULL));
- ircdproto->SendKick(whosends(ci), ci->name, u->nick, "%s", reason);
- av[0] = ci->name;
- av[1] = u->nick;
- av[2] = reason;
- do_kick(s_ChanServ, 3, av);
- }
- user = next;
- } while (user);
-}
-
-/* Enforcing Group Functions */
-void do_enforce_set(Channel * c)
-{
- ChannelInfo *ci;
-
- if (!(ci = c->ci))
- return;
-
- if (ci->flags & CI_SECUREOPS)
- do_enforce_secureops(c);
- if (ci->flags & CI_RESTRICTED)
- do_enforce_restricted(c);
-}
-
-void do_enforce_modes(Channel * c)
-{
- CBMode *cbm;
-
- if (((cbm = &cbmodes[static_cast<int>('R')])->flag != 0) && (c->mode & cbm->flag))
- do_enforce_cmode_R(c);
-}
-
-/* End of enforcing functions */
-
-int my_cs_enforce(User * u)
-{
- char *cur_buffer;
- char *chan=NULL;
- char *what=NULL;
- Channel *c;
- ChannelInfo *ci;
-
- cur_buffer = moduleGetLastBuffer();
- chan = myStrGetToken(cur_buffer, ' ', 0);
-
- if (!chan) {
- me->NoticeLang(s_ChanServ, u, LNG_ENFORCE_SYNTAX);
- } else 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, chan);
- } else if (ci->flags & CI_VERBOTEN) {
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
- } else if (!is_services_admin(u) && !check_access(u, ci, CA_AKICK)) {
- notice_lang(s_ChanServ, u, PERMISSION_DENIED);
- } else {
- what = myStrGetToken(cur_buffer, ' ', 1);
- if (!what || (stricmp(what, "SET") == 0)) {
- do_enforce_set(c);
- me->NoticeLang(s_ChanServ,u,LNG_CHAN_RESPONSE,what);
- } else if (stricmp(what, "MODES") == 0) {
- do_enforce_modes(c);
- me->NoticeLang(s_ChanServ,u,LNG_CHAN_RESPONSE,what);
- } else if (stricmp(what, "SECUREOPS") == 0) {
- do_enforce_secureops(c);
- me->NoticeLang(s_ChanServ,u,LNG_CHAN_RESPONSE,what);
- } else if (stricmp(what, "RESTRICTED") == 0) {
- do_enforce_restricted(c);
- me->NoticeLang(s_ChanServ,u,LNG_CHAN_RESPONSE,what);
- } else if (stricmp(what, "+R") == 0) {
- do_enforce_cmode_R(c);
- me->NoticeLang(s_ChanServ,u,LNG_CHAN_RESPONSE,what);
- } else {
- me->NoticeLang(s_ChanServ, u, LNG_ENFORCE_SYNTAX);
- }
- }
-
- if(chan) delete [] chan;
- if(what) delete [] what;
-
- return MOD_CONT;
-}
-
/* Language and response stuff */
-void my_cs_help(User * u)
+void my_cs_help(User *u)
{
me->NoticeLang(s_ChanServ, u, LNG_CHAN_HELP);
}
-int my_cs_help_enforce(User * u)
-{
- me->NoticeLang(s_ChanServ, u, LNG_ENFORCE_SYNTAX);
- ircdproto->SendMessage(findbot(s_ChanServ), u->nick, " ");
- me->NoticeLang(s_ChanServ, u, LNG_CHAN_HELP_ENFORCE);
- ircdproto->SendMessage(findbot(s_ChanServ), u->nick, " ");
- if (cbmodes[static_cast<int>('R')].flag != 0)
- me->NoticeLang(s_ChanServ, u, LNG_CHAN_HELP_ENFORCE_R_ENABLED);
- else
- me->NoticeLang(s_ChanServ, u, LNG_CHAN_HELP_ENFORCE_R_DISABLED);
-
- return MOD_STOP;
-}
-
MODULE_INIT("cs_enforce", CSEnforce)
diff --git a/src/modules/cs_tban.c b/src/modules/cs_tban.c
index 2432a0d92..4b7994bfc 100644
--- a/src/modules/cs_tban.c
+++ b/src/modules/cs_tban.c
@@ -21,15 +21,12 @@
#define AUTHOR "Rob"
#define VERSION "$Id$"
-void myHelp(User * u);
-void myFullHelpSyntax(User * u);
-int myFullHelp(User * u);
-void mySendResponse(User * u, char *channel, char *mask, char *time);
+void myHelp(User *u);
+void mySendResponse(User *u, char *channel, char *mask, char *time);
-int do_tban(User * u);
-void addBan(Channel * c, time_t timeout, char *banmask);
+void addBan(Channel *c, time_t timeout, char *banmask);
int delBan(int argc, char **argv);
-int canBanUser(Channel * c, User * u, User * u2);
+int canBanUser(Channel *c, User *u, User *u2);
void mAddLanguages();
@@ -41,72 +38,117 @@ static Module *me = NULL;
#define TBAN_HELP_DETAIL 2
#define TBAN_RESPONSE 3
+class CommandCSTBan : public Command
+{
+ public:
+ CommandCSTBan() : Command("TBAN", 3, 3)
+ {
+ }
+
+ CommandResult Execute(User *u, std::vector<std::string> &params)
+ {
+ char mask[BUFSIZE];
+ Channel *c;
+ User *u2 = NULL;
+
+ char *chan = params[0].c_str();
+ char *nick = params[1].c_str();
+ char *time = params[2].c_str();
+
+ if (!(c = findchan(chan)))
+ notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
+ else if (!(u2 = finduser(nick)))
+ notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, nick);
+ else
+ {
+ if (canBanUser(c, u, u2))
+ {
+ get_idealban(c->ci, u2, mask, sizeof(mask));
+ addBan(c, dotime(time), mask);
+ mySendResponse(u, chan, mask, time);
+ }
+ }
+
+ return MOD_CONT;
+ }
+
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ this->OnSyntaxError(u);
+ ircdproto->SendMessage(findbot(s_ChanServ), u->nick, " ");
+ me->NoticeLang(s_ChanServ, u, TBAN_HELP_DETAIL);
+
+ return true;
+ }
+
+ void OnSyntaxError(User *u)
+ {
+ me->NoticeLang(s_ChanServ, u, TBAN_SYNTAX);
+ }
+};
+
class CSTBan : public Module
{
public:
CSTBan(const std::string &modname, const std::string &creator) : Module(modname, creator)
{
- Command *c;
-
me = this;
this->SetChanHelp(myHelp);
- c = createCommand("TBAN", do_tban, NULL, -1, -1, -1, -1, -1);
- moduleAddHelp(c, myFullHelp);
- this->AddCommand(CHANSERV, c, MOD_HEAD);
+ this->AddCommand(CHANSERV, new CommandCSTBan(), MOD_HEAD);
this->SetAuthor(AUTHOR);
this->SetVersion(VERSION);
this->SetType(SUPPORTED);
const char* langtable_en_us[] = {
- " TBAN Bans the user for a given length of time",
- "Syntax: TBAN channel nick time",
- "Bans the given user from a channel for a specified length of\n"
- "time. If the ban is removed before by hand, it will NOT be replaced.",
- "%s banned from %s, will auto-expire in %s"
+ " TBAN Bans the user for a given length of time",
+ "Syntax: TBAN channel nick time",
+ "Bans the given user from a channel for a specified length of\n"
+ "time. If the ban is removed before by hand, it will NOT be replaced.",
+ "%s banned from %s, will auto-expire in %s"
};
const char* langtable_nl[] = {
- " TBAN Verban een gebruiker voor een bepaalde tijd",
- "Syntax: TBAN kanaal nick tijd",
- "Verbant de gegeven gebruiken van het gegeven kanaal voor de\n"
- "gegeven tijdsduur. Als de verbanning eerder wordt verwijderd,\n"
- "zal deze NIET worden vervangen.",
- "%s verbannen van %s, zal verlopen in %s"
+ " TBAN Verban een gebruiker voor een bepaalde tijd",
+ "Syntax: TBAN kanaal nick tijd",
+ "Verbant de gegeven gebruiken van het gegeven kanaal voor de\n"
+ "gegeven tijdsduur. Als de verbanning eerder wordt verwijderd,\n"
+ "zal deze NIET worden vervangen.",
+ "%s verbannen van %s, zal verlopen in %s"
};
const char* langtable_de[] = {
- " TBAN Bant ein User fьr eine bestimmte Zeit aus ein Channel",
- "Syntax: TBAN Channel Nickname Zeit",
- "Bant ein User fьr eine bestimmte Zeit aus ein Channel\n"
- "Wenn der Ban manuell entfernt wird, wird es NICHT ersetzt.",
- "%s gebannt von %s, wird auto-auslaufen in %s"
+ " TBAN Bant ein User fьr eine bestimmte Zeit aus ein Channel",
+ "Syntax: TBAN Channel Nickname Zeit",
+ "Bant ein User fьr eine bestimmte Zeit aus ein Channel\n"
+ "Wenn der Ban manuell entfernt wird, wird es NICHT ersetzt.",
+ "%s gebannt von %s, wird auto-auslaufen in %s"
};
const char* langtable_pt[] = {
- " TBAN Bane o usuбrio por um determinado perнodo de tempo",
- "Sintaxe: TBAN canal nick tempo",
- "Bane de um canal o usuбrio especificado por um determinado perнodo de\n"
- "tempo. Se o ban for removido manualmente antes do tempo, ele nгo serб recolocado.",
- "%s foi banido do %s, irб auto-expirar em %s"
+ " TBAN Bane o usuбrio por um determinado perнodo de tempo",
+ "Sintaxe: TBAN canal nick tempo",
+ "Bane de um canal o usuбrio especificado por um determinado perнodo de\n"
+ "tempo. Se o ban for removido manualmente antes do tempo, ele nгo serб recolocado.",
+ "%s foi banido do %s, irб auto-expirar em %s"
};
const char* langtable_ru[] = {
- " TBAN Банит пользователя на указанный промежуток времени",
- "Синтаксис: TBAN #канал ник время",
- "Банит пользователя на указанный промежуток времени в секундах\n"
- "Примечание: удаленный вручную (до своего истечения) бан НЕ БУДЕТ\n"
- "переустановлен сервисами автоматически!",
- "Установленный бан %s на канале %s истечет через %s секунд"
+ " TBAN Банит пользователя на указанный промежуток времени",
+ "Синтаксис: TBAN #канал ник время",
+ "Банит пользователя на указанный промежуток времени в секундах\n"
+ "Примечание: удаленный вручную (до своего истечения) бан НЕ БУДЕТ\n"
+ "переустановлен сервисами автоматически!",
+ "Установленный бан %s на канале %s истечет через %s секунд"
};
const char* langtable_it[] = {
- " TBAN Banna l'utente per un periodo di tempo specificato",
- "Sintassi: TBAN canale nick tempo",
- "Banna l'utente specificato da un canale per un periodo di tempo\n"
- "specificato. Se il ban viene rimosso a mano prima della scadenza, NON verrа rimpiazzato.",
- "%s bannato da %s, scadrа automaticamente tra %s"
+ " TBAN Banna l'utente per un periodo di tempo specificato",
+ "Sintassi: TBAN canale nick tempo",
+ "Banna l'utente specificato da un canale per un periodo di tempo\n"
+ "specificato. Se il ban viene rimosso a mano prima della scadenza, NON verrа rimpiazzato.",
+ "%s bannato da %s, scadrа automaticamente tra %s"
};
this->InsertLanguage(LANG_EN_US, LANG_NUM_STRINGS, langtable_en_us);
@@ -118,73 +160,17 @@ class CSTBan : public Module
}
};
-
-
-void myHelp(User * u)
+void myHelp(User *u)
{
me->NoticeLang(s_ChanServ, u, TBAN_HELP);
}
-void myFullHelpSyntax(User * u)
-{
- me->NoticeLang(s_ChanServ, u, TBAN_SYNTAX);
-}
-
-int myFullHelp(User * u)
-{
- myFullHelpSyntax(u);
- ircdproto->SendMessage(findbot(s_ChanServ), u->nick, " ");
- me->NoticeLang(s_ChanServ, u, TBAN_HELP_DETAIL);
- return MOD_CONT;
-}
-
-void mySendResponse(User * u, char *channel, char *mask, char *time)
+void mySendResponse(User *u, char *channel, char *mask, char *time)
{
me->NoticeLang(s_ChanServ, u, TBAN_RESPONSE, mask, channel, time);
}
-int do_tban(User * u)
-{
- char mask[BUFSIZE];
- Channel *c;
- User *u2 = NULL;
-
- char *buffer = moduleGetLastBuffer();
- char *chan;
- char *nick;
- char *time;
-
- chan = myStrGetToken(buffer, ' ', 0);
- nick = myStrGetToken(buffer, ' ', 1);
- time = myStrGetToken(buffer, ' ', 2);
-
- if (time && chan && nick) {
-
- if (!(c = findchan(chan))) {
- notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
- } else if (!(u2 = finduser(nick))) {
- notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, nick);
- } else {
- if (canBanUser(c, u, u2)) {
- get_idealban(c->ci, u2, mask, sizeof(mask));
- addBan(c, dotime(time), mask);
- mySendResponse(u, chan, mask, time);
- }
- }
- } else {
- myFullHelpSyntax(u);
- }
- if (time)
- delete [] time;
- if (nick)
- delete [] nick;
- if (chan)
- delete [] chan;
-
- return MOD_CONT;
-}
-
-void addBan(Channel * c, time_t timeout, char *banmask)
+void addBan(Channel *c, time_t timeout, char *banmask)
{
const char *av[3];
char *cb[2];
@@ -209,7 +195,8 @@ int delBan(int argc, char **argv)
av[0] = "-b";
av[1] = argv[1];
- if ((c = findchan(argv[0])) && c->ci) {
+ if ((c = findchan(argv[0])) && c->ci)
+ {
ircdproto->SendMode(whosends(c->ci), c->name, "-b %s", av[1]);
chan_set_modes(s_ChanServ, c, 2, av, 1);
}
@@ -221,23 +208,20 @@ int canBanUser(Channel * c, User * u, User * u2)
{
ChannelInfo *ci;
int ok = 0;
- if (!(ci = c->ci)) {
+ if (!(ci = c->ci))
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
- } else if (ci->flags & CI_VERBOTEN) {
+ else if (ci->flags & CI_VERBOTEN)
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, c->name);
- } else if (!check_access(u, ci, CA_BAN)) {
+ else if (!check_access(u, ci, CA_BAN))
notice_lang(s_ChanServ, u, ACCESS_DENIED);
- } else if (ircd->except && is_excepted(ci, u2)) {
+ else if (ircd->except && is_excepted(ci, u2))
notice_lang(s_ChanServ, u, CHAN_EXCEPTED, u2->nick, ci->name);
- } else if (ircd->protectedumode && is_protected(u2)) {
+ else if (ircd->protectedumode && is_protected(u2))
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
- } else {
+ else
ok = 1;
- }
return ok;
}
-
-
MODULE_INIT("cs_tban", CSTBan)
diff --git a/src/modules/hs_request.c b/src/modules/hs_request.c
index 838d11564..a1471705a 100644
--- a/src/modules/hs_request.c
+++ b/src/modules/hs_request.c
@@ -53,25 +53,12 @@ char *HSRequestDBName = NULL;
#define LNG_WAITING_SYNTAX 19
#define LNG_HELP_WAITING 20
-int hs_do_request(User * u);
-int hs_do_activate(User * u);
-int hs_do_reject(User * u);
-int hs_do_list_out(User * u);
-
-int hs_help_request(User * u);
-int hs_help_activate(User * u);
-int hs_help_reject(User * u);
-int hs_help_waiting(User * u);
-void hs_help(User * u);
-
-void my_add_host_request(char *nick, char *vIdent, char *vhost,
- char *creator, int32 tmp_time);
+void hs_help(User *u);
+
+void my_add_host_request(char *nick, char *vIdent, char *vhost, char *creator, int32 tmp_time);
int my_isvalidchar(const char c);
-void my_memo_lang(User * u, char *name, int z, int number, ...);
-void req_send_memos(User * u, char *vHost);
-void show_list(User * u);
-int hs_do_waiting(User * u);
-int ns_do_drop(User * u);
+void my_memo_lang(User *u, char *name, int z, int number, ...);
+void req_send_memos(User *u, char *vHost);
void hsreq_save_db();
void hsreq_load_db();
@@ -85,37 +72,377 @@ HostCore *hs_request_head;
static Module *me;
-class HSRequest : public Module
+class CommandHSRequest : public Command
{
public:
- HSRequest(const std::string &modname, const std::string &creator) : Module(modname, creator)
+ CommandHSRequest() : Command("REQUEST", 1, 1)
{
- Command *c;
- EvtHook *hook;
+ }
- me = this;
+ CommandResult Execute(User *u, std::vector<std::string> &params)
+ {
+ char *nick;
+ const char *rawhostmask = params[1].c_str();
+ char hostmask[HOSTMAX];
+ NickAlias *na;
+ int32 tmp_time;
+ char *s;
+ char *vIdent = NULL;
+ time_t now = time(NULL);
+
+ nick = u->nick;
+
+ vIdent = myStrGetOnlyToken(rawhostmask, '@', 0); /* Get the first substring, @ as delimiter */
+ if (vIdent)
+ {
+ rawhostmask = myStrGetTokenRemainder(rawhostmask, '@', 1); /* get the remaining string */
+ if (!rawhostmask)
+ {
+ me->NoticeLang(s_HostServ, u, LNG_REQUEST_SYNTAX);
+ delete [] vIdent;
+ return MOD_CONT;
+ }
+ if (strlen(vIdent) > USERMAX - 1)
+ {
+ notice_lang(s_HostServ, u, HOST_SET_IDENTTOOLONG, USERMAX);
+ delete [] vIdent;
+ delete [] rawhostmask;
+ return MOD_CONT;
+ }
+ else
+ {
+ for (s = vIdent; *s; ++s)
+ {
+ if (!my_isvalidchar(*s))
+ {
+ notice_lang(s_HostServ, u, HOST_SET_IDENT_ERROR);
+ delete [] vIdent;
+ delete [] rawhostmask;
+ return MOD_CONT;
+ }
+ }
+ }
+ if (!ircd->vident)
+ {
+ notice_lang(s_HostServ, u, HOST_NO_VIDENT);
+ delete [] vIdent;
+ delete [] rawhostmask;
+ return MOD_CONT;
+ }
+ }
+ if (strlen(rawhostmask) < HOSTMAX - 1)
+ snprintf(hostmask, HOSTMAX, "%s", rawhostmask);
+ else
+ {
+ notice_lang(s_HostServ, u, HOST_SET_TOOLONG, HOSTMAX);
+ if (vIdent)
+ {
+ delete [] vIdent;
+ delete [] rawhostmask;
+ }
+ return MOD_CONT;
+ }
+
+ if (!isValidHost(hostmask, 3))
+ {
+ notice_lang(s_HostServ, u, HOST_SET_ERROR);
+ if (vIdent)
+ {
+ delete [] vIdent;
+ delete [] rawhostmask;
+ }
+ return MOD_CONT;
+ }
+
+ tmp_time = time(NULL);
+ if ((na = findnick(nick)))
+ {
+ if (HSRequestMemoOper || HSRequestMemoSetters)
+ {
+ if (MSSendDelay > 0 && u && u->lastmemosend + MSSendDelay > now)
+ {
+ me->NoticeLang(s_HostServ, u, LNG_REQUEST_WAIT, MSSendDelay);
+ u->lastmemosend = now;
+ if (vIdent)
+ {
+ delete [] vIdent;
+ delete [] rawhostmask;
+ }
+ return MOD_CONT;
+ }
+ }
+ my_add_host_request(nick, vIdent, hostmask, u->nick, tmp_time);
+
+ me->NoticeLang(s_HostServ, u, LNG_REQUESTED);
+ req_send_memos(u, hostmask);
+ alog("New vHost Requested by %s", nick);
+ }
+ else
+ notice_lang(s_HostServ, u, HOST_NOREG, nick);
+
+ if (vIdent)
+ {
+ delete [] vIdent;
+ delete [] rawhostmask;
+ }
+
+ return MOD_CONT;
+ }
+
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ me->NoticeLang(s_HostServ, u, LNG_REQUEST_SYNTAX);
+ ircdproto->SendMessage(findbot(s_HostServ), u->nick, " ");
+ me->NoticeLang(s_HostServ, u, LNG_HELP_REQUEST);
+
+ return true;
+ }
+
+ void OnSyntaxError(User *u)
+ {
+ me->NoticeLang(s_HostServ, u, LNG_REQUEST_SYNTAX);
+ }
+};
+
+class CommandHSActivate : public Command
+{
+ public:
+ CommandHSActivate() : Command("ACTIVATE", 1, 1)
+ {
+ }
+
+ CommandResult Execute(User *u, std::vector<std::string> &params)
+ {
+ const char *nick = params[0].c_str();
+ NickAlias *na;
+ HostCore *tmp, *hc;
+ bool found = false;
+
+ if ((na = findnick(nick)))
+ {
+ tmp = findHostCore(hs_request_head, nick, &found);
+ if (found)
+ {
+ if (!tmp)
+ hc = hs_request_head;
+ else
+ hc = tmp->next;
+
+ addHostCore(hc->nick, hc->vIdent, hc->vHost, u->nick, time(NULL));
+
+ if (HSRequestMemoUser)
+ my_memo_lang(u, hc->nick, 2, LNG_ACTIVATE_MEMO);
+
+ hs_request_head = deleteHostCore(hs_request_head, tmp);
+ me->NoticeLang(s_HostServ, u, LNG_ACTIVATED, nick);
+ alog("Host Request for %s activated by %s", nick, u->nick);
+ }
+ else
+ me->NoticeLang(s_HostServ, u, LNG_NO_REQUEST, nick);
+ }
+ else
+ notice_lang(s_HostServ, u, NICK_X_NOT_REGISTERED, nick);
+
+ return MOD_CONT;
+ }
+
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ if (!is_host_setter(u))
+ return false;
+
+ me->NoticeLang(s_HostServ, u, LNG_ACTIVATE_SYNTAX);
+ ircdproto->SendMessage(findbot(s_HostServ), u->nick, " ");
+ me->NoticeLang(s_HostServ, u, LNG_HELP_ACTIVATE);
+ if (HSRequestMemoUser)
+ me->NoticeLang(s_HostServ, u, LNG_HELP_ACTIVATE_MEMO);
+
+ return true;
+ }
+
+ void OnSyntaxError(User *u)
+ {
+ me->NoticeLang(s_HostServ, u, LNG_ACTIVATE_SYNTAX);
+ }
+};
+
+class CommandHSReject : public Command
+{
+ public:
+ CommandHSReject() : Command("REJECT", 1, 2)
+ {
+ }
+
+ CommandResult Execute(User *u, std::vector<std::string> &params)
+ {
+ const char *nick = params[0].c_str();
+ const char *reason = params.size() > 1 ? params[1].c_str() : NULL;
+ HostCore *tmp, *hc;
+ bool found = false;
+
+ tmp = findHostCore(hs_request_head, nick, &found);
+ if (found)
+ {
+ if (!tmp)
+ hc = hs_request_head;
+ else
+ hc = tmp->next;
+
+ if (HSRequestMemoUser)
+ {
+ if (reason)
+ my_memo_lang(u, hc->nick, 2, LNG_REJECT_MEMO_REASON, reason);
+ else
+ my_memo_lang(u, hc->nick, 2, LNG_REJECT_MEMO);
+ }
+
+ hs_request_head = deleteHostCore(hs_request_head, tmp);
+ me->NoticeLang(s_HostServ, u, LNG_REJECTED, nick);
+ alog("Host Request for %s rejected by %s (%s)", nick, u->nick, reason ? reason : "");
+ }
+ else
+ me->NoticeLang(s_HostServ, u, LNG_NO_REQUEST, nick);
+
+ return MOD_CONT;
+ }
+
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ if (!is_host_setter(u))
+ return false;
+
+ me->NoticeLang(s_HostServ, u, LNG_REJECT_SYNTAX);
+ ircdproto->SendMessage(findbot(s_HostServ), u->nick, " ");
+ me->NoticeLang(s_HostServ, u, LNG_HELP_REJECT);
+ if (HSRequestMemoUser)
+ me->NoticeLang(s_HostServ, u, LNG_HELP_REJECT_MEMO);
- c = createCommand("request", hs_do_request, nick_identified, -1, -1, -1, -1, -1);
- moduleAddHelp(c, hs_help_request);
- this->AddCommand(HOSTSERV, c, MOD_HEAD);
+ return true;
+ }
- c = createCommand("activate", hs_do_activate, is_host_setter, -1, -1, -1, -1, -1);
- moduleAddHelp(c, hs_help_activate);
- this->AddCommand(HOSTSERV, c, MOD_HEAD);
+ void OnSyntaxError(User *u)
+ {
+ me->NoticeLang(s_HostServ, u, LNG_REJECT_SYNTAX);
+ }
+};
- c = createCommand("reject", hs_do_reject, is_host_setter, -1, -1, -1, -1, -1);
- moduleAddHelp(c, hs_help_reject);
- this->AddCommand(HOSTSERV, c, MOD_HEAD);
+class CommandHSList : public Command
+{
+ private:
+ CommandResult DoList(User *u, std::vector<std::string> &params)
+ {
+ struct tm *tm;
+ char buf[BUFSIZE];
+ int counter = 1;
+ int from = 0, to = 0;
+ int display_counter = 0;
+ HostCore *current;
+
+ current = hs_request_head;
+ while (current)
+ {
+ if (((counter >= from && counter <= to) || (!from && !to)) && display_counter < NSListMax)
+ {
+ ++display_counter;
+ tm = localtime(&current->time);
+ strftime(buf, sizeof(buf), getstring(NULL, STRFTIME_DATE_TIME_FORMAT), tm);
+ if (current->vIdent)
+ notice_lang(s_HostServ, u, HOST_IDENT_ENTRY, counter, current->nick, current->vIdent, current->vHost, current->creator, buf);
+ else
+ notice_lang(s_HostServ, u, HOST_ENTRY, counter, current->nick, current->vHost, current->creator, buf);
+ }
+ ++counter;
+ current = current->next;
+ }
+ notice_lang(s_HostServ, u, HOST_LIST_FOOTER, display_counter);
- c = createCommand("waiting", hs_do_waiting, is_host_setter, -1, -1, -1, -1, -1);
- moduleAddHelp(c, hs_help_waiting);
- this->AddCommand(HOSTSERV, c, MOD_HEAD);
+ return MOD_CONT;
+ }
+ public:
+ CommandHSList() : Command("LIST", 1, 1)
+ {
+ }
- c = createCommand("list", hs_do_list_out, is_services_oper, -1, -1, -1, -1, -1);
- this->AddCommand(HOSTSERV, c, MOD_HEAD);
+ CommandResult Execute(User *u, std::vector<std::string> &params)
+ {
+ const char *key = params[0].c_str();
- c = createCommand("drop", ns_do_drop, NULL, -1, -1, -1, -1, -1);
- this->AddCommand(NICKSERV, c, MOD_HEAD);
+ if (stricmp(key, "+req"))
+ return MOD_CONT;
+
+ return this->DoList(u, params);
+ }
+
+ void OnSyntaxError(User *u)
+ {
+ // no-op
+ }
+};
+
+class CommandHSWaiting : public CommandHSList
+{
+ public:
+ CommandHSWaiting() : Command("WAITING", 0, 0)
+ {
+ }
+
+ CommandResult Execute(User *u, std::vector<std::string> &params)
+ {
+ return this->DoList(u, params);
+ }
+
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ if (!is_host_setter(u))
+ return false;
+
+ me->NoticeLang(s_HostServ, u, LNG_WAITING_SYNTAX);
+ ircdproto->SendMessage(findbot(s_HostServ), u->nick, " ");
+ me->NoticeLang(s_HostServ, u, LNG_HELP_WAITING);
+
+ return true;
+ }
+};
+
+class CommandNSDrop : public Command
+{
+ public:
+ CommandNSDrop() : Command("DROP", 0, 0)
+ {
+ }
+
+ CommandResult Execute(User *u, std::vector<std::string> &params)
+ {
+ HostCore *tmp;
+ bool found = false;
+ NickAlias *na;
+
+ na = findnick(u->nick);
+ tmp = findHostCore(hs_request_head, u->nick, &found);
+
+ if (found && na)
+ hs_request_head = deleteHostCore(hs_request_head, tmp);
+
+ return MOD_CONT;
+ }
+};
+
+class HSRequest : public Module
+{
+ public:
+ HSRequest(const std::string &modname, const std::string &creator) : Module(modname, creator)
+ {
+ EvtHook *hook;
+
+ me = this;
+
+ this->AddCommand(HOSTSERV, new CommandHSRequest(), MOD_HEAD);
+ this->AddCommand(HOSTSERV, new CommandHSActivate(), MOD_HEAD);
+ this->AddCommand(HOSTSERV, new CommandHSReject(), MOD_HEAD);
+ this->AddCommand(HOSTSERV, new CommandHSWaiting(), MOD_HEAD);
+ this->AddCommand(HOSTSERV, new CommandHSList(), MOD_HEAD);
+
+ this->AddCommand(NICKSERV, new CommandNSDrop(), MOD_HEAD);
hook = createEventHook(EVENT_DB_SAVING, hsreqevt_db_saving);
this->AddEventHook(hook);
@@ -134,254 +461,255 @@ class HSRequest : public Module
hsreq_load_db();
const char* langtable_en_us[] = {
- /* LNG_REQUEST_SYNTAX */
- "Syntax: \002REQUEST \037vhost\037\002",
- /* LNG_REQUESTED */
- "Your vHost has been requested",
- /* LNG_REQUEST_WAIT */
- "Please wait %d seconds before requesting a new vHost",
- /* LNG_REQUEST_MEMO */
- "[auto memo] vHost \002%s\002 has been requested.",
- /* LNG_ACTIVATE_SYNTAX */
- "Syntax: \002ACTIVATE \037nick\037\002",
- /* LNG_ACTIVATED */
- "vHost for %s has been activated",
- /* LNG_ACTIVATE_MEMO */
- "[auto memo] Your requested vHost has been approved.",
- /* LNG_REJECT_SYNTAX */
- "Syntax: \002REJECT \037nick\037\002",
- /* LNG_REJECTED */
- "vHost for %s has been rejected",
- /* LNG_REJECT_MEMO */
- "[auto memo] Your requested vHost has been rejected.",
- /* LNG_REJECT_MEMO_REASON */
- "[auto memo] Your requested vHost has been rejected. Reason: %s",
- /* LNG_NO_REQUEST */
- "No request for nick %s found.",
- /* LNG_HELP */
- " REQUEST Request a vHost for your nick",
- /* LNG_HELP_SETTER */
- " ACTIVATE Approve the requested vHost of a user\n"
- " REJECT Reject the requested vHost of a user\n"
- " WAITING Convenience command for LIST +req",
- /* LNG_HELP_REQUEST */
- "Request the given vHost to be actived for your nick by the\n"
- "network administrators. Please be patient while your request\n"
- "is being considered.",
- /* LNG_HELP_ACTIVATE */
- "Activate the requested vHost for the given nick.",
- /* LNG_HELP_ACTIVATE_MEMO */
- "A memo informing the user will also be sent.",
- /* LNG_HELP_REJECT */
- "Reject the requested vHost for the given nick.",
- /* LNG_HELP_REJECT_MEMO */
- "A memo informing the user will also be sent.",
- /* LNG_WAITING_SYNTAX */
- "Syntax: \002WAITING\002",
- /* LNG_HELP_WAITING */
- "This command is provided for convenience. It is essentially\n"
- "the same as performing a LIST +req ."
+ /* LNG_REQUEST_SYNTAX */
+ "Syntax: \002REQUEST \037vhost\037\002",
+ /* LNG_REQUESTED */
+ "Your vHost has been requested",
+ /* LNG_REQUEST_WAIT */
+ "Please wait %d seconds before requesting a new vHost",
+ /* LNG_REQUEST_MEMO */
+ "[auto memo] vHost \002%s\002 has been requested.",
+ /* LNG_ACTIVATE_SYNTAX */
+ "Syntax: \002ACTIVATE \037nick\037\002",
+ /* LNG_ACTIVATED */
+ "vHost for %s has been activated",
+ /* LNG_ACTIVATE_MEMO */
+ "[auto memo] Your requested vHost has been approved.",
+ /* LNG_REJECT_SYNTAX */
+ "Syntax: \002REJECT \037nick\037\002",
+ /* LNG_REJECTED */
+ "vHost for %s has been rejected",
+ /* LNG_REJECT_MEMO */
+ "[auto memo] Your requested vHost has been rejected.",
+ /* LNG_REJECT_MEMO_REASON */
+ "[auto memo] Your requested vHost has been rejected. Reason: %s",
+ /* LNG_NO_REQUEST */
+ "No request for nick %s found.",
+ /* LNG_HELP */
+ " REQUEST Request a vHost for your nick",
+ /* LNG_HELP_SETTER */
+ " ACTIVATE Approve the requested vHost of a user\n"
+ " REJECT Reject the requested vHost of a user\n"
+ " WAITING Convenience command for LIST +req",
+ /* LNG_HELP_REQUEST */
+ "Request the given vHost to be actived for your nick by the\n"
+ "network administrators. Please be patient while your request\n"
+ "is being considered.",
+ /* LNG_HELP_ACTIVATE */
+ "Activate the requested vHost for the given nick.",
+ /* LNG_HELP_ACTIVATE_MEMO */
+ "A memo informing the user will also be sent.",
+ /* LNG_HELP_REJECT */
+ "Reject the requested vHost for the given nick.",
+ /* LNG_HELP_REJECT_MEMO */
+ "A memo informing the user will also be sent.",
+ /* LNG_WAITING_SYNTAX */
+ "Syntax: \002WAITING\002",
+ /* LNG_HELP_WAITING */
+ "This command is provided for convenience. It is essentially\n"
+ "the same as performing a LIST +req ."
};
const char* langtable_nl[] = {
- /* LNG_REQUEST_SYNTAX */
- "Gebruik: \002REQUEST \037vhost\037\002",
- /* LNG_REQUESTED */
- "Je vHost is aangevraagd",
- /* LNG_REQUEST_WAIT */
- "Wacht %d seconden voor je een nieuwe vHost aanvraagt",
- /* LNG_REQUEST_MEMO */
- "[auto memo] vHost \002%s\002 is aangevraagd.",
- /* LNG_ACTIVATE_SYNTAX */
- "Gebruik: \002ACTIVATE \037nick\037\002",
- /* LNG_ACTIVATED */
- "vHost voor %s is geactiveerd",
- /* LNG_ACTIVATE_MEMO */
- "[auto memo] Je aangevraagde vHost is geaccepteerd.",
- /* LNG_REJECT_SYNTAX */
- "Gebruik: \002REJECT \037nick\037\002",
- /* LNG_REJECTED */
- "vHost voor %s is afgekeurd",
- /* LNG_REJECT_MEMO */
- "[auto memo] Je aangevraagde vHost is afgekeurd.",
- /* LNG_REJECT_MEMO_REASON */
- "[auto memo] Je aangevraagde vHost is afgekeurd. Reden: %s",
- /* LNG_NO_REQUEST */
- "Geen aanvraag voor nick %s gevonden.",
- /* LNG_HELP */
- " REQUEST Vraag een vHost aan voor je nick",
- /* LNG_HELP_SETTER */
- " ACTIVATE Activeer de aangevraagde vHost voor een gebruiker\n"
- " REJECT Keur de aangevraagde vHost voor een gebruiker af\n"
- " WAITING Snelkoppeling naar LIST +req",
- /* LNG_HELP_REQUEST */
- "Verzoek de gegeven vHost te activeren voor jouw nick bij de\n"
- "netwerk beheerders. Het kan even duren voordat je aanvraag\n"
- "afgehandeld wordt.",
- /* LNG_HELP_ACTIVATE */
- "Activeer de aangevraagde vHost voor de gegeven nick.",
- /* LNG_HELP_ACTIVATE_MEMO */
- "Een memo die de gebruiker op de hoogste stelt zal ook worden verstuurd.",
- /* LNG_HELP_REJECT */
- "Keur de aangevraagde vHost voor de gegeven nick af.",
- /* LNG_HELP_REJECT_MEMO */
- "Een memo die de gebruiker op de hoogste stelt zal ook worden verstuurd.",
- /* LNG_WAITING_SYNTAX */
- "Gebruik: \002WAITING\002",
- /* LNG_HELP_WAITING */
- "Dit commando is beschikbaar als handigheid. Het is simpelweg\n"
- "hetzelfde als LIST +req ."
+ /* LNG_REQUEST_SYNTAX */
+ "Gebruik: \002REQUEST \037vhost\037\002",
+ /* LNG_REQUESTED */
+ "Je vHost is aangevraagd",
+ /* LNG_REQUEST_WAIT */
+ "Wacht %d seconden voor je een nieuwe vHost aanvraagt",
+ /* LNG_REQUEST_MEMO */
+ "[auto memo] vHost \002%s\002 is aangevraagd.",
+ /* LNG_ACTIVATE_SYNTAX */
+ "Gebruik: \002ACTIVATE \037nick\037\002",
+ /* LNG_ACTIVATED */
+ "vHost voor %s is geactiveerd",
+ /* LNG_ACTIVATE_MEMO */
+ "[auto memo] Je aangevraagde vHost is geaccepteerd.",
+ /* LNG_REJECT_SYNTAX */
+ "Gebruik: \002REJECT \037nick\037\002",
+ /* LNG_REJECTED */
+ "vHost voor %s is afgekeurd",
+ /* LNG_REJECT_MEMO */
+ "[auto memo] Je aangevraagde vHost is afgekeurd.",
+ /* LNG_REJECT_MEMO_REASON */
+ "[auto memo] Je aangevraagde vHost is afgekeurd. Reden: %s",
+ /* LNG_NO_REQUEST */
+ "Geen aanvraag voor nick %s gevonden.",
+ /* LNG_HELP */
+ " REQUEST Vraag een vHost aan voor je nick",
+ /* LNG_HELP_SETTER */
+ " ACTIVATE Activeer de aangevraagde vHost voor een gebruiker\n"
+ " REJECT Keur de aangevraagde vHost voor een gebruiker af\n"
+ " WAITING Snelkoppeling naar LIST +req",
+ /* LNG_HELP_REQUEST */
+ "Verzoek de gegeven vHost te activeren voor jouw nick bij de\n"
+ "netwerk beheerders. Het kan even duren voordat je aanvraag\n"
+ "afgehandeld wordt.",
+ /* LNG_HELP_ACTIVATE */
+ "Activeer de aangevraagde vHost voor de gegeven nick.",
+ /* LNG_HELP_ACTIVATE_MEMO */
+ "Een memo die de gebruiker op de hoogste stelt zal ook worden verstuurd.",
+ /* LNG_HELP_REJECT */
+ "Keur de aangevraagde vHost voor de gegeven nick af.",
+ /* LNG_HELP_REJECT_MEMO */
+ "Een memo die de gebruiker op de hoogste stelt zal ook worden verstuurd.",
+ /* LNG_WAITING_SYNTAX */
+ "Gebruik: \002WAITING\002",
+ /* LNG_HELP_WAITING */
+ "Dit commando is beschikbaar als handigheid. Het is simpelweg\n"
+ "hetzelfde als LIST +req ."
};
const char* langtable_pt[] = {
- /* LNG_REQUEST_SYNTAX */
- "Sintaxe: \002REQUEST \037vhost\037\002",
- /* LNG_REQUESTED */
- "Seu pedido de vHost foi encaminhado",
- /* LNG_REQUEST_WAIT */
- "Por favor, espere %d segundos antes de fazer um novo pedido de vHost",
- /* LNG_REQUEST_MEMO */
- "[Auto Memo] O vHost \002%s\002 foi solicitado.",
- /* LNG_ACTIVATE_SYNTAX */
- "Sintaxe: \002ACTIVATE \037nick\037\002",
- /* LNG_ACTIVATED */
- "O vHost para %s foi ativado",
- /* LNG_ACTIVATE_MEMO */
- "[Auto Memo] Seu pedido de vHost foi aprovado.",
- /* LNG_REJECT_SYNTAX */
- "Sintaxe: \002REJECT \037nick\037\002",
- /* LNG_REJECTED */
- "O vHost de %s foi recusado",
- /* LNG_REJECT_MEMO */
- "[Auto Memo] Seu pedido de vHost foi recusado.",
- /* LNG_REJECT_MEMO_REASON */
- "[Auto Memo] Seu pedido de vHost foi recusado. Motivo: %s",
- /* LNG_NO_REQUEST */
- "Nenhum pedido encontrado para o nick %s.",
- /* LNG_HELP */
- " REQUEST Request a vHost for your nick",
- /* LNG_HELP_SETTER */
- " ACTIVATE Aprova o pedido de vHost de um usuбrio\n"
- " REJECT Recusa o pedido de vHost de um usuбrio\n"
- " WAITING Comando para LISTAR +req",
- /* LNG_HELP_REQUEST */
- "Solicita a ativaзгo do vHost fornecido em seu nick pelos\n"
- "administradores da rede. Por favor, tenha paciкncia\n"
- "enquanto seu pedido й analisado.",
- /* LNG_HELP_ACTIVATE */
- "Ativa o vHost solicitado para o nick fornecido.",
- /* LNG_HELP_ACTIVATE_MEMO */
- "Um memo informando o usuбrio tambйm serб enviado.",
- /* LNG_HELP_REJECT */
- "Recusa o pedido de vHost para o nick fornecido.",
- /* LNG_HELP_REJECT_MEMO */
- "Um memo informando o usuбrio tambйm serб enviado.",
- /* LNG_WAITING_SYNTAX */
- "Sintaxe: \002WAITING\002",
- /* LNG_HELP_WAITING */
- "Este comando й usado por conveniкncia. Й essencialmente\n"
- "o mesmo que fazer um LIST +req"
+ /* LNG_REQUEST_SYNTAX */
+ "Sintaxe: \002REQUEST \037vhost\037\002",
+ /* LNG_REQUESTED */
+ "Seu pedido de vHost foi encaminhado",
+ /* LNG_REQUEST_WAIT */
+ "Por favor, espere %d segundos antes de fazer um novo pedido de vHost",
+ /* LNG_REQUEST_MEMO */
+ "[Auto Memo] O vHost \002%s\002 foi solicitado.",
+ /* LNG_ACTIVATE_SYNTAX */
+ "Sintaxe: \002ACTIVATE \037nick\037\002",
+ /* LNG_ACTIVATED */
+ "O vHost para %s foi ativado",
+ /* LNG_ACTIVATE_MEMO */
+ "[Auto Memo] Seu pedido de vHost foi aprovado.",
+ /* LNG_REJECT_SYNTAX */
+ "Sintaxe: \002REJECT \037nick\037\002",
+ /* LNG_REJECTED */
+ "O vHost de %s foi recusado",
+ /* LNG_REJECT_MEMO */
+ "[Auto Memo] Seu pedido de vHost foi recusado.",
+ /* LNG_REJECT_MEMO_REASON */
+ "[Auto Memo] Seu pedido de vHost foi recusado. Motivo: %s",
+ /* LNG_NO_REQUEST */
+ "Nenhum pedido encontrado para o nick %s.",
+ /* LNG_HELP */
+ " REQUEST Request a vHost for your nick",
+ /* LNG_HELP_SETTER */
+ " ACTIVATE Aprova o pedido de vHost de um usuбrio\n"
+ " REJECT Recusa o pedido de vHost de um usuбrio\n"
+ " WAITING Comando para LISTAR +req",
+ /* LNG_HELP_REQUEST */
+ "Solicita a ativaзгo do vHost fornecido em seu nick pelos\n"
+ "administradores da rede. Por favor, tenha paciкncia\n"
+ "enquanto seu pedido й analisado.",
+ /* LNG_HELP_ACTIVATE */
+ "Ativa o vHost solicitado para o nick fornecido.",
+ /* LNG_HELP_ACTIVATE_MEMO */
+ "Um memo informando o usuбrio tambйm serб enviado.",
+ /* LNG_HELP_REJECT */
+ "Recusa o pedido de vHost para o nick fornecido.",
+ /* LNG_HELP_REJECT_MEMO */
+ "Um memo informando o usuбrio tambйm serб enviado.",
+ /* LNG_WAITING_SYNTAX */
+ "Sintaxe: \002WAITING\002",
+ /* LNG_HELP_WAITING */
+ "Este comando й usado por conveniкncia. Й essencialmente\n"
+ "o mesmo que fazer um LIST +req"
};
const char* langtable_ru[] = {
- /* LNG_REQUEST_SYNTAX */
- "Синтаксис: \002REQUEST \037vHost\037\002",
- /* LNG_REQUESTED */
- "Ваш запрос на vHost отправлен.",
- /* LNG_REQUEST_WAIT */
- "Пожалуйста, подождите %d секунд, прежде чем запрашивать новый vHost",
- /* LNG_REQUEST_MEMO */
- "[авто-сообщение] Был запрошен vHost \002%s\002",
- /* LNG_ACTIVATE_SYNTAX */
- "Синтаксис: \002ACTIVATE \037ник\037\002",
- /* LNG_ACTIVATED */
- "vHost для %s успешно активирован",
- /* LNG_ACTIVATE_MEMO */
- "[авто-сообщение] Запрашиваемый вами vHost утвержден и активирован.",
- /* LNG_REJECT_SYNTAX */
- "Синтаксис: \002REJECT \037ник\037\002",
- /* LNG_REJECTED */
- "vHost для %s отклонен.",
- /* LNG_REJECT_MEMO */
- "[авто-сообщение] Запрашиваемый вами vHost отклонен.",
- /* LNG_REJECT_MEMO_REASON */
- "[авто-сообщение] Запрашиваемый вами vHost отклонен. Причина: %s",
- /* LNG_NO_REQUEST */
- "Запрос на vHost для ника %s не найден.",
- /* LNG_HELP */
- " REQUEST Запрос на vHost для вашего текущего ника",
- /* LNG_HELP_SETTER */
- " ACTIVATE Утвердить запрашиваемый пользователем vHost\n"
- " REJECT Отклонить запрашиваемый пользователем vHost\n"
- " WAITING Список запросов ожидающих обработки (аналог LIST +req)",
- /* LNG_HELP_REQUEST */
- "Отправляет запрос на активацию vHost, который будет рассмотрен одним из\n"
- "администраторов сети. Просьба проявить терпение, пока запрос\n"
- "рассматривается администрацией.",
- /* LNG_HELP_ACTIVATE */
- "Утвердить запрашиваемый vHost для указанного ника.",
- /* LNG_HELP_ACTIVATE_MEMO */
- "Пользователю будет послано авто-уведомление об активации его запроса.",
- /* LNG_HELP_REJECT */
- "Отклонить запрашиваемый vHost для указанного ника.",
- /* LNG_HELP_REJECT_MEMO */
- "Пользователю будет послано авто-уведомление об отклонении его запроса.",
- /* LNG_WAITING_SYNTAX */
- "Синтаксис: \002WAITING\002",
- /* LNG_HELP_WAITING */
- "Данная команда создана для удобства использования и выводит список запросов,\n"
- "ожидающих обработки. Аналогичная команда: LIST +req ."
+ /* LNG_REQUEST_SYNTAX */
+ "Синтаксис: \002REQUEST \037vHost\037\002",
+ /* LNG_REQUESTED */
+ "Ваш запрос на vHost отправлен.",
+ /* LNG_REQUEST_WAIT */
+ "Пожалуйста, подождите %d секунд, прежде чем запрашивать новый vHost",
+ /* LNG_REQUEST_MEMO */
+ "[авто-сообщение] Был запрошен vHost \002%s\002",
+ /* LNG_ACTIVATE_SYNTAX */
+ "Синтаксис: \002ACTIVATE \037ник\037\002",
+ /* LNG_ACTIVATED */
+ "vHost для %s успешно активирован",
+ /* LNG_ACTIVATE_MEMO */
+ "[авто-сообщение] Запрашиваемый вами vHost утвержден и активирован.",
+ /* LNG_REJECT_SYNTAX */
+ "Синтаксис: \002REJECT \037ник\037\002",
+ /* LNG_REJECTED */
+ "vHost для %s отклонен.",
+ /* LNG_REJECT_MEMO */
+ "[авто-сообщение] Запрашиваемый вами vHost отклонен.",
+ /* LNG_REJECT_MEMO_REASON */
+ "[авто-сообщение] Запрашиваемый вами vHost отклонен. Причина: %s",
+ /* LNG_NO_REQUEST */
+ "Запрос на vHost для ника %s не найден.",
+ /* LNG_HELP */
+ " REQUEST Запрос на vHost для вашего текущего ника",
+ /* LNG_HELP_SETTER */
+ " ACTIVATE Утвердить запрашиваемый пользователем vHost\n"
+ " REJECT Отклонить запрашиваемый пользователем vHost\n"
+ " WAITING Список запросов ожидающих обработки (аналог LIST +req)",
+ /* LNG_HELP_REQUEST */
+ "Отправляет запрос на активацию vHost, который будет рассмотрен одним из\n"
+ "администраторов сети. Просьба проявить терпение, пока запрос\n"
+ "рассматривается администрацией.",
+ /* LNG_HELP_ACTIVATE */
+ "Утвердить запрашиваемый vHost для указанного ника.",
+ /* LNG_HELP_ACTIVATE_MEMO */
+ "Пользователю будет послано авто-уведомление об активации его запроса.",
+ /* LNG_HELP_REJECT */
+ "Отклонить запрашиваемый vHost для указанного ника.",
+ /* LNG_HELP_REJECT_MEMO */
+ "Пользователю будет послано авто-уведомление об отклонении его запроса.",
+ /* LNG_WAITING_SYNTAX */
+ "Синтаксис: \002WAITING\002",
+ /* LNG_HELP_WAITING */
+ "Данная команда создана для удобства использования и выводит список запросов,\n"
+ "ожидающих обработки. Аналогичная команда: LIST +req ."
};
const char* langtable_it[] = {
- /* LNG_REQUEST_SYNTAX */
- "Sintassi: \002REQUEST \037vhost\037\002",
- /* LNG_REQUESTED */
- "Il tuo vHost и stato richiesto",
- /* LNG_REQUEST_WAIT */
- "Prego attendere %d secondi prima di richiedere un nuovo vHost",
- /* LNG_REQUEST_MEMO */
- "[auto memo] и stato richiesto il vHost \002%s\002.",
- /* LNG_ACTIVATE_SYNTAX */
- "Sintassi: \002ACTIVATE \037nick\037\002",
- /* LNG_ACTIVATED */
- "Il vHost per %s и stato attivato",
- /* LNG_ACTIVATE_MEMO */
- "[auto memo] Il vHost da te richiesto и stato approvato.",
- /* LNG_REJECT_SYNTAX */
- "Sintassi: \002REJECT \037nick\037\002",
- /* LNG_REJECTED */
- "Il vHost per %s и stato rifiutato",
- /* LNG_REJECT_MEMO */
- "[auto memo] Il vHost da te richiesto и stato rifiutato.",
- /* LNG_REJECT_MEMO_REASON */
- "[auto memo] Il vHost da te richiesto и stato rifiutato. Motivo: %s",
- /* LNG_NO_REQUEST */
- "Nessuna richiesta trovata per il nick %s.",
- /* LNG_HELP */
- " REQUEST Richiede un vHost per il tuo nick",
- /* LNG_HELP_SETTER */
- " ACTIVATE Approva il vHost richiesto di un utente\n"
- " REJECT Rifiuta il vHost richiesto di un utente\n"
- " WAITING Comando per LIST +req",
- /* LNG_HELP_REQUEST */
- "Richiede l'attivazione del vHost specificato per il tuo nick da parte\n"
- "degli amministratori di rete. Sei pregato di pazientare finchи la tua\n"
- "richiesta viene elaborata.",
- /* LNG_HELP_ACTIVATE */
- "Attiva il vHost richiesto per il nick specificato.",
- /* LNG_HELP_ACTIVATE_MEMO */
- "Viene inviato un memo per informare l'utente.",
- /* LNG_HELP_REJECT */
- "Rifiuta il vHost richiesto per il nick specificato.",
- /* LNG_HELP_REJECT_MEMO */
- "Viene inviato un memo per informare l'utente.",
- /* LNG_WAITING_SYNTAX */
- "Sintassi: \002WAITING\002",
- /* LNG_HELP_WAITING */
- "Questo comando и per comoditа. Praticamente и la stessa cosa che\n"
- "eseguire un LIST +req ."
+ /* LNG_REQUEST_SYNTAX */
+ "Sintassi: \002REQUEST \037vhost\037\002",
+ /* LNG_REQUESTED */
+ "Il tuo vHost и stato richiesto",
+ /* LNG_REQUEST_WAIT */
+ "Prego attendere %d secondi prima di richiedere un nuovo vHost",
+ /* LNG_REQUEST_MEMO */
+ "[auto memo] и stato richiesto il vHost \002%s\002.",
+ /* LNG_ACTIVATE_SYNTAX */
+ "Sintassi: \002ACTIVATE \037nick\037\002",
+ /* LNG_ACTIVATED */
+ "Il vHost per %s и stato attivato",
+ /* LNG_ACTIVATE_MEMO */
+ "[auto memo] Il vHost da te richiesto и stato approvato.",
+ /* LNG_REJECT_SYNTAX */
+ "Sintassi: \002REJECT \037nick\037\002",
+ /* LNG_REJECTED */
+ "Il vHost per %s и stato rifiutato",
+ /* LNG_REJECT_MEMO */
+ "[auto memo] Il vHost da te richiesto и stato rifiutato.",
+ /* LNG_REJECT_MEMO_REASON */
+ "[auto memo] Il vHost da te richiesto и stato rifiutato. Motivo: %s",
+ /* LNG_NO_REQUEST */
+ "Nessuna richiesta trovata per il nick %s.",
+ /* LNG_HELP */
+ " REQUEST Richiede un vHost per il tuo nick",
+ /* LNG_HELP_SETTER */
+ " ACTIVATE Approva il vHost richiesto di un utente\n"
+ " REJECT Rifiuta il vHost richiesto di un utente\n"
+ " WAITING Comando per LIST +req",
+ /* LNG_HELP_REQUEST */
+ "Richiede l'attivazione del vHost specificato per il tuo nick da parte\n"
+ "degli amministratori di rete. Sei pregato di pazientare finchи la tua\n"
+ "richiesta viene elaborata.",
+ /* LNG_HELP_ACTIVATE */
+ "Attiva il vHost richiesto per il nick specificato.",
+ /* LNG_HELP_ACTIVATE_MEMO */
+ "Viene inviato un memo per informare l'utente.",
+ /* LNG_HELP_REJECT */
+ "Rifiuta il vHost richiesto per il nick specificato.",
+ /* LNG_HELP_REJECT_MEMO */
+ "Viene inviato un memo per informare l'utente.",
+ /* LNG_WAITING_SYNTAX */
+ "Sintassi: \002WAITING\002",
+ /* LNG_HELP_WAITING */
+ "Questo comando и per comoditа. Praticamente и la stessa cosa che\n"
+ "eseguire un LIST +req ."
};
+
this->InsertLanguage(LANG_EN_US, LNG_NUM_STRINGS, langtable_en_us);
this->InsertLanguage(LANG_NL, LNG_NUM_STRINGS, langtable_nl);
this->InsertLanguage(LANG_PT, LNG_NUM_STRINGS, langtable_pt);
@@ -401,109 +729,7 @@ class HSRequest : public Module
}
};
-
-int hs_do_request(User * u)
-{
- char *cur_buffer;
- char *nick;
- char *rawhostmask;
- char hostmask[HOSTMAX];
- NickAlias *na;
- int32 tmp_time;
- char *s;
- char *vIdent = NULL;
- time_t now = time(NULL);
-
- cur_buffer = moduleGetLastBuffer();
- nick = u->nick;
- rawhostmask = myStrGetToken(cur_buffer, ' ', 0);
-
- if (!nick || !rawhostmask) {
- if (rawhostmask)
- delete [] rawhostmask;
- me->NoticeLang(s_HostServ, u, LNG_REQUEST_SYNTAX);
- return MOD_CONT;
- }
-
- vIdent = myStrGetOnlyToken(rawhostmask, '@', 0); /* Get the first substring, @ as delimiter */
- if (vIdent) {
- rawhostmask = myStrGetTokenRemainder(rawhostmask, '@', 1); /* get the remaining string */
- if (!rawhostmask) {
- me->NoticeLang(s_HostServ, u, LNG_REQUEST_SYNTAX);
- delete [] vIdent;
- return MOD_CONT;
- }
- if (strlen(vIdent) > USERMAX - 1) {
- notice_lang(s_HostServ, u, HOST_SET_IDENTTOOLONG, USERMAX);
- delete [] vIdent;
- delete [] rawhostmask;
- return MOD_CONT;
- } else {
- for (s = vIdent; *s; s++) {
- if (!my_isvalidchar(*s)) {
- notice_lang(s_HostServ, u, HOST_SET_IDENT_ERROR);
- delete [] vIdent;
- delete [] rawhostmask;
- return MOD_CONT;
- }
- }
- }
- if (!ircd->vident) {
- notice_lang(s_HostServ, u, HOST_NO_VIDENT);
- delete [] vIdent;
- delete [] rawhostmask;
- return MOD_CONT;
- }
- }
- if (strlen(rawhostmask) < HOSTMAX - 1) {
- snprintf(hostmask, HOSTMAX, "%s", rawhostmask);
- } else {
- notice_lang(s_HostServ, u, HOST_SET_TOOLONG, HOSTMAX);
- if (vIdent)
- delete [] vIdent;
- delete [] rawhostmask;
- return MOD_CONT;
- }
-
- if (!isValidHost(hostmask, 3)) {
- notice_lang(s_HostServ, u, HOST_SET_ERROR);
- if (vIdent)
- delete [] vIdent;
- delete [] rawhostmask;
- return MOD_CONT;
- }
-
- tmp_time = time(NULL);
- if ((na = findnick(nick))) {
- if (HSRequestMemoOper || HSRequestMemoSetters) {
- if (MSSendDelay > 0 && u
- && u->lastmemosend + MSSendDelay > now) {
- me->NoticeLang(s_HostServ, u, LNG_REQUEST_WAIT,
- MSSendDelay);
- u->lastmemosend = now;
- if (vIdent)
- delete [] vIdent;
- delete [] rawhostmask;
- return MOD_CONT;
- }
- }
- my_add_host_request(nick, vIdent, hostmask, u->nick, tmp_time);
-
- me->NoticeLang(s_HostServ, u, LNG_REQUESTED);
- req_send_memos(u, hostmask);
- alog("New vHost Requested by %s", nick);
- } else {
- notice_lang(s_HostServ, u, HOST_NOREG, nick);
- }
-
- if (vIdent)
- delete [] vIdent;
- delete [] rawhostmask;
-
- return MOD_CONT;
-}
-
-void my_memo_lang(User * u, char *name, int z, int number, ...)
+void my_memo_lang(User *u, char *name, int z, int number, ...)
{
va_list va;
char buffer[4096], outbuf[4096];
@@ -518,16 +744,18 @@ void my_memo_lang(User * u, char *name, int z, int number, ...)
lang = u2->na->nc->language;
/* If the users lang isnt supported, drop back to enlgish */
- if (me->lang[lang].argc == 0)
+ if (!me->lang[lang].argc)
lang = LANG_EN_US;
/* If the requested lang string exists for the language */
- if (me->lang[lang].argc > number) {
+ if (me->lang[lang].argc > number)
+ {
fmt = me->lang[lang].argv[number];
buf = sstrdup(fmt);
s = buf;
- while (*s) {
+ while (*s)
+ {
t = s;
s += strcspn(s, "\n");
if (*s)
@@ -540,13 +768,12 @@ void my_memo_lang(User * u, char *name, int z, int number, ...)
memo_send(u, name, buffer, z);
}
delete [] buf;
- } else {
- alog("%s: INVALID language string call, language: [%d], String [%d]", me->name.c_str(), lang, number);
}
+ else
+ alog("%s: INVALID language string call, language: [%d], String [%d]", me->name.c_str(), lang, number);
}
-
-void req_send_memos(User * u, char *vHost)
+void req_send_memos(User *u, char *vHost)
{
int i;
int z = 2;
@@ -554,281 +781,56 @@ void req_send_memos(User * u, char *vHost)
if (checkDefCon(DEFCON_NO_NEW_MEMOS))
return;
- if (HSRequestMemoOper == 1) {
- for (i = 0; i < servopers.count; i++) {
- my_memo_lang(u, ((static_cast<NickCore *>(servopers.list[i]))->display), z,
- LNG_REQUEST_MEMO, vHost);
- }
- for (i = 0; i < servadmins.count; i++) {
- my_memo_lang(u, ((static_cast<NickCore *>(servadmins.list[i]))->display),
- z, LNG_REQUEST_MEMO, vHost);
- }
- for (i = 0; i < RootNumber; i++) {
+ if (HSRequestMemoOper == 1)
+ {
+ for (i = 0; i < servopers.count; ++i)
+ my_memo_lang(u, (static_cast<NickCore *>(servopers.list[i]))->display, z, LNG_REQUEST_MEMO, vHost);
+ for (i = 0; i < servadmins.count; ++i)
+ my_memo_lang(u, (static_cast<NickCore *>(servadmins.list[i]))->display, z, LNG_REQUEST_MEMO, vHost);
+ for (i = 0; i < RootNumber; ++i)
my_memo_lang(u, ServicesRoots[i], z, LNG_REQUEST_MEMO, vHost);
- }
}
- if (HSRequestMemoSetters == 1) {
- for (i = 0; i < HostNumber; i++) {
+ if (HSRequestMemoSetters == 1)
+ {
+ for (i = 0; i < HostNumber; ++i)
my_memo_lang(u, HostSetters[i], z, LNG_REQUEST_MEMO, vHost);
- }
- }
-}
-
-int ns_do_drop(User * u)
-{
- HostCore *tmp;
- bool found = false;
- NickAlias *na;
-
- na = findnick(u->nick);
- tmp = findHostCore(hs_request_head, u->nick, &found);
-
- if (found && na)
- hs_request_head = deleteHostCore(hs_request_head, tmp);
-
- return MOD_CONT;
-}
-
-int hs_do_reject(User * u)
-{
- char *cur_buffer;
- char *nick;
- char *reason;
- HostCore *tmp, *hc;
- bool found = false;
-
- cur_buffer = moduleGetLastBuffer();
- nick = myStrGetToken(cur_buffer, ' ', 0);
- reason = myStrGetTokenRemainder(cur_buffer, ' ', 1);
-
- if (!nick) {
- me->NoticeLang(s_HostServ, u, LNG_REJECT_SYNTAX);
- if (reason)
- delete [] reason;
- return MOD_CONT;
- }
-
- tmp = findHostCore(hs_request_head, nick, &found);
- if (found) {
- if (!tmp)
- hc = hs_request_head;
- else
- hc = tmp->next;
-
- if (HSRequestMemoUser) {
- if (reason)
- my_memo_lang(u, hc->nick, 2, LNG_REJECT_MEMO_REASON,
- reason);
- else
- my_memo_lang(u, hc->nick, 2, LNG_REJECT_MEMO);
- }
-
- hs_request_head = deleteHostCore(hs_request_head, tmp);
- me->NoticeLang(s_HostServ, u, LNG_REJECTED, nick);
- alog("Host Request for %s rejected by %s (%s)", nick, u->nick,
- reason ? reason : "");
- } else {
- me->NoticeLang(s_HostServ, u, LNG_NO_REQUEST, nick);
- }
-
- delete [] nick;
- if (reason)
- delete [] reason;
-
- return MOD_CONT;
-}
-
-int hs_do_activate(User * u)
-{
- char *cur_buffer;
- char *nick;
- NickAlias *na;
- HostCore *tmp, *hc;
- bool found = false;
-
- cur_buffer = moduleGetLastBuffer();
- nick = myStrGetToken(cur_buffer, ' ', 0);
-
- if (!nick) {
- me->NoticeLang(s_HostServ, u, LNG_ACTIVATE_SYNTAX);
- return MOD_CONT;
}
-
- if ((na = findnick(nick))) {
- tmp = findHostCore(hs_request_head, nick, &found);
- if (found) {
- if (!tmp)
- hc = hs_request_head;
- else
- hc = tmp->next;
-
- addHostCore(hc->nick, hc->vIdent, hc->vHost, u->nick,
- time(NULL));
-
- if (HSRequestMemoUser)
- my_memo_lang(u, hc->nick, 2, LNG_ACTIVATE_MEMO);
-
- hs_request_head = deleteHostCore(hs_request_head, tmp);
- me->NoticeLang(s_HostServ, u, LNG_ACTIVATED, nick);
- alog("Host Request for %s activated by %s", nick, u->nick);
- } else {
- me->NoticeLang(s_HostServ, u, LNG_NO_REQUEST, nick);
- }
- } else {
- notice_lang(s_HostServ, u, NICK_X_NOT_REGISTERED, nick);
- }
-
- delete [] nick;
- return MOD_CONT;
}
-
-void my_add_host_request(char *nick, char *vIdent, char *vhost,
- char *creator, int32 tmp_time)
+void my_add_host_request(char *nick, char *vIdent, char *vhost, char *creator, int32 tmp_time)
{
HostCore *tmp;
bool found = false;
- if (!hs_request_head) {
- hs_request_head =
- createHostCorelist(hs_request_head, nick, vIdent, vhost,
- creator, tmp_time);
- } else {
+ if (!hs_request_head)
+ hs_request_head = createHostCorelist(hs_request_head, nick, vIdent, vhost, creator, tmp_time);
+ else {
tmp = findHostCore(hs_request_head, nick, &found);
- if (!found) {
- hs_request_head =
- insertHostCore(hs_request_head, tmp, nick, vIdent, vhost,
- creator, tmp_time);
- } else {
- hs_request_head = deleteHostCore(hs_request_head, tmp); /* delete the old entry */
- my_add_host_request(nick, vIdent, vhost, creator, tmp_time); /* recursive call to add new entry */
+ if (!found)
+ hs_request_head = insertHostCore(hs_request_head, tmp, nick, vIdent, vhost, creator, tmp_time);
+ else
+ {
+ hs_request_head = deleteHostCore(hs_request_head, tmp); /* delete the old entry */
+ my_add_host_request(nick, vIdent, vhost, creator, tmp_time); /* recursive call to add new entry */
}
}
}
int my_isvalidchar(const char c)
{
- if (((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'z'))
- || ((c >= '0') && (c <= '9')) || (c == '.') || (c == '-'))
+ if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '.' || c == '-')
return 1;
else
return 0;
}
-int hs_do_list_out(User * u)
-{
- char *key;
-
- key = moduleGetLastBuffer();
- if (!key)
- return MOD_CONT;
-
- if (stricmp(key, "+req") != 0)
- return MOD_CONT;
-
- show_list(u);
-
- return MOD_CONT;
-}
-
-int hs_do_waiting(User * u)
-{
- show_list(u);
-
- return MOD_CONT;
-}
-
-void show_list(User * u)
-{
- struct tm *tm;
- char buf[BUFSIZE];
- int counter = 1;
- int from = 0, to = 0;
- int display_counter = 0;
- HostCore *current;
-
- current = hs_request_head;
- while (current) {
- if ((((counter >= from) && (counter <= to))
- || ((from == 0) && (to == 0)))
- && (display_counter < NSListMax)) {
- display_counter++;
- tm = localtime(&current->time);
- strftime(buf, sizeof(buf),
- getstring(NULL, STRFTIME_DATE_TIME_FORMAT), tm);
- if (current->vIdent)
- notice_lang(s_HostServ, u, HOST_IDENT_ENTRY, counter,
- current->nick, current->vIdent, current->vHost,
- current->creator, buf);
- else
- notice_lang(s_HostServ, u, HOST_ENTRY, counter,
- current->nick, current->vHost,
- current->creator, buf);
- }
- counter++;
- current = current->next;
- }
- notice_lang(s_HostServ, u, HOST_LIST_FOOTER, display_counter);
-}
-
-int hs_help_request(User * u)
-{
- me->NoticeLang(s_HostServ, u, LNG_REQUEST_SYNTAX);
- ircdproto->SendMessage(findbot(s_HostServ), u->nick, " ");
- me->NoticeLang(s_HostServ, u, LNG_HELP_REQUEST);
-
- return MOD_CONT;
-}
-
-int hs_help_activate(User * u)
-{
- if (is_host_setter(u)) {
- me->NoticeLang(s_HostServ, u, LNG_ACTIVATE_SYNTAX);
- ircdproto->SendMessage(findbot(s_HostServ), u->nick, " ");
- me->NoticeLang(s_HostServ, u, LNG_HELP_ACTIVATE);
- if (HSRequestMemoUser)
- me->NoticeLang(s_HostServ, u, LNG_HELP_ACTIVATE_MEMO);
- } else {
- notice_lang(s_HostServ, u, NO_HELP_AVAILABLE, "ACTIVATE");
- }
-
- return MOD_CONT;
-}
-
-int hs_help_reject(User * u)
-{
- if (is_host_setter(u)) {
- me->NoticeLang(s_HostServ, u, LNG_REJECT_SYNTAX);
- ircdproto->SendMessage(findbot(s_HostServ), u->nick, " ");
- me->NoticeLang(s_HostServ, u, LNG_HELP_REJECT);
- if (HSRequestMemoUser)
- me->NoticeLang(s_HostServ, u, LNG_HELP_REJECT_MEMO);
- } else {
- notice_lang(s_HostServ, u, NO_HELP_AVAILABLE, "REJECT");
- }
-
- return MOD_CONT;
-}
-
-int hs_help_waiting(User * u)
-{
- if (is_host_setter(u)) {
- me->NoticeLang(s_HostServ, u, LNG_WAITING_SYNTAX);
- ircdproto->SendMessage(findbot(s_HostServ), u->nick, " ");
- me->NoticeLang(s_HostServ, u, LNG_HELP_WAITING);
- } else {
- notice_lang(s_HostServ, u, NO_HELP_AVAILABLE, "WAITING");
- }
-
- return MOD_CONT;
-}
-
void hs_help(User * u)
{
me->NoticeLang(s_HostServ, u, LNG_HELP);
if (is_host_setter(u))
me->NoticeLang(s_HostServ, u, LNG_HELP_SETTER);
}
+
void hsreq_load_db()
{
FILE *fp;
@@ -844,31 +846,36 @@ void hsreq_load_db()
filename = HSREQ_DEFAULT_DBNAME;
fp = fopen(filename, "r");
- if (!fp) {
- alog("[hs_request] Unable to open database ('%s') for reading",
- filename);
+ if (!fp)
+ {
+ alog("[hs_request] Unable to open database ('%s') for reading", filename);
return;
}
- while (fgets(readbuf, 1024, fp)) {
+ while (fgets(readbuf, 1024, fp))
+ {
buf = normalizeBuffer(readbuf);
- if (buf || *buf) {
+ if (buf || *buf)
+ {
nick = myStrGetToken(buf, ':', 0);
vident = myStrGetToken(buf, ':', 1);
vhost = myStrGetToken(buf, ':', 2);
tmp = myStrGetToken(buf, ':', 3);
- if (tmp) {
+ if (tmp)
+ {
tmp_time = strtol(tmp, NULL, 16);
delete [] tmp;
- } else {
- tmp_time = 0;
}
+ else
+ tmp_time = 0;
creator = myStrGetToken(buf, ':', 4);
- if (!nick || !vident || !vhost || !creator) {
+ if (!nick || !vident || !vhost || !creator)
+ {
alog("[hs_request] Error while reading database, skipping record");
continue;
}
- if (stricmp(vident, "(null)") == 0) {
+ if (!stricmp(vident, "(null)"))
+ {
delete [] vident;
vident = NULL;
}
@@ -901,17 +908,17 @@ void hsreq_save_db()
filename = HSREQ_DEFAULT_DBNAME;
fp = fopen(filename, "w");
- if (!fp) {
- alog("[hs_request] Unable to open database ('%s') for writing",
- filename);
+ if (!fp)
+ {
+ alog("[hs_request] Unable to open database ('%s') for writing", filename);
return;
}
current = hs_request_head;
- while (current) {
- vident = (current->vIdent ? current->vIdent : "(null)");
- fprintf(fp, "%s:%s:%s:%X:%s\n", current->nick, vident,
- current->vHost, static_cast<uint32>(current->time), current->creator);
+ while (current)
+ {
+ vident = current->vIdent ? current->vIdent : "(null)";
+ fprintf(fp, "%s:%s:%s:%X:%s\n", current->nick, vident, current->vHost, static_cast<uint32>(current->time), current->creator);
current = current->next;
}
@@ -923,7 +930,7 @@ void hsreq_save_db()
int hsreqevt_db_saving(int argc, char **argv)
{
- if ((argc >= 1) && (stricmp(argv[0], EVENT_START) == 0))
+ if (argc >= 1 && !stricmp(argv[0], EVENT_START))
hsreq_save_db();
return MOD_CONT;
@@ -931,7 +938,8 @@ int hsreqevt_db_saving(int argc, char **argv)
int hsreqevt_db_backup(int argc, char **argv)
{
- if ((argc >= 1) && (stricmp(argv[0], EVENT_START) == 0)) {
+ if (argc >= 1 && !stricmp(argv[0], EVENT_START))
+ {
if (HSRequestDBName)
ModuleDatabaseBackup(HSRequestDBName);
else
diff --git a/src/modules/ns_maxemail.c b/src/modules/ns_maxemail.c
index df6d51cda..b2e870c88 100644
--- a/src/modules/ns_maxemail.c
+++ b/src/modules/ns_maxemail.c
@@ -20,8 +20,6 @@
void my_load_config();
void my_add_languages();
-int my_ns_register(User * u);
-int my_ns_set(User * u);
int my_event_reload(int argc, char **argv);
int NSEmailMax = 0;
@@ -32,12 +30,53 @@ int NSEmailMax = 0;
static Module *me;
+class CommandNSRegister : public Command
+{
+ public:
+ CommandNSRegister() : Command("REGISTER", 2, 2)
+ {
+ }
+
+ CommandResult(User *u, std::vector<std::string> &params)
+ {
+ return check_email_limit_reached(params[1].c_str(), u);
+ }
+
+ void OnSyntaxError(User *u)
+ {
+ // no-op
+ }
+};
+
+class CommandNSSet : public Command
+{
+ public:
+ CommandNSSet() : Command("SET", 2, 2)
+ {
+ }
+
+ CommandResult Execute(User *u, std::vector<std::string> &params)
+ {
+ const char *set = params[0].c_str();
+ const char *email = params[1].c_str();
+
+ if (!stricmp(set, "email"))
+ return MOD_CONT;
+
+ return check_email_limit_reached(email, u);
+ }
+
+ void OnSyntaxError(User *u)
+ {
+ // no-op
+ }
+};
+
class NSMaxEmail : public Module
{
public:
NSMaxEmail(const std::string &modname, const std::string &creator) : Module(modname, creator)
{
- Command *c;
EvtHook *evt;
int status;
@@ -47,57 +86,55 @@ class NSMaxEmail : public Module
this->SetVersion(VERSION);
this->SetType(SUPPORTED);
- c = createCommand("REGISTER", my_ns_register, NULL, -1, -1, -1, -1, -1);
- this->AddCommand(NICKSERV, c, MOD_HEAD);
- c = createCommand("SET", my_ns_set, NULL, -1, -1, -1, -1, -1);
- this->AddCommand(NICKSERV, c, MOD_HEAD);
+ this->AddCommand(NICKSERV, new CommandNSRegister(), MOD_HEAD);
+ this->AddCommand(NICKSERV, new CommandNSSet(), MOD_HEAD);
evt = createEventHook(EVENT_RELOAD, my_event_reload);
if ((status = this->AddEventHook(evt)))
- throw ModuleException("ns_maxemail: Unable to hook to EVENT_RELOAD");
+ throw ModuleException("ns_maxemail: Unable to hook to EVENT_RELOAD");
my_load_config();
const char *langtable_en_us[] = {
- /* LNG_NSEMAILMAX_REACHED */
- "The given email address has reached it's usage limit of %d users.",
- /* LNG_NSEMAILMAX_REACHED_ONE */
- "The given email address has reached it's usage limit of 1 user."
+ /* LNG_NSEMAILMAX_REACHED */
+ "The given email address has reached it's usage limit of %d users.",
+ /* LNG_NSEMAILMAX_REACHED_ONE */
+ "The given email address has reached it's usage limit of 1 user."
};
const char *langtable_nl[] = {
- /* LNG_NSEMAILMAX_REACHED */
- "Het gegeven email adres heeft de limiet van %d gebruikers bereikt.",
- /* LNG_NSEMAILMAX_REACHED_ONE */
- "Het gegeven email adres heeft de limiet van 1 gebruiker bereikt."
+ /* LNG_NSEMAILMAX_REACHED */
+ "Het gegeven email adres heeft de limiet van %d gebruikers bereikt.",
+ /* LNG_NSEMAILMAX_REACHED_ONE */
+ "Het gegeven email adres heeft de limiet van 1 gebruiker bereikt."
};
const char *langtable_de[] = {
- /* LNG_NSEMAILMAX_REACHED */
- "Die angegebene eMail hat die limit Begrenzung von %d User erreicht.",
- /* LNG_NSEMAILMAX_REACHED_ONE */
- "Die angegebene eMail hat die limit Begrenzung von 1 User erreicht."
+ /* LNG_NSEMAILMAX_REACHED */
+ "Die angegebene eMail hat die limit Begrenzung von %d User erreicht.",
+ /* LNG_NSEMAILMAX_REACHED_ONE */
+ "Die angegebene eMail hat die limit Begrenzung von 1 User erreicht."
};
const char *langtable_pt[] = {
- /* LNG_NSEMAILMAX_REACHED */
- "O endereзo de email fornecido alcanзou seu limite de uso de %d usuбrios.",
- /* LNG_NSEMAILMAX_REACHED_ONE */
- "O endereзo de email fornecido alcanзou seu limite de uso de 1 usuбrio."
+ /* LNG_NSEMAILMAX_REACHED */
+ "O endereзo de email fornecido alcanзou seu limite de uso de %d usuбrios.",
+ /* LNG_NSEMAILMAX_REACHED_ONE */
+ "O endereзo de email fornecido alcanзou seu limite de uso de 1 usuбrio."
};
const char *langtable_ru[] = {
- /* LNG_NSEMAILMAX_REACHED */
- "Указанный вами email-адрес используется максимально допустимое кол-во раз: %d",
- /* LNG_NSEMAILMAX_REACHED_ONE */
- "Указанный вами email-адрес уже кем-то используется."
+ /* LNG_NSEMAILMAX_REACHED */
+ "Указанный вами email-адрес используется максимально допустимое кол-во раз: %d",
+ /* LNG_NSEMAILMAX_REACHED_ONE */
+ "Указанный вами email-адрес уже кем-то используется."
};
const char *langtable_it[] = {
- /* LNG_NSEMAILMAX_REACHED */
- "L'indirizzo email specificato ha raggiunto il suo limite d'utilizzo di %d utenti.",
- /* LNG_NSEMAILMAX_REACHED_ONE */
- "L'indirizzo email specificato ha raggiunto il suo limite d'utilizzo di 1 utente."
+ /* LNG_NSEMAILMAX_REACHED */
+ "L'indirizzo email specificato ha raggiunto il suo limite d'utilizzo di %d utenti.",
+ /* LNG_NSEMAILMAX_REACHED_ONE */
+ "L'indirizzo email specificato ha raggiunto il suo limite d'utilizzo di 1 utente."
};
this->InsertLanguage(LANG_EN_US, LNG_NUM_STRINGS, langtable_en_us);
@@ -119,10 +156,12 @@ int count_email_in_use(char *email, User * u)
if (!email)
return 0;
- for (i = 0; i < 1024; i++) {
- for (nc = nclists[i]; nc; nc = nc->next) {
- if (!(u->na && u->na->nc && (u->na->nc == nc)) && nc->email && (stricmp(nc->email, email) == 0))
- count++;
+ for (i = 0; i < 1024; ++i)
+ {
+ for (nc = nclists[i]; nc; nc = nc->next)
+ {
+ if (!(u->na && u->na->nc && u->na->nc == nc) && nc->email && !stricmp(nc->email, email))
+ ++count;
}
}
@@ -131,7 +170,7 @@ int count_email_in_use(char *email, User * u)
int check_email_limit_reached(char *email, User * u)
{
- if ((NSEmailMax < 1) || !email || is_services_admin(u))
+ if (NSEmailMax < 1 || !email || is_services_admin(u))
return MOD_CONT;
if (count_email_in_use(email, u) < NSEmailMax)
@@ -140,61 +179,14 @@ int check_email_limit_reached(char *email, User * u)
if (NSEmailMax == 1)
me->NoticeLang(s_NickServ, u, LNG_NSEMAILMAX_REACHED_ONE);
else
- me->NoticeLang(s_NickServ, u, LNG_NSEMAILMAX_REACHED,
- NSEmailMax);
+ me->NoticeLang(s_NickServ, u, LNG_NSEMAILMAX_REACHED, NSEmailMax);
return MOD_STOP;
}
-int my_ns_register(User * u)
-{
- char *cur_buffer;
- char *email;
- int ret;
-
- cur_buffer = moduleGetLastBuffer();
- email = myStrGetToken(cur_buffer, ' ', 1);
- if (!email)
- return MOD_CONT;
-
- ret = check_email_limit_reached(email, u);
- delete [] email;
-
- return ret;
-}
-
-int my_ns_set(User * u)
-{
- char *cur_buffer;
- char *set;
- char *email;
- int ret;
-
- cur_buffer = moduleGetLastBuffer();
- set = myStrGetToken(cur_buffer, ' ', 0);
-
- if (!set)
- return MOD_CONT;
-
- if (stricmp(set, "email") != 0) {
- delete [] set;
- return MOD_CONT;
- }
-
- delete [] set;
- email = myStrGetToken(cur_buffer, ' ', 1);
- if (!email)
- return MOD_CONT;
-
- ret = check_email_limit_reached(email, u);
- delete [] email;
-
- return ret;
-}
-
int my_event_reload(int argc, char **argv)
{
- if ((argc > 0) && (stricmp(argv[0], EVENT_START) == 0))
+ if (argc > 0 && !stricmp(argv[0], EVENT_START))
my_load_config();
return MOD_CONT;
@@ -209,6 +201,4 @@ void my_load_config()
alog("debug: [ns_maxemail] NSEmailMax set to %d", NSEmailMax);
}
-
-
MODULE_INIT("ns_maxemail", NSMaxEmail)
diff --git a/src/modules/os_info.c b/src/modules/os_info.c
index 765935496..c7560318d 100644
--- a/src/modules/os_info.c
+++ b/src/modules/os_info.c
@@ -42,16 +42,8 @@
char *OSInfoDBName = NULL;
-int myAddNickInfo(User * u);
-int myAddChanInfo(User * u);
-int myNickInfo(User * u);
-int myChanInfo(User * u);
-
-int mNickHelp(User * u);
-int mChanHelp(User * u);
-void mMainChanHelp(User * u);
-void mMainNickHelp(User * u);
-void m_AddLanguages();
+void mMainChanHelp(User *u);
+void mMainNickHelp(User *u);
int mLoadData();
int mSaveData(int argc, char **argv);
@@ -63,12 +55,239 @@ static Module *me;
/*************************************************************************/
+class CommandNSOInfo : public Command
+{
+ private:
+ CommandResult DoAdd(User *u, std::vector<std::string> &params)
+ {
+ const char *nick = params[1].c_str();
+ const char *info = params.size() > 2 ? params[2].c_str() : NULL;
+ NickAlias *na = NULL;
+
+ if (!info)
+ {
+ this->OnSyntaxError(u);
+ return MOD_CONT;
+ }
+
+ if ((na = findnick(nick))) /* ok we've found the user */
+ {
+ /* Add the module data to the user */
+ na->nc->Extend("os_info", sstrdup(info));
+ me->NoticeLang(s_NickServ, u, OINFO_ADD_SUCCESS, nick);
+
+ }
+ else /* NickCore not found! */
+ notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
+
+ return MOD_CONT;
+ }
+
+ CommandResult DoDel(User *u, std::vector<std::string> &params)
+ {
+ const char *nick = params[1].c_str();
+ NickAlias *na = NULL;
+
+ if ((na = findnick(nick))) /* ok we've found the user */
+ {
+ char *c;
+ if (na->nc->GetExt("os_info", c))
+ {
+ delete [] c;
+ na->nc->Shrink("os_info");
+ }
+
+ me->NoticeLang(s_NickServ, u, OINFO_DEL_SUCCESS, nick);
+
+ }
+ else /* NickCore not found! */
+ notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
+
+ return MOD_CONT;
+ }
+ public:
+ CommandNSOInfo() : Command("OINFO", 2, 3)
+ {
+ }
+
+ CommandResult Execute(User *u, std::vector<std::string> &params)
+ {
+ const char *cmd = params[0].c_str();
+
+ if (!strcasecmp(cmd, "ADD"))
+ return this->DoAdd(u, params);
+ else if (!strcasecmp(cmd, "DEL"))
+ return this->DoDel(u, params);
+ else
+ this->OnSyntaxError(u);
+ return MOD_CONT;
+ }
+
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ if (!is_oper(u))
+ return false;
+
+ me->NoticeLang(s_NickServ, u, OINFO_HELP);
+ return true;
+ }
+
+ void OnSyntaxError(User *u)
+ {
+ me->NoticeLang(s_NickServ, u, OINFO_SYNTAX);
+ }
+};
+
+class CommandNSInfo : public Command
+{
+ public:
+ CommandNSInfo() : Command("INFO", 1, 1)
+ {
+ }
+
+ CommandResult Execute(User *u, std::vector<std::string> &params)
+ {
+ const char *nick = params[0].c_str();
+ NickAlias *na = NULL;
+
+ if (is_oper(u)) /* Only show our goodies to opers */
+ {
+ if ((na = findnick(nick))) /* ok we've found the user */
+ {
+ /* If we have any info on this user */
+ char *c;
+ if (na->nc->GetExt("os_info", c))
+ {
+ notice_user(s_NickServ, u, " OperInfo: %s", c);
+ }
+ }
+ }
+ return MOD_CONT;
+ }
+
+ void OnSyntaxError(User *u)
+ {
+ // no-op
+ }
+};
+
+class CommandCSOInfo : public Command
+{
+ private:
+ CommandResult DoAdd(User *u, std::vector<std::string> &params)
+ {
+ const char *chan = params[1].c_str();
+ const char *info = params.size() > 2 ? params[2].c_str() : NULL;
+ ChannelInfo *ci = NULL;
+
+ if (!info)
+ {
+ this->OnSyntaxError(u);
+ return MOD_CONT;
+ }
+
+ if ((ci = cs_findchan(chan)))
+ {
+ /* Add the module data to the channel */
+ ci->Extend("os_info", sstrdup(info));
+ me->NoticeLang(s_ChanServ, u, OCINFO_ADD_SUCCESS, chan);
+ }
+ else
+ notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
+
+ return MOD_CONT;
+ }
+
+ CommandResult DoDel(User *u, std::vector<std::string> &params)
+ {
+ const char *chan = params[1].c_str();
+ ChannelInfo *ci = NULL;
+
+ if ((ci = cs_findchan(chan)))
+ {
+ /* Del the module data from the channel */
+ char *c;
+ if (ci->GetExt("os_info", c))
+ {
+ delete [] c;
+ ci->Shrink("os_info");
+ }
+ me->NoticeLang(s_ChanServ, u, OCINFO_DEL_SUCCESS, chan);
+ }
+ else
+ notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
+
+ return MOD_CONT;
+ }
+ public:
+ CommandCSOInfo : Command("OINFO", 2, 3)
+ {
+ }
+
+ CommandResult Execute(User *u, std::vector<std::string> &params)
+ {
+ const char *cmd = params[0].c_str();
+
+ if (!strcasecmp(cmd, "ADD"))
+ return this->DoAdd(u, params);
+ else if (!strcasecmp(cmd, "DEL"))
+ return this->DoDel(u, params);
+ else
+ this->OnSyntaxError(u);
+ return MOD_CONT;
+ }
+
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ if (!is_oper(u))
+ return false;
+
+ me->NoticeLang(s_ChanServ, u, OCINFO_HELP);
+ return true;
+ }
+
+ void OnSyntaxError(User *u)
+ {
+ me->NoticeLang(s_ChanServ, u, OCINFO_SYNTAX);
+ }
+};
+
+class CommandCSInfo : public Command
+{
+ public:
+ CommandCSInfo() : Command("INFO", 1, 1)
+ {
+ }
+
+ CommandResult Execute(User *u, std::vector<std::string> &params)
+ {
+ char *chan = params[0].c_str();
+ ChannelInfo *ci = NULL;
+
+ if (is_oper(u)) /* Only show our goodies to opers */
+ {
+ if ((ci = cs_findchan(chan)))
+ {
+ /* If we have any info on this channel */
+ char *c;
+ if (ci->GetExt("os_info", c))
+ notice_user(s_ChanServ, u, " OperInfo: %s", c);
+ }
+ }
+ return MOD_CONT;
+ }
+
+ void OnSyntaxError(User *u)
+ {
+ // no-op
+ }
+};
+
class OSInfo : public Module
{
public:
OSInfo(const std::string &modname, const std::string &creator) : Module(modname, creator)
{
- Command *c;
EvtHook *hook = NULL;
int status;
@@ -82,19 +301,11 @@ class OSInfo : public Module
if (mLoadConfig())
throw ModuleException("Unable to load config");
- c = createCommand("oInfo", myAddNickInfo, is_oper, -1, -1, -1, -1, -1);
- moduleAddHelp(c, mNickHelp);
- status = this->AddCommand(NICKSERV, c, MOD_HEAD);
+ status = this->AddCommand(NICKSERV, new CommandNSOInfo(), MOD_HEAD);
+ status = this->AddCommand(NICKSERV, new CommandNSInfo(), MOD_TAIL);
- c = createCommand("Info", myNickInfo, NULL, -1, -1, -1, -1, -1);
- status = this->AddCommand(NICKSERV, c, MOD_TAIL);
-
- c = createCommand("oInfo", myAddChanInfo, is_oper, -1, -1, -1, -1, -1);
- moduleAddHelp(c, mChanHelp);
- status = this->AddCommand(CHANSERV, c, MOD_HEAD);
-
- c = createCommand("Info", myChanInfo, NULL, -1, -1, -1, -1, -1);
- status = this->AddCommand(CHANSERV, c, MOD_TAIL);
+ status = this->AddCommand(CHANSERV, new CommandCSOInfo(), MOD_HEAD);
+ status = this->AddCommand(CHANSERV, new CommandCSInfo(), MOD_TAIL);
hook = createEventHook(EVENT_DB_SAVING, mSaveData);
status = this->AddEventHook(hook);
@@ -111,208 +322,208 @@ class OSInfo : public Module
mLoadData();
const char* langtable_en_us[] = {
- /* OINFO_SYNTAX */
- "Syntax: OINFO [ADD|DEL] nick <info>",
- /* OINFO_ADD_SUCCESS */
- "OperInfo line has been added to nick %s",
- /* OINFO_DEL_SUCCESS */
- "OperInfo line has been removed from nick %s",
- /* OCINFO_SYNTAX */
- "Syntax: OINFO [ADD|DEL] chan <info>",
- /* OCINFO_ADD_SUCCESS */
- "OperInfo line has been added to channel %s",
- /* OCINFO_DEL_SUCCESS */
- "OperInfo line has been removed from channel %s",
- /* OINFO_HELP */
- "Syntax: OINFO [ADD|DEL] nick <info>\n"
- "Add or Delete Oper information for the given nick\n"
- "This will show up when any oper /ns info nick's the user.\n"
- "and can be used for 'tagging' users etc....",
- /* OCINFO_HELP */
- "Syntax: OINFO [ADD|DEL] chan <info>\n"
- "Add or Delete Oper information for the given channel\n"
- "This will show up when any oper /cs info's the channel.\n"
- "and can be used for 'tagging' channels etc....",
- /* OINFO_HELP_CMD */
- " OINFO Add / Del an OperInfo line to a nick",
- /* OCINFO_HELP_CMD */
- " OINFO Add / Del an OperInfo line to a channel"
+ /* OINFO_SYNTAX */
+ "Syntax: OINFO [ADD|DEL] nick <info>",
+ /* OINFO_ADD_SUCCESS */
+ "OperInfo line has been added to nick %s",
+ /* OINFO_DEL_SUCCESS */
+ "OperInfo line has been removed from nick %s",
+ /* OCINFO_SYNTAX */
+ "Syntax: OINFO [ADD|DEL] chan <info>",
+ /* OCINFO_ADD_SUCCESS */
+ "OperInfo line has been added to channel %s",
+ /* OCINFO_DEL_SUCCESS */
+ "OperInfo line has been removed from channel %s",
+ /* OINFO_HELP */
+ "Syntax: OINFO [ADD|DEL] nick <info>\n"
+ "Add or Delete Oper information for the given nick\n"
+ "This will show up when any oper /ns info nick's the user.\n"
+ "and can be used for 'tagging' users etc....",
+ /* OCINFO_HELP */
+ "Syntax: OINFO [ADD|DEL] chan <info>\n"
+ "Add or Delete Oper information for the given channel\n"
+ "This will show up when any oper /cs info's the channel.\n"
+ "and can be used for 'tagging' channels etc....",
+ /* OINFO_HELP_CMD */
+ " OINFO Add / Del an OperInfo line to a nick",
+ /* OCINFO_HELP_CMD */
+ " OINFO Add / Del an OperInfo line to a channel"
};
const char* langtable_es[] = {
- /* OINFO_SYNTAX */
- "Sintaxis: OINFO [ADD|DEL] nick <info>",
- /* OINFO_ADD_SUCCESS */
- "Una linea OperInfo ha sido agregada al nick %s",
- /* OINFO_DEL_SUCCESS */
- "La linea OperInfo ha sido removida del nick %s",
- /* OCINFO_SYNTAX */
- "Sintaxis: OINFO [ADD|DEL] chan <info>",
- /* OCINFO_ADD_SUCCESS */
- "Linea OperInfo ha sido agregada al canal %s",
- /* OCINFO_DEL_SUCCESS */
- "La linea OperInfo ha sido removida del canal %s",
- /* OINFO_HELP */
- "Sintaxis: OINFO [ADD|DEL] nick <info>\n"
- "Agrega o elimina informacion para Operadores al nick dado\n"
- "Esto se mostrara cuando cualquier operador haga /ns info nick\n"
- "y puede ser usado para 'marcado' de usuarios, etc....",
- /* OCINFO_HELP */
- "Sintaxis: OINFO [ADD|DEL] chan <info>\n"
- "Agrega o elimina informacion para Operadores al canal dado\n"
- "Esto se mostrara cuando cualquier operador haga /cs info canal\n"
- "y puede ser usado para 'marcado' de canales, etc....",
- /* OINFO_HELP_CMD */
- " OINFO Agrega / Elimina una linea OperInfo al nick",
- /* OCINFO_HELP_CMD */
- " OINFO Agrega / Elimina una linea OperInfo al canal"
+ /* OINFO_SYNTAX */
+ "Sintaxis: OINFO [ADD|DEL] nick <info>",
+ /* OINFO_ADD_SUCCESS */
+ "Una linea OperInfo ha sido agregada al nick %s",
+ /* OINFO_DEL_SUCCESS */
+ "La linea OperInfo ha sido removida del nick %s",
+ /* OCINFO_SYNTAX */
+ "Sintaxis: OINFO [ADD|DEL] chan <info>",
+ /* OCINFO_ADD_SUCCESS */
+ "Linea OperInfo ha sido agregada al canal %s",
+ /* OCINFO_DEL_SUCCESS */
+ "La linea OperInfo ha sido removida del canal %s",
+ /* OINFO_HELP */
+ "Sintaxis: OINFO [ADD|DEL] nick <info>\n"
+ "Agrega o elimina informacion para Operadores al nick dado\n"
+ "Esto se mostrara cuando cualquier operador haga /ns info nick\n"
+ "y puede ser usado para 'marcado' de usuarios, etc....",
+ /* OCINFO_HELP */
+ "Sintaxis: OINFO [ADD|DEL] chan <info>\n"
+ "Agrega o elimina informacion para Operadores al canal dado\n"
+ "Esto se mostrara cuando cualquier operador haga /cs info canal\n"
+ "y puede ser usado para 'marcado' de canales, etc....",
+ /* OINFO_HELP_CMD */
+ " OINFO Agrega / Elimina una linea OperInfo al nick",
+ /* OCINFO_HELP_CMD */
+ " OINFO Agrega / Elimina una linea OperInfo al canal"
};
const char* langtable_nl[] = {
- /* OINFO_SYNTAX */
- "Gebruik: OINFO [ADD|DEL] nick <info>",
- /* OINFO_ADD_SUCCESS */
- "OperInfo regel is toegevoegd aan nick %s",
- /* OINFO_DEL_SUCCESS */
- "OperInfo regel is weggehaald van nick %s",
- /* OCINFO_SYNTAX */
- "Gebruik: OINFO [ADD|DEL] kanaal <info>",
- /* OCINFO_ADD_SUCCESS */
- "OperInfo regel is toegevoegd aan kanaal %s",
- /* OCINFO_DEL_SUCCESS */
- "OperInfo regel is weggehaald van kanaal %s",
- /* OINFO_HELP */
- "Gebruik: OINFO [ADD|DEL] nick <info>\n"
- "Voeg een Oper informatie regel toe aan de gegeven nick, of\n"
- "verwijder deze. Deze regel zal worden weergegeven wanneer\n"
- "een oper /ns info nick doet voor deze gebruiker, en kan worden\n"
- "gebruikt om een gebruiker te 'markeren' etc...",
- /* OCINFO_HELP */
- "Gebruik: OINFO [ADD|DEL] kanaal <info>\n"
- "Voeg een Oper informatie regel toe aan de gegeven kanaal, of\n"
- "verwijder deze. Deze regel zal worden weergegeven wanneer\n"
- "een oper /cs info kanaal doet voor dit kanaal, en kan worden\n"
- "gebruikt om een kanaal te 'markeren' etc...",
- /* OINFO_HELP_CMD */
- " OINFO Voeg een OperInfo regel toe aan een nick of verwijder deze",
- /* OCINFO_HELP_CMD */
- " OINFO Voeg een OperInfo regel toe aan een kanaal of verwijder deze"
+ /* OINFO_SYNTAX */
+ "Gebruik: OINFO [ADD|DEL] nick <info>",
+ /* OINFO_ADD_SUCCESS */
+ "OperInfo regel is toegevoegd aan nick %s",
+ /* OINFO_DEL_SUCCESS */
+ "OperInfo regel is weggehaald van nick %s",
+ /* OCINFO_SYNTAX */
+ "Gebruik: OINFO [ADD|DEL] kanaal <info>",
+ /* OCINFO_ADD_SUCCESS */
+ "OperInfo regel is toegevoegd aan kanaal %s",
+ /* OCINFO_DEL_SUCCESS */
+ "OperInfo regel is weggehaald van kanaal %s",
+ /* OINFO_HELP */
+ "Gebruik: OINFO [ADD|DEL] nick <info>\n"
+ "Voeg een Oper informatie regel toe aan de gegeven nick, of\n"
+ "verwijder deze. Deze regel zal worden weergegeven wanneer\n"
+ "een oper /ns info nick doet voor deze gebruiker, en kan worden\n"
+ "gebruikt om een gebruiker te 'markeren' etc...",
+ /* OCINFO_HELP */
+ "Gebruik: OINFO [ADD|DEL] kanaal <info>\n"
+ "Voeg een Oper informatie regel toe aan de gegeven kanaal, of\n"
+ "verwijder deze. Deze regel zal worden weergegeven wanneer\n"
+ "een oper /cs info kanaal doet voor dit kanaal, en kan worden\n"
+ "gebruikt om een kanaal te 'markeren' etc...",
+ /* OINFO_HELP_CMD */
+ " OINFO Voeg een OperInfo regel toe aan een nick of verwijder deze",
+ /* OCINFO_HELP_CMD */
+ " OINFO Voeg een OperInfo regel toe aan een kanaal of verwijder deze"
};
const char* langtable_de[] = {
- /* OINFO_SYNTAX */
- "Syntax: OINFO [ADD|DEL] Nickname <Information>",
- /* OINFO_ADD_SUCCESS */
- "Eine OperInfo Linie wurde zu den Nicknamen %s hinzugefьgt",
- /* OINFO_DEL_SUCCESS */
- "Die OperInfo Linie wurde von den Nicknamen %s enfernt",
- /* OCINFO_SYNTAX */
- "Syntax: OINFO [ADD|DEL] Channel <Information>",
- /* OCINFO_ADD_SUCCESS */
- "Eine OperInfo Linie wurde zu den Channel %s hinzugefьgt",
- /* OCINFO_DEL_SUCCESS */
- "Die OperInfo Linie wurde von den Channel %s enfernt",
- /* OINFO_HELP */
- "Syntax: OINFO [ADD|DEL] Nickname <Information>\n"
- "Addiert oder lцscht eine OperInfo Linie zu den angegebenen\n"
- "Nicknamen.Sie wird angezeigt wenn ein Oper mit /ns info sich\n"
- "ьber den Nicknamen informiert.",
- /* OCINFO_HELP */
- "Syntax: OINFO [ADD|DEL] chan <info>\n"
- "Addiert oder lцscht eine OperInfo Linie zu den angegebenen\n"
- "Channel.Sie wird angezeigt wenn ein Oper mit /cs info sich\n"
- "ьber den Channel informiert.",
- /* OINFO_HELP_CMD */
- " OINFO Addiert / Lцscht eine OperInfo Linie zu / von einen Nicknamen",
- /* OCINFO_HELP_CMD */
- " OINFO Addiert / Lцscht eine OperInfo Linie zu / von einen Channel"
+ /* OINFO_SYNTAX */
+ "Syntax: OINFO [ADD|DEL] Nickname <Information>",
+ /* OINFO_ADD_SUCCESS */
+ "Eine OperInfo Linie wurde zu den Nicknamen %s hinzugefьgt",
+ /* OINFO_DEL_SUCCESS */
+ "Die OperInfo Linie wurde von den Nicknamen %s enfernt",
+ /* OCINFO_SYNTAX */
+ "Syntax: OINFO [ADD|DEL] Channel <Information>",
+ /* OCINFO_ADD_SUCCESS */
+ "Eine OperInfo Linie wurde zu den Channel %s hinzugefьgt",
+ /* OCINFO_DEL_SUCCESS */
+ "Die OperInfo Linie wurde von den Channel %s enfernt",
+ /* OINFO_HELP */
+ "Syntax: OINFO [ADD|DEL] Nickname <Information>\n"
+ "Addiert oder lцscht eine OperInfo Linie zu den angegebenen\n"
+ "Nicknamen.Sie wird angezeigt wenn ein Oper mit /ns info sich\n"
+ "ьber den Nicknamen informiert.",
+ /* OCINFO_HELP */
+ "Syntax: OINFO [ADD|DEL] chan <info>\n"
+ "Addiert oder lцscht eine OperInfo Linie zu den angegebenen\n"
+ "Channel.Sie wird angezeigt wenn ein Oper mit /cs info sich\n"
+ "ьber den Channel informiert.",
+ /* OINFO_HELP_CMD */
+ " OINFO Addiert / Lцscht eine OperInfo Linie zu / von einen Nicknamen",
+ /* OCINFO_HELP_CMD */
+ " OINFO Addiert / Lцscht eine OperInfo Linie zu / von einen Channel"
};
const char* langtable_pt[] = {
- /* OINFO_SYNTAX */
- "Sintaxe: OINFO [ADD|DEL] nick <informaзгo>",
- /* OINFO_ADD_SUCCESS */
- "A linha OperInfo foi adicionada ao nick %s",
- /* OINFO_DEL_SUCCESS */
- "A linha OperInfo foi removida do nick %s",
- /* OCINFO_SYNTAX */
- "Sintaxe: OINFO [ADD|DEL] canal <informaзгo>",
- /* OCINFO_ADD_SUCCESS */
- "A linha OperInfo foi adicionada ao canal %s",
- /* OCINFO_DEL_SUCCESS */
- "A linha OperInfo foi removida do canal %s",
- /* OINFO_HELP */
- "Sintaxe: OINFO [ADD|DEL] nick <informaзгo>\n"
- "Adiciona ou apaga informaзгo para Operadores ao nick fornecido\n"
- "Isto serб mostrado quando qualquer Operador usar /ns info nick\n"
- "e pode ser usado para 'etiquetar' usuбrios etc...",
- /* OCINFO_HELP */
- "Sintaxe: OINFO [ADD|DEL] canal <informaзгo>\n"
- "Adiciona ou apaga informaзгo para Operadores ao canal fornecido\n"
- "Isto serб mostrado quando qualquer Operador usar /cs info canal\n"
- "e pode ser usado para 'etiquetar' canais etc...",
- /* OINFO_HELP_CMD */
- " OINFO Adiciona ou Apaga a linha OperInfo para um nick",
- /* OCINFO_HELP_CMD */
- " OINFO Adiciona ou Apaga a linha OperInfo para um canal"
+ /* OINFO_SYNTAX */
+ "Sintaxe: OINFO [ADD|DEL] nick <informaзгo>",
+ /* OINFO_ADD_SUCCESS */
+ "A linha OperInfo foi adicionada ao nick %s",
+ /* OINFO_DEL_SUCCESS */
+ "A linha OperInfo foi removida do nick %s",
+ /* OCINFO_SYNTAX */
+ "Sintaxe: OINFO [ADD|DEL] canal <informaзгo>",
+ /* OCINFO_ADD_SUCCESS */
+ "A linha OperInfo foi adicionada ao canal %s",
+ /* OCINFO_DEL_SUCCESS */
+ "A linha OperInfo foi removida do canal %s",
+ /* OINFO_HELP */
+ "Sintaxe: OINFO [ADD|DEL] nick <informaзгo>\n"
+ "Adiciona ou apaga informaзгo para Operadores ao nick fornecido\n"
+ "Isto serб mostrado quando qualquer Operador usar /ns info nick\n"
+ "e pode ser usado para 'etiquetar' usuбrios etc...",
+ /* OCINFO_HELP */
+ "Sintaxe: OINFO [ADD|DEL] canal <informaзгo>\n"
+ "Adiciona ou apaga informaзгo para Operadores ao canal fornecido\n"
+ "Isto serб mostrado quando qualquer Operador usar /cs info canal\n"
+ "e pode ser usado para 'etiquetar' canais etc...",
+ /* OINFO_HELP_CMD */
+ " OINFO Adiciona ou Apaga a linha OperInfo para um nick",
+ /* OCINFO_HELP_CMD */
+ " OINFO Adiciona ou Apaga a linha OperInfo para um canal"
};
const char* langtable_ru[] = {
- /* OINFO_SYNTAX */
- "Синтаксис: OINFO ADD|DEL ник тест",
- /* OINFO_ADD_SUCCESS */
- "Опер-Информация для ника %s добавлена",
- /* OINFO_DEL_SUCCESS */
- "Опер-Информация для ника %s была удалена",
- /* OCINFO_SYNTAX */
- "Синтаксис: OINFO ADD|DEL #канал текст",
- /* OCINFO_ADD_SUCCESS */
- "Опер-Информация для канала %s успешно установлена",
- /* OCINFO_DEL_SUCCESS */
- "Опер-Информация для канала %s была удалена",
- /* OINFO_HELP */
- "Синтаксис: OINFO ADD|DEL ник текст\n"
- "Устанавливает или удаляет Опер-Информацию для указанного ника,\n"
- "которая будет показана любому оператору, запрашивающему INFO ника.\n"
- "Может быть использована для 'пометки' пользователей и т. д...",
- /* OCINFO_HELP */
- "Синтаксис: OINFO ADD|DEL #канал текст\n"
- "Устанавливает или удаляет Опер-Информацию для указанного канала,\n"
- "которая будет показана любому оператору, запрашивающему INFO канала.\n"
- "Может быть использована для 'пометки' каналов и т. д...",
- /* OINFO_HELP_CMD */
- " OINFO Добавляет/Удаляет опер-инфо для ника",
- /* OCINFO_HELP_CMD */
- " OINFO Добавляет/Удаляет опер-инфо для канала"
+ /* OINFO_SYNTAX */
+ "Синтаксис: OINFO ADD|DEL ник тест",
+ /* OINFO_ADD_SUCCESS */
+ "Опер-Информация для ника %s добавлена",
+ /* OINFO_DEL_SUCCESS */
+ "Опер-Информация для ника %s была удалена",
+ /* OCINFO_SYNTAX */
+ "Синтаксис: OINFO ADD|DEL #канал текст",
+ /* OCINFO_ADD_SUCCESS */
+ "Опер-Информация для канала %s успешно установлена",
+ /* OCINFO_DEL_SUCCESS */
+ "Опер-Информация для канала %s была удалена",
+ /* OINFO_HELP */
+ "Синтаксис: OINFO ADD|DEL ник текст\n"
+ "Устанавливает или удаляет Опер-Информацию для указанного ника,\n"
+ "которая будет показана любому оператору, запрашивающему INFO ника.\n"
+ "Может быть использована для 'пометки' пользователей и т. д...",
+ /* OCINFO_HELP */
+ "Синтаксис: OINFO ADD|DEL #канал текст\n"
+ "Устанавливает или удаляет Опер-Информацию для указанного канала,\n"
+ "которая будет показана любому оператору, запрашивающему INFO канала.\n"
+ "Может быть использована для 'пометки' каналов и т. д...",
+ /* OINFO_HELP_CMD */
+ " OINFO Добавляет/Удаляет опер-инфо для ника",
+ /* OCINFO_HELP_CMD */
+ " OINFO Добавляет/Удаляет опер-инфо для канала"
};
const char* langtable_it[] = {
- /* OINFO_SYNTAX */
- "Sintassi: OINFO [ADD|DEL] nick <info>",
- /* OINFO_ADD_SUCCESS */
- "Linea OperInfo aggiunta al nick %s",
- /* OINFO_DEL_SUCCESS */
- "Linea OperInfo rimossa dal nick %s",
- /* OCINFO_SYNTAX */
- "Sintassi: OINFO [ADD|DEL] chan <info>",
- /* OCINFO_ADD_SUCCESS */
- "Linea OperInfo aggiunta al canale %s",
- /* OCINFO_DEL_SUCCESS */
- "Linea OperInfo rimossa dal canale %s",
- /* OINFO_HELP */
- "Sintassi: OINFO [ADD|DEL] nick <info>\n"
- "Aggiunge o rimuove informazioni Oper per il nick specificato\n"
- "Queste vengono mostrate quando un oper esegue il comando /ns info <nick>\n"
- "e possono essere utilizzate per 'marchiare' gli utenti ecc...",
- /* OCINFO_HELP */
- "Sintassi: OINFO [ADD|DEL] chan <info>\n"
- "Aggiunge o rimuove informazioni Oper per il canale specificato\n"
- "Queste vengono mostrate quando un oper esegue il comando /cs info <canale>\n"
- "e possono essere utilizzate per 'marchiare' i canali ecc...",
- /* OINFO_HELP_CMD */
- " OINFO Aggiunge/Rimuove una linea OperInfo ad/da un nick",
- /* OCINFO_HELP_CMD */
- " OINFO Aggiunge/Rimuove una linea OperInfo ad/da un canale"
+ /* OINFO_SYNTAX */
+ "Sintassi: OINFO [ADD|DEL] nick <info>",
+ /* OINFO_ADD_SUCCESS */
+ "Linea OperInfo aggiunta al nick %s",
+ /* OINFO_DEL_SUCCESS */
+ "Linea OperInfo rimossa dal nick %s",
+ /* OCINFO_SYNTAX */
+ "Sintassi: OINFO [ADD|DEL] chan <info>",
+ /* OCINFO_ADD_SUCCESS */
+ "Linea OperInfo aggiunta al canale %s",
+ /* OCINFO_DEL_SUCCESS */
+ "Linea OperInfo rimossa dal canale %s",
+ /* OINFO_HELP */
+ "Sintassi: OINFO [ADD|DEL] nick <info>\n"
+ "Aggiunge o rimuove informazioni Oper per il nick specificato\n"
+ "Queste vengono mostrate quando un oper esegue il comando /ns info <nick>\n"
+ "e possono essere utilizzate per 'marchiare' gli utenti ecc...",
+ /* OCINFO_HELP */
+ "Sintassi: OINFO [ADD|DEL] chan <info>\n"
+ "Aggiunge o rimuove informazioni Oper per il canale specificato\n"
+ "Queste vengono mostrate quando un oper esegue il comando /cs info <canale>\n"
+ "e possono essere utilizzate per 'marchiare' i canali ecc...",
+ /* OINFO_HELP_CMD */
+ " OINFO Aggiunge/Rimuove una linea OperInfo ad/da un nick",
+ /* OCINFO_HELP_CMD */
+ " OINFO Aggiunge/Rimuove una linea OperInfo ad/da un canale"
};
this->InsertLanguage(LANG_EN_US, LANG_NUM_STRINGS, langtable_en_us);
@@ -328,7 +539,7 @@ class OSInfo : public Module
{
char *av[1];
- for (int i = 0; i < 1024; i++)
+ for (int i = 0; i < 1024; ++i)
{
/* Remove the nick Cores */
for (NickCore *nc = nclists[i]; nc; nc = nc->next)
@@ -350,226 +561,6 @@ class OSInfo : public Module
}
};
-
-
-
-/*************************************************************************/
-
-/**
- * Provide the user interface to add/remove/update oper information
- * about a nick.
- * We are going to assume that anyone who gets this far is an oper;
- * the createCommand should have handled this checking for us and its
- * tedious / a waste to do it twice.
- * @param u The user who executed this command
- * @return MOD_CONT if we want to process other commands in this command
- * stack, MOD_STOP if we dont
- **/
-int myAddNickInfo(User * u)
-{
- char *text = NULL;
- char *cmd = NULL;
- char *nick = NULL;
- char *info = NULL;
- NickAlias *na = NULL;
-
- /* Get the last buffer anope recived */
- text = moduleGetLastBuffer();
- if (text) {
- cmd = myStrGetToken(text, ' ', 0);
- nick = myStrGetToken(text, ' ', 1);
- info = myStrGetTokenRemainder(text, ' ', 2);
- if (cmd && nick) {
- if (strcasecmp(cmd, "ADD") == 0) {
- /* Syntax error, again! */
- if (info) {
- /* ok we've found the user */
- if ((na = findnick(nick))) {
- /* Add the module data to the user */
- na->nc->Extend("os_info", sstrdup(info));
- me->NoticeLang(s_NickServ, u, OINFO_ADD_SUCCESS, nick);
- /* NickCore not found! */
- } else {
- notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED,
- nick);
- }
- delete [] info;
- }
- } else if (strcasecmp(cmd, "DEL") == 0) {
- /* ok we've found the user */
- if ((na = findnick(nick)))
- {
- char *c;
- if (na->nc->GetExt("os_info", c))
- {
- delete [] c;
- na->nc->Shrink("os_info");
- }
-
- me->NoticeLang(s_NickServ, u, OINFO_DEL_SUCCESS, nick);
- /* NickCore not found! */
- } else {
- notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED,
- nick);
- }
- /* another syntax error! */
- } else {
- me->NoticeLang(s_NickServ, u, OINFO_SYNTAX);
- }
- delete [] cmd;
- delete [] nick;
- /* Syntax error */
- } else if (cmd) {
- me->NoticeLang(s_NickServ, u, OINFO_SYNTAX);
- delete [] cmd;
- /* Syntax error */
- } else {
- me->NoticeLang(s_NickServ, u, OINFO_SYNTAX);
- }
- }
- return MOD_CONT;
-}
-
-/**
- * Provide the user interface to add/remove/update oper information
- * about a channel.
- * We are going to assume that anyone who gets this far is an oper;
- * the createCommand should have handled this checking for us and
- * its tedious / a waste to do it twice.
- * @param u The user who executed this command
- * @return MOD_CONT if we want to process other commands in this command
- * stack, MOD_STOP if we dont
- **/
-int myAddChanInfo(User * u)
-{
- char *text = NULL;
- char *cmd = NULL;
- char *chan = NULL;
- char *info = NULL;
- ChannelInfo *ci = NULL;
-
- /* Get the last buffer anope recived */
- text = moduleGetLastBuffer();
- if (text) {
- cmd = myStrGetToken(text, ' ', 0);
- chan = myStrGetToken(text, ' ', 1);
- info = myStrGetTokenRemainder(text, ' ', 2);
- if (cmd && chan) {
- if (strcasecmp(cmd, "ADD") == 0) {
- if (info) {
- if ((ci = cs_findchan(chan))) {
- /* Add the module data to the channel */
- ci->Extend("os_info", sstrdup(info));
- me->NoticeLang(s_ChanServ, u, OCINFO_ADD_SUCCESS, chan);
- /* ChanInfo */
- } else {
- notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED,
- chan);
- }
- delete [] info;
- }
- } else if (strcasecmp(cmd, "DEL") == 0) {
- if ((ci = cs_findchan(chan))) {
- /* Del the module data from the channel */
- char *c;
- if (ci->GetExt("os_info", c))
- {
- delete [] c;
- ci->Shrink("os_info");
- }
- me->NoticeLang(s_ChanServ, u, OCINFO_DEL_SUCCESS, chan);
- /* ChanInfo */
- } else {
- notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED,
- chan);
- }
- /* another syntax error! */
- } else {
- me->NoticeLang(s_ChanServ, u, OCINFO_SYNTAX);
- }
- delete [] cmd;
- delete [] chan;
- /* Syntax error */
- } else if (cmd) {
- me->NoticeLang(s_ChanServ, u, OCINFO_SYNTAX);
- delete [] cmd;
- /* Syntax error */
- } else {
- me->NoticeLang(s_ChanServ, u, OCINFO_SYNTAX);
- }
- }
- return MOD_CONT;
-}
-
-/*************************************************************************/
-
-/**
- * Called after a user does a /msg nickserv info [nick]
- * @param u The user who requested info
- * @return MOD_CONT to continue processing commands or MOD_STOP to stop
- **/
-int myNickInfo(User * u)
-{
- char *text = NULL;
- char *nick = NULL;
- NickAlias *na = NULL;
-
- /* Only show our goodies to opers */
- if (is_oper(u)) {
- /* Get the last buffer anope recived */
- text = moduleGetLastBuffer();
- if (text) {
- nick = myStrGetToken(text, ' ', 0);
- if (nick) {
- /* ok we've found the user */
- if ((na = findnick(nick))) {
- /* If we have any info on this user */
- char *c;
- if (na->nc->GetExt("os_info", c))
- {
- notice_user(s_NickServ, u, " OperInfo: %s", c);
- }
- }
- delete [] nick;
- }
- }
- }
- return MOD_CONT;
-}
-
-/**
- * Called after a user does a /msg chanserv info chan
- * @param u The user who requested info
- * @return MOD_CONT to continue processing commands or MOD_STOP to stop
- **/
-int myChanInfo(User * u)
-{
- char *text = NULL;
- char *chan = NULL;
- ChannelInfo *ci = NULL;
-
- /* Only show our goodies to opers */
- if (is_oper(u)) {
- /* Get the last buffer anope recived */
- text = moduleGetLastBuffer();
- if (text) {
- chan = myStrGetToken(text, ' ', 0);
- if (chan) {
- if ((ci = cs_findchan(chan))) {
- /* If we have any info on this channel */
- char *c;
- if (ci->GetExt("os_info", c))
- {
- notice_user(s_ChanServ, u, " OperInfo: %s", c);
- }
- }
- delete [] chan;
- }
- }
- }
- return MOD_CONT;
-}
-
/*************************************************************************/
/**
@@ -591,30 +582,36 @@ int mLoadData()
/* will _never_ be this big thanks to the 512 limit of a message */
char buffer[2000];
- if ((in = fopen(OSInfoDBName, "r")) == NULL) {
+ if (!(in = fopen(OSInfoDBName, "r")))
+ {
alog("os_info: WARNING: can not open the database file! (it might not exist, this is not fatal)");
ret = 1;
- } else {
- while (fgets(buffer, 1500, in)) {
+ }
+ else
+ {
+ while (fgets(buffer, 1500, in))
+ {
type = myStrGetToken(buffer, ' ', 0);
name = myStrGetToken(buffer, ' ', 1);
info = myStrGetTokenRemainder(buffer, ' ', 2);
- if (type) {
- if (name) {
- if (info) {
+ if (type)
+ {
+ if (name)
+ {
+ if (info)
+ {
len = strlen(info);
/* Take the \n from the end of the line */
info[len - 1] = '\0';
- if (stricmp(type, "C") == 0) {
+ if (!stricmp(type, "C"))
+ {
if ((ci = cs_findchan(name)))
- {
ci->Extend("os_info", strdup("info"));
- }
- } else if (stricmp(type, "N") == 0) {
+ }
+ else if (!stricmp(type, "N"))
+ {
if ((na = findnick(name)))
- {
na->nc->Extend("os_info", strdup(info));
- }
}
delete [] info;
}
@@ -642,41 +639,44 @@ int mSaveData(int argc, char **argv)
int ret = 0;
FILE *out;
- if (argc >= 1) {
- if (!stricmp(argv[0], EVENT_START)) {
- if ((out = fopen(OSInfoDBName, "w")) == NULL) {
+ if (argc >= 1)
+ {
+ if (!stricmp(argv[0], EVENT_START))
+ {
+ if (!(out = fopen(OSInfoDBName, "w")))
+ {
alog("os_info: ERROR: can not open the database file!");
- ircdproto->SendGlobops(s_OperServ,
- "os_info: ERROR: can not open the database file!");
+ ircdproto->SendGlobops(s_OperServ, "os_info: ERROR: can not open the database file!");
ret = 1;
- } else {
- for (i = 0; i < 1024; i++) {
- for (nc = nclists[i]; nc; nc = nc->next) {
+ }
+ else
+ {
+ for (i = 0; i < 1024; ++i)
+ {
+ for (nc = nclists[i]; nc; nc = nc->next)
+ {
/* If we have any info on this user */
char *c;
if (nc->GetExt("os_info", c))
- {
fprintf(out, "N %s %s\n", nc->display, c);
- }
}
}
-
- for (i = 0; i < 256; i++) {
- for (ci = chanlists[i]; ci; ci = ci->next) {
+ for (i = 0; i < 256; ++i)
+ {
+ for (ci = chanlists[i]; ci; ci = ci->next)
+ {
/* If we have any info on this channel */
char *c;
if (ci->GetExt("os_info", c))
- {
fprintf(out, "C %s %s\n", ci->name, c);
- }
}
}
fclose(out);
}
- } else {
- ret = 0;
}
+ else
+ ret = 0;
}
return ret;
@@ -719,12 +719,12 @@ int mLoadConfig()
int mEventReload(int argc, char **argv)
{
int ret = 0;
- if (argc >= 1) {
- if (!stricmp(argv[0], EVENT_START)) {
+ if (argc >= 1)
+ {
+ if (!stricmp(argv[0], EVENT_START))
+ {
alog("os_info: Reloading configuration directives...");
ret = mLoadConfig();
- } else {
- /* Nothing for now */
}
}
@@ -736,43 +736,20 @@ int mEventReload(int argc, char **argv)
/*************************************************************************/
-int mNickHelp(User * u)
-{
- if (is_oper(u)) {
- me->NoticeLang(s_NickServ, u, OINFO_HELP);
- } else {
- notice_lang(s_NickServ, u, NO_HELP_AVAILABLE, "OINFO");
- }
- return MOD_CONT;
-}
-
-int mChanHelp(User * u)
-{
- if (is_oper(u)) {
- me->NoticeLang(s_ChanServ, u, OCINFO_HELP);
- } else {
- notice_lang(s_ChanServ, u, NO_HELP_AVAILABLE, "OINFO");
- }
- return MOD_CONT;
-}
-
/* This help will be added to the main NickServ list */
-void mMainNickHelp(User * u)
+void mMainNickHelp(User *u)
{
- if (is_oper(u)) {
+ if (is_oper(u))
me->NoticeLang(s_NickServ, u, OINFO_HELP_CMD);
- }
}
-/* This help will be added to the main NickServ list */
-void mMainChanHelp(User * u)
+/* This help will be added to the main ChanServ list */
+void mMainChanHelp(User *u)
{
- if (is_oper(u)) {
+ if (is_oper(u))
me->NoticeLang(s_ChanServ, u, OCINFO_HELP_CMD);
- }
}
/*************************************************************************/
-
MODULE_INIT("os_info", OSInfo)