00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "module.h"
00020
00021 #define AUTHOR "Rob"
00022 #define VERSION VERSION_STRING
00023
00024
00025 #define DEFAULT_DB_NAME "os_info.db"
00026
00027
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
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
00160 if (info) {
00161
00162 if ((na = findnick(nick))) {
00163
00164 moduleAddData(&na->nc->moduleData, "info", info);
00165 moduleNoticeLang(s_NickServ, u,
00166 OINFO_ADD_SUCCESS, nick);
00167
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
00176 if ((na = findnick(nick))) {
00177 moduleDelData(&na->nc->moduleData, "info");
00178 moduleNoticeLang(s_NickServ, u,
00179 OINFO_DEL_SUCCESS, nick);
00180
00181 } else {
00182 notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED,
00183 nick);
00184 }
00185
00186 } else {
00187 moduleNoticeLang(s_NickServ, u, OINFO_SYNTAX);
00188 }
00189 free(cmd);
00190 free(nick);
00191
00192 } else if (cmd) {
00193 moduleNoticeLang(s_NickServ, u, OINFO_SYNTAX);
00194 free(cmd);
00195
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
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
00234 moduleAddData(&ci->moduleData, "info", info);
00235 moduleNoticeLang(s_ChanServ, u,
00236 OCINFO_ADD_SUCCESS, chan);
00237
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
00247 moduleDelData(&ci->moduleData, "info");
00248 moduleNoticeLang(s_ChanServ, u,
00249 OCINFO_DEL_SUCCESS, chan);
00250
00251 } else {
00252 notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED,
00253 chan);
00254 }
00255
00256 } else {
00257 moduleNoticeLang(s_ChanServ, u, OCINFO_SYNTAX);
00258 }
00259 free(cmd);
00260 free(chan);
00261
00262 } else if (cmd) {
00263 moduleNoticeLang(s_ChanServ, u, OCINFO_SYNTAX);
00264 free(cmd);
00265
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
00290 if (is_oper(u)) {
00291
00292 text = moduleGetLastBuffer();
00293 if (text) {
00294 nick = myStrGetToken(text, ' ', 0);
00295 if (nick) {
00296
00297 if ((na = findnick(nick))) {
00298
00299 if ((info = moduleGetData(&na->nc->moduleData, "info"))) {
00300 notice_user(s_NickServ, u, " OperInfo: %s", info);
00301 free(info);
00302 }
00303
00304 } else {
00305
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
00327 if (is_oper(u)) {
00328
00329 text = moduleGetLastBuffer();
00330 if (text) {
00331 chan = myStrGetToken(text, ' ', 0);
00332 if (chan) {
00333 if ((ci = cs_findchan(chan))) {
00334
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
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
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
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
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
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
00532 "Syntax: OINFO [ADD|DEL] nick <info>",
00533
00534 "OperInfo line has been added to nick %s",
00535
00536 "OperInfo line has been removed from nick %s",
00537
00538 "Syntax: OINFO [ADD|DEL] chan <info>",
00539
00540 "OperInfo line has been added to channel %s",
00541
00542 "OperInfo line has been removed from channel %s",
00543
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
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
00554 " OINFO Add / Del an OperInfo line to a nick",
00555
00556 " OINFO Add / Del an OperInfo line to a channel"
00557 };
00558
00559 char *langtable_es[] = {
00560
00561 "Sintaxis: OINFO [ADD|DEL] nick <info>",
00562
00563 "Una linea OperInfo ha sido agregada al nick %s",
00564
00565 "La linea OperInfo ha sido removida del nick %s",
00566
00567 "Sintaxis: OINFO [ADD|DEL] chan <info>",
00568
00569 "Linea OperInfo ha sido agregada al canal %s",
00570
00571 "La linea OperInfo ha sido removida del canal %s",
00572
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
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
00583 " OINFO Agrega / Elimina una linea OperInfo al nick",
00584
00585 " OINFO Agrega / Elimina una linea OperInfo al canal"
00586 };
00587
00588 char *langtable_nl[] = {
00589
00590 "Gebruik: OINFO [ADD|DEL] nick <info>",
00591
00592 "OperInfo regel is toegevoegd aan nick %s",
00593
00594 "OperInfo regel is weggehaald van nick %s",
00595
00596 "Gebruik: OINFO [ADD|DEL] kanaal <info>",
00597
00598 "OperInfo regel is toegevoegd aan kanaal %s",
00599
00600 "OperInfo regel is weggehaald van kanaal %s",
00601
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
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
00614 " OINFO Voeg een OperInfo regel toe aan een nick of verwijder deze",
00615
00616 " OINFO Voeg een OperInfo regel toe aan een kanaal of verwijder deze"
00617 };
00618
00619 char *langtable_de[] = {
00620
00621 "Syntax: OINFO [ADD|DEL] Nickname <Information>",
00622
00623 "Eine OperInfo Linie wurde zu den Nicknamen %s hinzugefьgt",
00624
00625 "Die OperInfo Linie wurde von den Nicknamen %s enfernt",
00626
00627 "Syntax: OINFO [ADD|DEL] Channel <Information>",
00628
00629 "Eine OperInfo Linie wurde zu den Channel %s hinzugefьgt",
00630
00631 "Die OperInfo Linie wurde von den Channel %s enfernt",
00632
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
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
00643 " OINFO Addiert / Lцscht eine OperInfo Linie zu / von einen Nicknamen",
00644
00645 " OINFO Addiert / Lцscht eine OperInfo Linie zu / von einen Channel"
00646 };
00647
00648 char *langtable_pt[] = {
00649
00650 "Sintaxe: OINFO [ADD|DEL] nick <informaзгo>",
00651
00652 "A linha OperInfo foi adicionada ao nick %s",
00653
00654 "A linha OperInfo foi removida do nick %s",
00655
00656 "Sintaxe: OINFO [ADD|DEL] canal <informaзгo>",
00657
00658 "A linha OperInfo foi adicionada ao canal %s",
00659
00660 "A linha OperInfo foi removida do canal %s",
00661
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
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
00672 " OINFO Adiciona ou Apaga a linha OperInfo para um nick",
00673
00674 " OINFO Adiciona ou Apaga a linha OperInfo para um canal"
00675 };
00676
00677 char *langtable_ru[] = {
00678
00679 "Синтаксис: OINFO ADD|DEL ник тест",
00680
00681 "Опер-Информация для ника %s добавлена",
00682
00683 "Опер-Информация для ника %s была удалена",
00684
00685 "Синтаксис: OINFO ADD|DEL #канал текст",
00686
00687 "Опер-Информация для канала %s успешно установлена",
00688
00689 "Опер-Информация для канала %s была удалена",
00690
00691 "Синтаксис: OINFO ADD|DEL ник текст\n"
00692 "Устанавливает или удаляет Опер-Информацию для указанного ника,\n"
00693 "которая будет показана любому оператору, запрашивающему INFO ника.\n"
00694 "Может быть использована для 'пометки' пользователей и т. д...",
00695
00696 "Синтаксис: OINFO ADD|DEL #канал текст\n"
00697 "Устанавливает или удаляет Опер-Информацию для указанного канала,\n"
00698 "которая будет показана любому оператору, запрашивающему INFO канала.\n"
00699 "Может быть использована для 'пометки' каналов и т. д...",
00700
00701 " OINFO Добавляет/Удаляет опер-инфо для ника",
00702
00703 " OINFO Добавляет/Удаляет опер-инфо для канала"
00704 };
00705
00706 char *langtable_it[] = {
00707
00708 "Sintassi: OINFO [ADD|DEL] nick <info>",
00709
00710 "Linea OperInfo aggiunta al nick %s",
00711
00712 "Linea OperInfo rimossa dal nick %s",
00713
00714 "Sintassi: OINFO [ADD|DEL] chan <info>",
00715
00716 "Linea OperInfo aggiunta al canale %s",
00717
00718 "Linea OperInfo rimossa dal canale %s",
00719
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
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
00730 " OINFO Aggiunge/Rimuove una linea OperInfo ad/da un nick",
00731
00732 " OINFO Aggiunge/Rimuove una linea OperInfo ad/da un canale"
00733 };
00734
00735 char *langtable_fr[] = {
00736
00737 "Syntaxe: \002OINFO [ADD|DEL] \037pseudo\037 \037<info>\037\002",
00738
00739 "Ligne OperInfo ajoutйe au pseudo %s",
00740
00741 "Ligne OperInfo retirйe au pseudo %s",
00742
00743 "Syntaxe: \002OINFO [ADD|DEL] \037canal\037 \037<info>\037\002",
00744
00745 "Ligne OperInfo ajoutйe au canal %s",
00746
00747 "Ligne OperInfo retirйe au canal %s",
00748
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
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
00759 " OINFO Ajoute / Supprime une ligne OperInfo а un pseudo",
00760
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
00797 static void mMainNickHelp(User * u)
00798 {
00799 if (is_oper(u)) {
00800 moduleNoticeLang(s_NickServ, u, OINFO_HELP_CMD);
00801 }
00802 }
00803
00804
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