summaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/cs_set_misc.cpp196
-rw-r--r--src/modules/os_info.cpp515
2 files changed, 196 insertions, 515 deletions
diff --git a/src/modules/cs_set_misc.cpp b/src/modules/cs_set_misc.cpp
new file mode 100644
index 000000000..5f690a0ac
--- /dev/null
+++ b/src/modules/cs_set_misc.cpp
@@ -0,0 +1,196 @@
+/* ChanServ core functions
+ *
+ * (C) 2003-2010 Anope Team
+ * Contact us at team@anope.org
+ *
+ * Please read COPYING and README for further details.
+ *
+ * Based on the original code of Epona by Lara.
+ * Based on the original code of Services by Andy Church.
+ */
+
+/*************************************************************************/
+
+#include "module.h"
+
+class CommandCSSetMisc : public Command
+{
+ std::string Desc;
+ public:
+ CommandCSSetMisc(const ci::string &cname, const std::string &desc, const ci::string &cpermission = "") : Command(cname, 1, 2, cpermission), Desc(desc)
+ {
+ }
+
+ CommandReturn Execute(User *u, const std::vector<ci::string> &params)
+ {
+ ChannelInfo *ci = cs_findchan(params[0]);
+ assert(ci);
+
+ ci->Shrink("chanserv:" + std::string(this->name.c_str()));
+ if (params.size() > 1)
+ {
+ ci->Extend("chanserv:" + std::string(this->name.c_str()), new ExtensibleItemRegular<ci::string>(params[1]));
+ notice_lang(Config.s_ChanServ, u, CHAN_SETTING_CHANGED, this->name.c_str(), ci->name.c_str(), params[1].c_str());
+ }
+ else
+ {
+ notice_lang(Config.s_ChanServ, u, CHAN_SETTING_UNSET, this->name.c_str(), ci->name.c_str());
+ }
+
+ return MOD_CONT;
+ }
+
+ void OnSyntaxError(User *u, const ci::string &)
+ {
+ syntax_error(Config.s_ChanServ, u, "SET", CHAN_SET_SYNTAX);
+ }
+
+ void OnServHelp(User *u)
+ {
+ u->SendMessage(Config.s_ChanServ, " %-10s %s", this->name.c_str(), this->Desc.c_str());
+ }
+};
+
+class CommandCSSASetMisc : public CommandCSSetMisc
+{
+ public:
+ CommandCSSASetMisc(const ci::string &cname, const std::string &desc) : CommandCSSetMisc(cname, desc, "chanserv/saset/" + cname)
+ {
+ }
+
+ void OnSyntaxError(User *u, const ci::string &)
+ {
+ syntax_error(Config.s_ChanServ, u, "SASET", CHAN_SASET_SYNTAX);
+ }
+};
+
+class CSSetMisc : public Module
+{
+ struct CommandInfo
+ {
+ std::string Name;
+ std::string Desc;
+ bool ShowHidden;
+
+ CommandInfo(const std::string &name, const std::string &desc, bool showhidden) : Name(name), Desc(desc), ShowHidden(showhidden) { }
+ };
+
+ std::map<std::string, CommandInfo *> Commands;
+
+ void RemoveAll()
+ {
+ if (Commands.empty())
+ return;
+
+ Command *set = FindCommand(ChanServ, "SET");
+ Command *saset = FindCommand(ChanServ, "SASET");
+
+ if (!set && !saset)
+ return;
+
+ for (std::map<std::string, CommandInfo *>::const_iterator it = this->Commands.begin(), it_end = this->Commands.end(); it != it_end; ++it)
+ {
+ if (set)
+ set->DelSubcommand(it->first.c_str());
+ if (saset)
+ saset->DelSubcommand(it->first.c_str());
+ delete it->second;
+ }
+
+ this->Commands.clear();
+ }
+
+ public:
+ CSSetMisc(const std::string &modname, const std::string &creator) : Module(modname, creator)
+ {
+ this->SetAuthor("Anope");
+ this->SetType(CORE);
+
+ Implementation i[] = { I_OnReload, I_OnChanInfo, I_OnDatabaseWriteMetadata, I_OnDatabaseReadMetadata };
+ ModuleManager::Attach(i, this, 4);
+
+ OnReload(true);
+ }
+
+ ~CSSetMisc()
+ {
+ RemoveAll();
+ }
+
+ void OnReload(bool)
+ {
+ RemoveAll();
+
+ Command *set = FindCommand(ChanServ, "SET");
+ Command *saset = FindCommand(ChanServ, "SASET");
+ if (!set && saset)
+ return;
+
+ ConfigReader config;
+
+ for (int i = 0; true; ++i)
+ {
+ std::string cname = config.ReadValue("cs_set_misc", "name", "", i);
+ if (cname.empty())
+ break;
+ std::string desc = config.ReadValue("cs_set_misc", "desc", "", i);
+ bool showhidden = config.ReadFlag("cs_set_misc", "operonly", "no", i);
+
+ CommandInfo *info = new CommandInfo(cname, desc, showhidden);
+ if (!this->Commands.insert(std::make_pair(cname, info)).second)
+ {
+ Alog() << "cs_set_misc: Warning, unable to add duplicate entry " << cname;
+ delete info;
+ continue;
+ }
+
+ if (set)
+ set->AddSubcommand(new CommandCSSetMisc(cname.c_str(), desc));
+ if (saset)
+ saset->AddSubcommand(new CommandCSSASetMisc(cname.c_str(), desc));
+ }
+ }
+
+ void OnChanInfo(User *u, ChannelInfo *ci, bool ShowHidden)
+ {
+ for (std::map<std::string, CommandInfo *>::const_iterator it = this->Commands.begin(), it_end = this->Commands.end(); it != it_end; ++it)
+ {
+ if (!ShowHidden && it->second->ShowHidden)
+ continue;
+
+ ci::string value;
+ if (ci->GetExtRegular("chanserv:" + it->first, value))
+ {
+ u->SendMessage(Config.s_ChanServ, " %s: %s", it->first.c_str(), value.c_str());
+ }
+ }
+ }
+
+ void OnDatabaseWriteMetadata(void (*WriteMetadata)(const std::string &, const std::string &), ChannelInfo *ci)
+ {
+ for (std::map<std::string, CommandInfo *>::const_iterator it = this->Commands.begin(), it_end = this->Commands.end(); it != it_end; ++it)
+ {
+ ci::string value;
+
+ if (ci->GetExtRegular("chanserv:" + it->first, value))
+ {
+ WriteMetadata(it->first, value.c_str());
+ }
+ }
+ }
+
+ EventReturn OnDatabaseReadMetadata(ChannelInfo *ci, const std::string &key, const std::vector<std::string> &params)
+ {
+ for (std::map<std::string, CommandInfo *>::const_iterator it = this->Commands.begin(), it_end = this->Commands.end(); it != it_end; ++it)
+ {
+ if (key == it->first)
+ {
+ ci->Extend("chanserv:" + it->first, new ExtensibleItemRegular<ci::string>(params[0].c_str()));
+ }
+ }
+
+ return EVENT_CONTINUE;
+ }
+};
+
+MODULE_INIT(CSSetMisc)
diff --git a/src/modules/os_info.cpp b/src/modules/os_info.cpp
deleted file mode 100644
index c9e98ecbc..000000000
--- a/src/modules/os_info.cpp
+++ /dev/null
@@ -1,515 +0,0 @@
-/* os_info.c - Adds oper information lines to nicks/channels
- *
- * (C) 2003-2010 Anope Team
- * Contact us at team@anope.org
- *
- * Based on the original module by Rob <rob@anope.org>
- * Included in the Anope module pack since Anope 1.7.9
- * Anope Coder: DrStein <drstein@anope.org>
- *
- * Please read COPYING and README for further details.
- *
- * Send bug reports to the Anope Coder instead of the module
- * author, because any changes since the inclusion into anope
- * are not supported by the original author.
- */
-/*************************************************************************/
-
-#include "module.h"
-
-#define AUTHOR "Rob"
-
-/* Multi-language stuff */
-enum
-{
- OINFO_SYNTAX,
- OINFO_ADD_SUCCESS,
- OINFO_DEL_SUCCESS,
- OCINFO_SYNTAX,
- OCINFO_ADD_SUCCESS,
- OCINFO_DEL_SUCCESS,
- OINFO_HELP,
- OCINFO_HELP,
- OINFO_HELP_CMD,
- OCINFO_HELP_CMD,
- LANG_NUM_STRINGS
-};
-
-/*************************************************************************/
-
-static Module *me;
-
-/*************************************************************************/
-
-class CommandNSOInfo : public Command
-{
- private:
- CommandReturn DoAdd(User *u, const std::vector<ci::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, "ADD");
- return MOD_CONT;
- }
-
- if ((na = findnick(nick))) /* ok we've found the user */
- {
- na->nc->Shrink("os_info");
- /* Add the module data to the user */
- na->nc->Extend("os_info", new ExtensibleItemPointerArray<char>(sstrdup(info)));
- me->NoticeLang(Config.s_NickServ, u, OINFO_ADD_SUCCESS, nick);
-
- }
- else /* NickCore not found! */
- notice_lang(Config.s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
-
- return MOD_CONT;
- }
-
- CommandReturn DoDel(User *u, const std::vector<ci::string> &params)
- {
- const char *nick = params[1].c_str();
- NickAlias *na = NULL;
-
- if ((na = findnick(nick))) /* ok we've found the user */
- {
- na->nc->Shrink("os_info");
-
- me->NoticeLang(Config.s_NickServ, u, OINFO_DEL_SUCCESS, nick);
-
- }
- else /* NickCore not found! */
- notice_lang(Config.s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
-
- return MOD_CONT;
- }
- public:
- CommandNSOInfo() : Command("OINFO", 2, 3, "nickserv/oinfo")
- {
- }
-
- CommandReturn Execute(User *u, const std::vector<ci::string> &params)
- {
- ci::string cmd = params[0];
-
- if (cmd == "ADD")
- return this->DoAdd(u, params);
- else if (cmd == "DEL")
- return this->DoDel(u, params);
- else
- this->OnSyntaxError(u, "");
-
- return MOD_CONT;
- }
-
- bool OnHelp(User *u, const ci::string &subcommand)
- {
- me->NoticeLang(Config.s_NickServ, u, OINFO_HELP);
- return true;
- }
-
- void OnSyntaxError(User *u, const ci::string &subcommand)
- {
- me->NoticeLang(Config.s_NickServ, u, OINFO_SYNTAX);
- }
-
- void OnServHelp(User *u)
- {
- me->NoticeLang(Config.s_NickServ, u, OINFO_HELP_CMD);
- }
-};
-
-class CommandCSOInfo : public Command
-{
- private:
- CommandReturn DoAdd(User *u, const std::vector<ci::string> &params)
- {
- const char *chan = params[0].c_str();
- const char *info = params.size() > 2 ? params[2].c_str() : NULL;
- ChannelInfo *ci = cs_findchan(chan);
-
- if (!info)
- {
- this->OnSyntaxError(u, "ADD");
- return MOD_CONT;
- }
-
- ci->Shrink("os_info");
- /* Add the module data to the channel */
- ci->Extend("os_info", new ExtensibleItemPointerArray<char>(sstrdup(info)));
- me->NoticeLang(Config.s_ChanServ, u, OCINFO_ADD_SUCCESS, chan);
-
- return MOD_CONT;
- }
-
- CommandReturn DoDel(User *u, const std::vector<ci::string> &params)
- {
- const char *chan = params[0].c_str();
- ChannelInfo *ci = cs_findchan(chan);
-
- /* Del the module data from the channel */
- ci->Shrink("os_info");
- me->NoticeLang(Config.s_ChanServ, u, OCINFO_DEL_SUCCESS, chan);
-
- return MOD_CONT;
- }
- public:
- CommandCSOInfo() : Command("OINFO", 2, 3, "chanserv/oinfo")
- {
- }
-
- CommandReturn Execute(User *u, const std::vector<ci::string> &params)
- {
- ci::string cmd = params[1];
-
- if (cmd == "ADD")
- return this->DoAdd(u, params);
- else if (cmd == "DEL")
- return this->DoDel(u, params);
- else
- this->OnSyntaxError(u, "");
- return MOD_CONT;
- }
-
- bool OnHelp(User *u, const ci::string &subcommand)
- {
- me->NoticeLang(Config.s_ChanServ, u, OCINFO_HELP);
- return true;
- }
-
- void OnSyntaxError(User *u, const ci::string &subcommand)
- {
- me->NoticeLang(Config.s_ChanServ, u, OCINFO_SYNTAX);
- }
-
- void OnServHelp(User *u)
- {
- me->NoticeLang(Config.s_ChanServ, u, OCINFO_HELP_CMD);
- }
-};
-
-class OSInfo : public Module
-{
- public:
- OSInfo(const std::string &modname, const std::string &creator) : Module(modname, creator)
- {
- me = this;
-
- this->SetAuthor(AUTHOR);
- this->SetType(SUPPORTED);
-
- this->AddCommand(NickServ, new CommandNSOInfo());
- this->AddCommand(ChanServ, new CommandCSOInfo());
-
- 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 #chan [ADD|DEL] <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 #chan [ADD|DEL] <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"
- };
-
- 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"
- };
-
- 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"
- };
-
- 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"
- };
-
- 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 Добавляет/Удаляет опер-инфо для канала"
- };
-
- 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"
- };
-
- this->InsertLanguage(LANG_EN_US, LANG_NUM_STRINGS, langtable_en_us);
- this->InsertLanguage(LANG_ES, LANG_NUM_STRINGS, langtable_es);
- this->InsertLanguage(LANG_NL, LANG_NUM_STRINGS, langtable_nl);
- this->InsertLanguage(LANG_DE, LANG_NUM_STRINGS, langtable_de);
- this->InsertLanguage(LANG_PT, LANG_NUM_STRINGS, langtable_pt);
- this->InsertLanguage(LANG_RU, LANG_NUM_STRINGS, langtable_ru);
- this->InsertLanguage(LANG_IT, LANG_NUM_STRINGS, langtable_it);
-
- Implementation i[] = { I_OnNickInfo, I_OnChanInfo, I_OnDatabaseReadMetadata, I_OnDatabaseWriteMetadata };
- ModuleManager::Attach(i, this, 4);
- }
-
- ~OSInfo()
- {
- OnSaveDatabase();
-
- for (nickcore_map::const_iterator it = NickCoreList.begin(), it_end = NickCoreList.end(); it != it_end; ++it)
- {
- NickCore *nc = it->second;
-
- nc->Shrink("os_info");
- }
-
- for (registered_channel_map::const_iterator it = RegisteredChannelList.begin(), it_end = RegisteredChannelList.end(); it != it_end; ++it)
- {
- ChannelInfo *ci = it->second;
-
- ci->Shrink("os_info");
- }
- }
-
- void OnNickInfo(User *u, NickAlias *na, bool)
- {
- if (is_oper(u))
- {
- char *c;
- if (na->nc->GetExtArray("os_info", c))
- u->SendMessage(Config.s_NickServ, " OperInfo: %s", c);
- }
- }
-
- void OnChanInfo(User *u, ChannelInfo *ci, bool)
- {
- if (is_oper(u))
- {
- char *c;
- if (ci->GetExtArray("os_info", c))
- u->SendMessage(Config.s_ChanServ, " OperInfo: %s", c);
- }
- }
-
- void OnDatabaseWriteMetadata(void (*WriteMetadata)(const std::string &, const std::string &), NickCore *nc)
- {
- char *c;
-
- if (nc->GetExtArray("os_info", c))
- {
- std::string buf = ":";
- buf += c;
- WriteMetadata("OS_INFO", buf.c_str());
- }
- }
-
- void OnDatabaseWriteMetadata(void (*WriteMetadata)(const std::string &, const std::string &), ChannelInfo *ci)
- {
- char *c;
-
- if (ci->GetExtArray("os_info", c))
- {
- std::string buf = ":";
- buf += c;
- WriteMetadata("OS_INFO", buf.c_str());
- }
- }
-
- EventReturn OnDatabaseReadMetadata(NickCore *nc, const std::string &key, const std::vector<std::string> &params)
- {
- if (key == "OS_INFO")
- {
- nc->Shrink("os_info");
- nc->Extend("os_info", new ExtensibleItemPointerArray<char>(sstrdup(params[0].c_str()))); /// We really should use std::string here...
-
- return EVENT_STOP;
- }
-
- return EVENT_CONTINUE;
- }
-
- EventReturn OnDatabaseReadMetadata(ChannelInfo *ci, const std::string &key, const std::vector<std::string> &params)
- {
- if (key == "OS_INFO")
- {
- ci->Shrink("os_info");
- ci->Extend("os_info", new ExtensibleItemPointerArray<char>(sstrdup(params[0].c_str())));
-
- return EVENT_STOP;
- }
-
- return EVENT_CONTINUE;
- }
-};
-
-MODULE_INIT(OSInfo)