os_info.c

Go to the documentation of this file.
00001 /* os_info.c - Adds oper information lines to nicks/channels
00002  *
00003  * (C) 2003-2013 Anope Team
00004  * Contact us at team@anope.org
00005  *
00006  * Based on the original module by Rob <rob@anope.org>
00007  * Included in the Anope module pack since Anope 1.7.9
00008  * Anope Coder: DrStein <drstein@anope.org>
00009  *
00010  * Please read COPYING and README for further details.
00011  *
00012  * Send bug reports to the Anope Coder instead of the module
00013  * author, because any changes since the inclusion into anope
00014  * are not supported by the original author.
00015  *
00016  */
00017 /*************************************************************************/
00018 
00019 #include "module.h"
00020 
00021 #define AUTHOR "Rob"
00022 #define VERSION VERSION_STRING
00023 
00024 /* Default database name */
00025 #define DEFAULT_DB_NAME "os_info.db"
00026 
00027 /* Multi-language stuff */
00028 #define LANG_NUM_STRINGS   10
00029 
00030 #define OINFO_SYNTAX        0
00031 #define OINFO_ADD_SUCCESS   1
00032 #define OINFO_DEL_SUCCESS   2
00033 #define OCINFO_SYNTAX       3
00034 #define OCINFO_ADD_SUCCESS  4
00035 #define OCINFO_DEL_SUCCESS  5
00036 #define OINFO_HELP          6
00037 #define OCINFO_HELP         7
00038 #define OINFO_HELP_CMD      8
00039 #define OCINFO_HELP_CMD     9
00040 
00041 /*************************************************************************/
00042 
00043 char *OSInfoDBName = NULL;
00044 
00045 static int myAddNickInfo(User * u);
00046 static int myAddChanInfo(User * u);
00047 static int myNickInfo(User * u);
00048 static int myChanInfo(User * u);
00049 
00050 static int mNickHelp(User * u);
00051 static int mChanHelp(User * u);
00052 static void mMainChanHelp(User * u);
00053 static void mMainNickHelp(User * u);
00054 static void m_AddLanguages(void);
00055 
00056 static int mLoadData(void);
00057 static int mSaveData(int argc, char **argv);
00058 static int mBackupData(int argc, char **argv);
00059 static int mLoadConfig();
00060 static int mEventReload(int argc, char **argv);
00061 
00062 /*************************************************************************/
00063 
00070 int AnopeInit(int argc, char **argv)
00071 {
00072     Command *c;
00073     EvtHook *hook = NULL;
00074 
00075     moduleAddAuthor(AUTHOR);
00076     moduleAddVersion(VERSION);
00077     moduleSetType(SUPPORTED);
00078 
00079     alog("os_info: Loading configuration directives...");
00080     if (mLoadConfig()) {
00081         return MOD_STOP;
00082     }
00083 
00084     c = createCommand("oInfo", myAddNickInfo, is_oper, -1, -1, -1, -1, -1);
00085     moduleAddHelp(c, mNickHelp);
00086     moduleAddCommand(NICKSERV, c, MOD_HEAD);
00087 
00088     c = createCommand("Info", myNickInfo, NULL, -1, -1, -1, -1, -1);
00089     moduleAddCommand(NICKSERV, c, MOD_TAIL);
00090 
00091     c = createCommand("oInfo", myAddChanInfo, is_oper, -1, -1, -1, -1, -1);
00092     moduleAddHelp(c, mChanHelp);
00093     moduleAddCommand(CHANSERV, c, MOD_HEAD);
00094 
00095     c = createCommand("Info", myChanInfo, NULL, -1, -1, -1, -1, -1);
00096     moduleAddCommand(CHANSERV, c, MOD_TAIL);
00097 
00098     hook = createEventHook(EVENT_DB_SAVING, mSaveData);
00099     moduleAddEventHook(hook);
00100 
00101     hook = createEventHook(EVENT_DB_BACKUP, mBackupData);
00102     moduleAddEventHook(hook);
00103 
00104     hook = createEventHook(EVENT_RELOAD, mEventReload);
00105     moduleAddEventHook(hook);
00106 
00107     moduleSetNickHelp(mMainNickHelp);
00108     moduleSetChanHelp(mMainChanHelp);
00109 
00110     mLoadData();
00111     m_AddLanguages();
00112 
00113     return MOD_CONT;
00114 }
00115 
00119 void AnopeFini(void)
00120 {
00121     char *av[1];
00122 
00123     av[0] = sstrdup(EVENT_START);
00124     mSaveData(1, av);
00125     free(av[0]);
00126 
00127     if (OSInfoDBName)
00128         free(OSInfoDBName);
00129 }
00130 
00131 /*************************************************************************/
00132 
00143 static int myAddNickInfo(User * u)
00144 {
00145     char *text = NULL;
00146     char *cmd = NULL;
00147     char *nick = NULL;
00148     char *info = NULL;
00149     NickAlias *na = NULL;
00150 
00151     /* Get the last buffer anope recived */
00152     text = moduleGetLastBuffer();
00153     if (text) {
00154         cmd = myStrGetToken(text, ' ', 0);
00155         nick = myStrGetToken(text, ' ', 1);
00156         info = myStrGetTokenRemainder(text, ' ', 2);
00157         if (cmd && nick) {
00158             if (strcasecmp(cmd, "ADD") == 0) {
00159                 /* Syntax error, again! */
00160                 if (info) {
00161                     /* ok we've found the user */
00162                     if ((na = findnick(nick))) {
00163                         /* Add the module data to the user */
00164                         moduleAddData(&na->nc->moduleData, "info", info);
00165                         moduleNoticeLang(s_NickServ, u,
00166                                          OINFO_ADD_SUCCESS, nick);
00167                         /* NickCore not found! */
00168                     } else {
00169                         notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED,
00170                                     nick);
00171                     }
00172                     free(info);
00173                 }
00174             } else if (strcasecmp(cmd, "DEL") == 0) {
00175                 /* ok we've found the user */
00176                 if ((na = findnick(nick))) {
00177                     moduleDelData(&na->nc->moduleData, "info");
00178                     moduleNoticeLang(s_NickServ, u,
00179                                      OINFO_DEL_SUCCESS, nick);
00180                     /* NickCore not found! */
00181                 } else {
00182                     notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED,
00183                                 nick);
00184                 }
00185                 /* another syntax error! */
00186             } else {
00187                 moduleNoticeLang(s_NickServ, u, OINFO_SYNTAX);
00188             }
00189             free(cmd);
00190             free(nick);
00191             /* Syntax error */
00192         } else if (cmd) {
00193             moduleNoticeLang(s_NickServ, u, OINFO_SYNTAX);
00194             free(cmd);
00195             /* Syntax error */
00196         } else {
00197             moduleNoticeLang(s_NickServ, u, OINFO_SYNTAX);
00198         }
00199     } else {
00200         moduleNoticeLang(s_NickServ, u, OINFO_SYNTAX);
00201     }
00202     return MOD_CONT;
00203 }
00204 
00215 static int myAddChanInfo(User * u)
00216 {
00217     char *text = NULL;
00218     char *cmd = NULL;
00219     char *chan = NULL;
00220     char *info = NULL;
00221     ChannelInfo *ci = NULL;
00222 
00223     /* Get the last buffer anope recived */
00224     text = moduleGetLastBuffer();
00225     if (text) {
00226         cmd = myStrGetToken(text, ' ', 0);
00227         chan = myStrGetToken(text, ' ', 1);
00228         info = myStrGetTokenRemainder(text, ' ', 2);
00229         if (cmd && chan) {
00230             if (strcasecmp(cmd, "ADD") == 0) {
00231                 if (info) {
00232                     if ((ci = cs_findchan(chan))) {
00233                         /* Add the module data to the channel */
00234                         moduleAddData(&ci->moduleData, "info", info);
00235                         moduleNoticeLang(s_ChanServ, u,
00236                                          OCINFO_ADD_SUCCESS, chan);
00237                         /* ChanInfo */
00238                     } else {
00239                         notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED,
00240                                     chan);
00241                     }
00242                     free(info);
00243                 }
00244             } else if (strcasecmp(cmd, "DEL") == 0) {
00245                 if ((ci = cs_findchan(chan))) {
00246                     /* Del the module data from the channel */
00247                     moduleDelData(&ci->moduleData, "info");
00248                     moduleNoticeLang(s_ChanServ, u,
00249                                      OCINFO_DEL_SUCCESS, chan);
00250                     /* ChanInfo */
00251                 } else {
00252                     notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED,
00253                                 chan);
00254                 }
00255                 /* another syntax error! */
00256             } else {
00257                 moduleNoticeLang(s_ChanServ, u, OCINFO_SYNTAX);
00258             }
00259             free(cmd);
00260             free(chan);
00261             /* Syntax error */
00262         } else if (cmd) {
00263             moduleNoticeLang(s_ChanServ, u, OCINFO_SYNTAX);
00264             free(cmd);
00265             /* Syntax error */
00266         } else {
00267             moduleNoticeLang(s_ChanServ, u, OCINFO_SYNTAX);
00268         }
00269     } else {
00270         moduleNoticeLang(s_ChanServ, u, OCINFO_SYNTAX);
00271     }
00272     return MOD_CONT;
00273 }
00274 
00275 /*************************************************************************/
00276 
00282 static int myNickInfo(User * u)
00283 {
00284     char *text = NULL;
00285     char *nick = NULL;
00286         char *info = NULL;
00287     NickAlias *na = NULL;
00288 
00289     /* Only show our goodies to opers */
00290     if (is_oper(u)) {
00291         /* Get the last buffer anope recived */
00292         text = moduleGetLastBuffer();
00293         if (text) {
00294             nick = myStrGetToken(text, ' ', 0);
00295             if (nick) {
00296                 /* ok we've found the user */
00297                 if ((na = findnick(nick))) {
00298                     /* If we have any info on this user */
00299                     if ((info = moduleGetData(&na->nc->moduleData, "info"))) {
00300                         notice_user(s_NickServ, u, " OperInfo: %s", info);
00301                                                 free(info);
00302                     }
00303                     /* NickCore not found! */
00304                 } else {
00305                     /* we dont care! */
00306                 }
00307                 free(nick);
00308             }
00309         }
00310     }
00311     return MOD_CONT;
00312 }
00313 
00319 static int myChanInfo(User * u)
00320 {
00321     char *text = NULL;
00322     char *chan = NULL;
00323         char *info = NULL;
00324     ChannelInfo *ci = NULL;
00325 
00326     /* Only show our goodies to opers */
00327     if (is_oper(u)) {
00328         /* Get the last buffer anope recived */
00329         text = moduleGetLastBuffer();
00330         if (text) {
00331             chan = myStrGetToken(text, ' ', 0);
00332             if (chan) {
00333                 if ((ci = cs_findchan(chan))) {
00334                     /* If we have any info on this channel */
00335                     if ((info = moduleGetData(&ci->moduleData, "info"))) {
00336                         notice_user(s_ChanServ, u, " OperInfo: %s", info);
00337                                                 free(info);
00338                     }
00339                 }
00340                 free(chan);
00341             }
00342         }
00343     }
00344     return MOD_CONT;
00345 }
00346 
00347 /*************************************************************************/
00348 
00353 static int mLoadData(void)
00354 {
00355     int ret = 0;
00356     FILE *in;
00357 
00358     char *type = NULL;
00359     char *name = NULL;
00360     char *info = NULL;
00361     int len = 0;
00362 
00363     ChannelInfo *ci = NULL;
00364     NickAlias *na = NULL;
00365 
00366     /* will _never_ be this big thanks to the 512 limit of a message */
00367     char buffer[2000];
00368     if ((in = fopen(OSInfoDBName, "r")) == NULL) {
00369         alog("os_info: WARNING: can not open the database file! (it might not exist, this is not fatal)");
00370         ret = 1;
00371     } else {
00372         while (fgets(buffer, 1500, in)) {
00373             type = myStrGetToken(buffer, ' ', 0);
00374             name = myStrGetToken(buffer, ' ', 1);
00375             info = myStrGetTokenRemainder(buffer, ' ', 2);
00376             if (type) {
00377                 if (name) {
00378                     if (info) {
00379                         len = strlen(info);
00380                         /* Take the \n from the end of the line */
00381                         info[len - 1] = '\0';
00382                         if (stricmp(type, "C") == 0) {
00383                             if ((ci = cs_findchan(name))) {
00384                                 moduleAddData(&ci->moduleData, "info",
00385                                               info);
00386                             }
00387                         } else if (stricmp(type, "N") == 0) {
00388                             if ((na = findnick(name))) {
00389                                 moduleAddData(&na->nc->moduleData, "info",
00390                                               info);
00391                             }
00392                         }
00393                         free(info);
00394                     }
00395                     free(name);
00396                 }
00397                 free(type);
00398             }
00399         }
00400         fclose(in);
00401     }
00402     return ret;
00403 }
00404 
00412 static int mSaveData(int argc, char **argv)
00413 {
00414     ChannelInfo *ci = NULL;
00415     NickCore *nc = NULL;
00416     int i = 0;
00417     int ret = 0;
00418     FILE *out;
00419     char *info = NULL;
00420 
00421     if (argc >= 1) {
00422         if (!stricmp(argv[0], EVENT_START)) {
00423             if ((out = fopen(OSInfoDBName, "w")) == NULL) {
00424                 alog("os_info: ERROR: can not open the database file!");
00425                 anope_cmd_global(s_OperServ,
00426                                  "os_info: ERROR: can not open the database file!");
00427                 ret = 1;
00428             } else {
00429                 for (i = 0; i < 1024; i++) {
00430                     for (nc = nclists[i]; nc; nc = nc->next) {
00431                         /* If we have any info on this user */
00432                         if ((info = moduleGetData(&nc->moduleData, "info"))) {
00433                             fprintf(out, "N %s %s\n", nc->display, info);
00434                                                         free(info);
00435                         }
00436                     }
00437                 }
00438 
00439 
00440                 for (i = 0; i < 256; i++) {
00441                     for (ci = chanlists[i]; ci; ci = ci->next) {
00442                         /* If we have any info on this channel */
00443                         if ((info = moduleGetData(&ci->moduleData, "info"))) {
00444                             fprintf(out, "C %s %s\n", ci->name, info);
00445                                                         free(info);
00446                         }
00447                     }
00448                 }
00449                 fclose(out);
00450             }
00451         } else {
00452             ret = 0;
00453         }
00454     }
00455 
00456     return ret;
00457 }
00458 
00463 static int mBackupData(int argc, char **argv)
00464 {
00465         if (argc >= 1 && !stricmp(argv[0], EVENT_START))
00466                 ModuleDatabaseBackup(OSInfoDBName);
00467         
00468         return MOD_CONT;
00469 }
00470 
00475 static int mLoadConfig(void)
00476 {
00477     char *tmp = NULL;
00478 
00479     Directive directivas[] = {
00480         {"OSInfoDBName", {{PARAM_STRING, PARAM_RELOAD, &tmp}}},
00481     };
00482 
00483     Directive *d = &directivas[0];
00484     moduleGetConfigDirective(d);
00485 
00486     if (OSInfoDBName)
00487         free(OSInfoDBName);
00488 
00489     if (tmp) {
00490         OSInfoDBName = tmp;
00491     } else {
00492         OSInfoDBName = sstrdup(DEFAULT_DB_NAME);
00493         alog("os_info: OSInfoDBName is not defined in Services configuration file, using default %s", OSInfoDBName);
00494     }
00495 
00496     alog("os_info: Directive OSInfoDBName loaded (%s)...", OSInfoDBName);
00497 
00498     return 0;
00499 }
00500 
00505 static int mEventReload(int argc, char **argv)
00506 {
00507     int ret = 0;
00508     if (argc >= 1) {
00509         if (!stricmp(argv[0], EVENT_START)) {
00510             alog("os_info: Reloading configuration directives...");
00511             ret = mLoadConfig();
00512         } else {
00513             /* Nothing for now */
00514         }
00515     }
00516 
00517     if (ret)
00518         alog("os_info.c: ERROR: An error has occured while reloading the configuration file");
00519 
00520     return MOD_CONT;
00521 }
00522 
00523 /*************************************************************************/
00524 
00528 static void m_AddLanguages(void)
00529 {
00530     char *langtable_en_us[] = {
00531         /* OINFO_SYNTAX */
00532         "Syntax: OINFO [ADD|DEL] nick <info>",
00533         /* OINFO_ADD_SUCCESS */
00534         "OperInfo line has been added to nick %s",
00535         /* OINFO_DEL_SUCCESS */
00536         "OperInfo line has been removed from nick %s",
00537         /* OCINFO_SYNTAX */
00538         "Syntax: OINFO [ADD|DEL] chan <info>",
00539         /* OCINFO_ADD_SUCCESS */
00540         "OperInfo line has been added to channel %s",
00541         /* OCINFO_DEL_SUCCESS */
00542         "OperInfo line has been removed from channel %s",
00543         /* OINFO_HELP */
00544         "Syntax: OINFO [ADD|DEL] nick <info>\n"
00545             "Add or Delete Oper information for the given nick\n"
00546             "This will show up when any oper uses /ns info nick on the user.\n"
00547             "and can be used for 'tagging' users etc....",
00548         /* OCINFO_HELP */
00549         "Syntax: OINFO [ADD|DEL] chan <info>\n"
00550             "Add or Delete Oper information for the given channel\n"
00551             "This will show up when any oper uses /cs info on the channel.\n"
00552             "and can be used for 'tagging' channels etc....",
00553         /* OINFO_HELP_CMD */
00554         "    OINFO         Add / Del an OperInfo line to a nick",
00555         /* OCINFO_HELP_CMD */
00556         "    OINFO         Add / Del an OperInfo line to a channel"
00557     };
00558 
00559     char *langtable_es[] = {
00560         /* OINFO_SYNTAX */
00561         "Sintaxis: OINFO [ADD|DEL] nick <info>",
00562         /* OINFO_ADD_SUCCESS */
00563         "Una linea OperInfo ha sido agregada al nick %s",
00564         /* OINFO_DEL_SUCCESS */
00565         "La linea OperInfo ha sido removida del nick %s",
00566         /* OCINFO_SYNTAX */
00567         "Sintaxis: OINFO [ADD|DEL] chan <info>",
00568         /* OCINFO_ADD_SUCCESS */
00569         "Linea OperInfo ha sido agregada al canal %s",
00570         /* OCINFO_DEL_SUCCESS */
00571         "La linea OperInfo ha sido removida del canal %s",
00572         /* OINFO_HELP */
00573         "Sintaxis: OINFO [ADD|DEL] nick <info>\n"
00574             "Agrega o elimina informacion para Operadores al nick dado\n"
00575             "Esto se mostrara cuando cualquier operador haga /ns info nick\n"
00576             "y puede ser usado para 'marcado' de usuarios, etc....",
00577         /* OCINFO_HELP */
00578         "Sintaxis: OINFO [ADD|DEL] chan <info>\n"
00579             "Agrega o elimina informacion para Operadores al canal dado\n"
00580             "Esto se mostrara cuando cualquier operador haga /cs info canal\n"
00581             "y puede ser usado para 'marcado' de canales, etc....",
00582         /* OINFO_HELP_CMD */
00583         "    OINFO         Agrega / Elimina una linea OperInfo al nick",
00584         /* OCINFO_HELP_CMD */
00585         "    OINFO         Agrega / Elimina una linea OperInfo al canal"
00586     };
00587 
00588     char *langtable_nl[] = {
00589         /* OINFO_SYNTAX */
00590         "Gebruik: OINFO [ADD|DEL] nick <info>",
00591         /* OINFO_ADD_SUCCESS */
00592         "OperInfo regel is toegevoegd aan nick %s",
00593         /* OINFO_DEL_SUCCESS */
00594         "OperInfo regel is weggehaald van nick %s",
00595         /* OCINFO_SYNTAX */
00596         "Gebruik: OINFO [ADD|DEL] kanaal <info>",
00597         /* OCINFO_ADD_SUCCESS */
00598         "OperInfo regel is toegevoegd aan kanaal %s",
00599         /* OCINFO_DEL_SUCCESS */
00600         "OperInfo regel is weggehaald van kanaal %s",
00601         /* OINFO_HELP */
00602         "Gebruik: OINFO [ADD|DEL] nick <info>\n"
00603             "Voeg een Oper informatie regel toe aan de gegeven nick, of\n"
00604             "verwijder deze. Deze regel zal worden weergegeven wanneer\n"
00605             "een oper /ns info nick doet voor deze gebruiker, en kan worden\n"
00606             "gebruikt om een gebruiker te 'markeren' etc...",
00607         /* OCINFO_HELP */
00608         "Gebruik: OINFO [ADD|DEL] kanaal <info>\n"
00609             "Voeg een Oper informatie regel toe aan de gegeven kanaal, of\n"
00610             "verwijder deze. Deze regel zal worden weergegeven wanneer\n"
00611             "een oper /cs info kanaal doet voor dit kanaal, en kan worden\n"
00612             "gebruikt om een kanaal te 'markeren' etc...",
00613         /* OINFO_HELP_CMD */
00614         "    OINFO         Voeg een OperInfo regel toe aan een nick of verwijder deze",
00615         /* OCINFO_HELP_CMD */
00616         "    OINFO         Voeg een OperInfo regel toe aan een kanaal of verwijder deze"
00617     };
00618 
00619     char *langtable_de[] = {
00620         /* OINFO_SYNTAX */
00621         "Syntax: OINFO [ADD|DEL] Nickname <Information>",
00622         /* OINFO_ADD_SUCCESS */
00623         "Eine OperInfo Linie wurde zu den Nicknamen %s hinzugefьgt",
00624         /* OINFO_DEL_SUCCESS */
00625         "Die OperInfo Linie wurde von den Nicknamen %s enfernt",
00626         /* OCINFO_SYNTAX */
00627         "Syntax: OINFO [ADD|DEL] Channel <Information>",
00628         /* OCINFO_ADD_SUCCESS */
00629         "Eine OperInfo Linie wurde zu den Channel %s hinzugefьgt",
00630         /* OCINFO_DEL_SUCCESS */
00631         "Die OperInfo Linie wurde von den Channel %s enfernt",
00632         /* OINFO_HELP */
00633         "Syntax: OINFO [ADD|DEL] Nickname <Information>\n"
00634             "Addiert oder lцscht eine OperInfo Linie zu den angegebenen\n"
00635             "Nicknamen.Sie wird angezeigt wenn ein Oper mit /ns info sich\n"
00636             "ьber den Nicknamen informiert.",
00637         /* OCINFO_HELP */
00638         "Syntax: OINFO [ADD|DEL] chan <info>\n"
00639             "Addiert oder lцscht eine OperInfo Linie zu den angegebenen\n"
00640             "Channel.Sie wird angezeigt wenn ein Oper mit /cs info sich\n"
00641             "ьber den Channel informiert.",
00642         /* OINFO_HELP_CMD */
00643         "    OINFO         Addiert / Lцscht eine OperInfo Linie zu / von einen Nicknamen",
00644         /* OCINFO_HELP_CMD */
00645         "    OINFO         Addiert / Lцscht eine OperInfo Linie zu / von einen Channel"
00646     };
00647 
00648     char *langtable_pt[] = {
00649         /* OINFO_SYNTAX */
00650         "Sintaxe: OINFO [ADD|DEL] nick <informaзгo>",
00651         /* OINFO_ADD_SUCCESS */
00652         "A linha OperInfo foi adicionada ao nick %s",
00653         /* OINFO_DEL_SUCCESS */
00654         "A linha OperInfo foi removida do nick %s",
00655         /* OCINFO_SYNTAX */
00656         "Sintaxe: OINFO [ADD|DEL] canal <informaзгo>",
00657         /* OCINFO_ADD_SUCCESS */
00658         "A linha OperInfo foi adicionada ao canal %s",
00659         /* OCINFO_DEL_SUCCESS */
00660         "A linha OperInfo foi removida do canal %s",
00661         /* OINFO_HELP */
00662         "Sintaxe: OINFO [ADD|DEL] nick <informaзгo>\n"
00663             "Adiciona ou apaga informaзгo para Operadores ao nick fornecido\n"
00664             "Isto serб mostrado quando qualquer Operador usar /ns info nick\n"
00665             "e pode ser usado para 'etiquetar' usuбrios etc...",
00666         /* OCINFO_HELP */
00667         "Sintaxe: OINFO [ADD|DEL] canal <informaзгo>\n"
00668             "Adiciona ou apaga informaзгo para Operadores ao canal fornecido\n"
00669             "Isto serб mostrado quando qualquer Operador usar /cs info canal\n"
00670             "e pode ser usado para 'etiquetar' canais etc...",
00671         /* OINFO_HELP_CMD */
00672         "    OINFO      Adiciona ou Apaga a linha OperInfo para um nick",
00673         /* OCINFO_HELP_CMD */
00674         "    OINFO      Adiciona ou Apaga a linha OperInfo para um canal"
00675     };
00676 
00677     char *langtable_ru[] = {
00678         /* OINFO_SYNTAX */
00679         "Синтаксис: OINFO ADD|DEL ник тест",
00680         /* OINFO_ADD_SUCCESS */
00681         "Опер-Информация для ника %s добавлена",
00682         /* OINFO_DEL_SUCCESS */
00683         "Опер-Информация для ника %s была удалена",
00684         /* OCINFO_SYNTAX */
00685         "Синтаксис: OINFO ADD|DEL #канал текст",
00686         /* OCINFO_ADD_SUCCESS */
00687         "Опер-Информация для канала %s успешно установлена",
00688         /* OCINFO_DEL_SUCCESS */
00689         "Опер-Информация для канала %s была удалена",
00690         /* OINFO_HELP */
00691         "Синтаксис: OINFO ADD|DEL ник текст\n"
00692             "Устанавливает или удаляет Опер-Информацию для указанного ника,\n"
00693             "которая будет показана любому оператору, запрашивающему INFO ника.\n"
00694             "Может быть использована для 'пометки' пользователей и т. д...",
00695         /* OCINFO_HELP */
00696         "Синтаксис: OINFO ADD|DEL #канал текст\n"
00697             "Устанавливает или удаляет Опер-Информацию для указанного канала,\n"
00698             "которая будет показана любому оператору, запрашивающему INFO канала.\n"
00699             "Может быть использована для 'пометки' каналов и т. д...",
00700         /* OINFO_HELP_CMD */
00701         "    OINFO      Добавляет/Удаляет опер-инфо для ника",
00702         /* OCINFO_HELP_CMD */
00703         "    OINFO      Добавляет/Удаляет опер-инфо для канала"
00704     };
00705 
00706         char *langtable_it[] = {
00707         /* OINFO_SYNTAX */
00708         "Sintassi: OINFO [ADD|DEL] nick <info>",
00709         /* OINFO_ADD_SUCCESS */
00710         "Linea OperInfo aggiunta al nick %s",
00711         /* OINFO_DEL_SUCCESS */
00712         "Linea OperInfo rimossa dal nick %s",
00713         /* OCINFO_SYNTAX */
00714         "Sintassi: OINFO [ADD|DEL] chan <info>",
00715         /* OCINFO_ADD_SUCCESS */
00716         "Linea OperInfo aggiunta al canale %s",
00717         /* OCINFO_DEL_SUCCESS */
00718         "Linea OperInfo rimossa dal canale %s",
00719         /* OINFO_HELP */
00720         "Sintassi: OINFO [ADD|DEL] nick <info>\n"
00721             "Aggiunge o rimuove informazioni Oper per il nick specificato\n"
00722             "Queste vengono mostrate quando un oper esegue il comando /ns info <nick>\n"
00723             "e possono essere utilizzate per 'marchiare' gli utenti ecc...",
00724         /* OCINFO_HELP */
00725         "Sintassi: OINFO [ADD|DEL] chan <info>\n"
00726             "Aggiunge o rimuove informazioni Oper per il canale specificato\n"
00727             "Queste vengono mostrate quando un oper esegue il comando /cs info <canale>\n"
00728             "e possono essere utilizzate per 'marchiare' i canali ecc...",
00729         /* OINFO_HELP_CMD */
00730         "    OINFO         Aggiunge/Rimuove una linea OperInfo ad/da un nick",
00731         /* OCINFO_HELP_CMD */
00732         "    OINFO         Aggiunge/Rimuove una linea OperInfo ad/da un canale"
00733     };
00734 
00735     char *langtable_fr[] = {
00736         /* OINFO_SYNTAX */
00737         "Syntaxe: \002OINFO [ADD|DEL] \037pseudo\037 \037<info>\037\002",
00738         /* OINFO_ADD_SUCCESS */
00739         "Ligne OperInfo ajoutйe au pseudo %s",
00740         /* OINFO_DEL_SUCCESS */
00741         "Ligne OperInfo retirйe au pseudo %s",
00742         /* OCINFO_SYNTAX */
00743         "Syntaxe: \002OINFO [ADD|DEL] \037canal\037 \037<info>\037\002",
00744         /* OCINFO_ADD_SUCCESS */
00745         "Ligne OperInfo ajoutйe au canal %s",
00746         /* OCINFO_DEL_SUCCESS */
00747         "Ligne OperInfo retirйe au canal %s",
00748         /* OINFO_HELP */
00749         "Syntaxe: \002OINFO [ADD|DEL] \037pseudo\037 \037info\037\002\n"
00750             "Ajoute ou supprime une information Oper au pseudo spйcifiй\n"
00751             "Elle sera vue par un oper avec la commande /ns info pseudo pour l'utilisateur\n"
00752             "et peut кtre utilisйe pour 'taguer' les utilisateurs etc....",
00753         /* OCINFO_HELP */
00754         "Syntax: \002OINFO [ADD|DEL] \037canal\037 \037info\037\002\n"
00755             "Ajoute ou supprime une information Oper au canal spйcifiй\n"
00756             "Elle sera vue par un oper avec la commande /ns info canal pour le canal.\n"
00757             "et peut кtre utilisйe pour 'taguer' les canaux etc....",
00758         /* OINFO_HELP_CMD */
00759         "    OINFO         Ajoute / Supprime une ligne OperInfo а un pseudo",
00760         /* OCINFO_HELP_CMD */
00761         "    OINFO         Ajoute / Supprime une ligne OperInfo а un canal"
00762     };
00763 
00764     moduleInsertLanguage(LANG_EN_US, LANG_NUM_STRINGS, langtable_en_us);
00765     moduleInsertLanguage(LANG_ES, LANG_NUM_STRINGS, langtable_es);
00766     moduleInsertLanguage(LANG_NL, LANG_NUM_STRINGS, langtable_nl);
00767     moduleInsertLanguage(LANG_DE, LANG_NUM_STRINGS, langtable_de);
00768     moduleInsertLanguage(LANG_PT, LANG_NUM_STRINGS, langtable_pt);
00769     moduleInsertLanguage(LANG_RU, LANG_NUM_STRINGS, langtable_ru);
00770     moduleInsertLanguage(LANG_IT, LANG_NUM_STRINGS, langtable_it);
00771     moduleInsertLanguage(LANG_FR, LANG_NUM_STRINGS, langtable_fr);
00772 }
00773 
00774 /*************************************************************************/
00775 
00776 static int mNickHelp(User * u)
00777 {
00778     if (is_oper(u)) {
00779         moduleNoticeLang(s_NickServ, u, OINFO_HELP);
00780     } else {
00781         notice_lang(s_NickServ, u, NO_HELP_AVAILABLE, "OINFO");
00782     }
00783     return MOD_CONT;
00784 }
00785 
00786 static int mChanHelp(User * u)
00787 {
00788     if (is_oper(u)) {
00789         moduleNoticeLang(s_ChanServ, u, OCINFO_HELP);
00790     } else {
00791         notice_lang(s_ChanServ, u, NO_HELP_AVAILABLE, "OINFO");
00792     }
00793     return MOD_CONT;
00794 }
00795 
00796 /* This help will be added to the main NickServ list */
00797 static void mMainNickHelp(User * u)
00798 {
00799     if (is_oper(u)) {
00800         moduleNoticeLang(s_NickServ, u, OINFO_HELP_CMD);
00801     }
00802 }
00803 
00804 /* This help will be added to the main NickServ list */
00805 static void mMainChanHelp(User * u)
00806 {
00807     if (is_oper(u)) {
00808         moduleNoticeLang(s_ChanServ, u, OCINFO_HELP_CMD);
00809     }
00810 }
00811 
00812 /*************************************************************************/
00813 
00814 /* EOF */