diff options
Diffstat (limited to 'src/modules')
| -rw-r--r-- | src/modules/cs_set_misc.cpp | 196 | ||||
| -rw-r--r-- | src/modules/os_info.cpp | 515 |
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> ¶ms) + { + 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> ¶ms) + { + 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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) |
