X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fmodules%2FNeonServ.mod%2Fcmd_neonserv_search.c;h=f3ea6593b1ac35acea5f164f990bd795a5ccf7ab;hb=139ae91def764e66b5d2024723700101cc2a379e;hp=2cefe55104b1e0c814cb4a3321527d1bb18d8ade;hpb=706e48b1e666054030c491d864f740071e390038;p=NeonServV5.git diff --git a/src/modules/NeonServ.mod/cmd_neonserv_search.c b/src/modules/NeonServ.mod/cmd_neonserv_search.c index 2cefe55..f3ea659 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_search.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_search.c @@ -1,4 +1,4 @@ -/* cmd_neonserv_search.c - NeonServ v5.3 +/* cmd_neonserv_search.c - NeonServ v5.6 * Copyright (C) 2011-2012 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify @@ -21,12 +21,15 @@ #define CMD_SEARCH_FLAG_NOT_NODELETE 0x002 #define CMD_SEARCH_FLAG_HAS_SUSPENDED 0x004 #define CMD_SEARCH_FLAG_NOT_SUSPENDED 0x008 -#define CMD_SEARCH_FLAG_IS_JOINED 0x010 -#define CMD_SEARCH_FLAG_NOT_JOINED 0x020 -#define CMD_SEARCH_FLAG_IS_OPPED 0x040 -#define CMD_SEARCH_FLAG_NOT_OPPED 0x080 -#define CMD_SEARCH_FLAG_IS_VOICED 0x100 -#define CMD_SEARCH_FLAG_NOT_VOICED 0x200 +#define CMD_SEARCH_FLAG_IS_JOINED 0x010 /* state */ +#define CMD_SEARCH_FLAG_NOT_JOINED 0x020 /* state */ +#define CMD_SEARCH_FLAG_IS_OPPED 0x040 /* state */ +#define CMD_SEARCH_FLAG_NOT_OPPED 0x080 /* state */ +#define CMD_SEARCH_FLAG_IS_VOICED 0x100 /* state */ +#define CMD_SEARCH_FLAG_NOT_VOICED 0x200 /* state */ +#define CMD_SEARCH_FLAG_IS_ZOMBIE 0x400 +#define CMD_SEARCH_FLAG_NOT_ZOMBIE 0x800 + #define CMD_SEARCH_FLAG_STATES 0x3f0 struct neonserv_cmd_search_criteria { @@ -39,6 +42,8 @@ struct neonserv_cmd_search_criteria { unsigned int limit : 16; }; +static char neonserv_cmd_search_zombie = 0; + CMD_BIND(neonserv_cmd_search) { //ok parse the criterias struct neonserv_cmd_search_criteria criteria; @@ -50,7 +55,7 @@ CMD_BIND(neonserv_cmd_search) { } for(i = 1; i < argc; i += 2) { if(argc <= i+1) { - reply(getTextBot(), user, "MODCMD_LESS_PARAM_COUNT"); + reply(textclient, user, "MODCMD_LESS_PARAM_COUNT"); return; } if(!stricmp(argv[i], "name")) criteria.name = argv[i+1]; @@ -77,6 +82,11 @@ CMD_BIND(neonserv_cmd_search) { criteria.flags |= CMD_SEARCH_FLAG_HAS_SUSPENDED; else criteria.flags |= CMD_SEARCH_FLAG_NOT_SUSPENDED; + } else if(!stricmp(argv[i+1], "zombie")) { + if(positive) + criteria.flags |= CMD_SEARCH_FLAG_IS_ZOMBIE; + else + criteria.flags |= CMD_SEARCH_FLAG_NOT_ZOMBIE; } } else if(!stricmp(argv[i], "state")) { @@ -110,16 +120,36 @@ CMD_BIND(neonserv_cmd_search) { } } int matches = 0; - reply(getTextBot(), user, "NS_SEARCH_HEADER"); + if((criteria.flags & (CMD_SEARCH_FLAG_IS_ZOMBIE | CMD_SEARCH_FLAG_NOT_ZOMBIE))) { + if(neonserv_cmd_search_zombie) { + reply(textclient, user, "NS_SEARCH_ZOMBIE_SCAN_IN_PROGRESS"); + return; + } + neonserv_cmd_search_zombie = 1; + } + + reply(textclient, user, "NS_SEARCH_HEADER"); MYSQL_RES *res, *res2; MYSQL_ROW row, row2; printf_mysql_query("SELECT `channel_name`, `user_user`, `channel_registered`, `channel_nodelete`, `suspended`, `channel_id` FROM `bot_channels` LEFT JOIN `bots` ON `bots`.`id` = `botid` LEFT JOIN `channels` ON `chanid` = `channel_id` LEFT JOIN `users` ON `channel_registrator` = `user_id` WHERE `botclass` = '%d' AND `active` = '1'", client->botid); res = mysql_use(); + struct ChanNode *channel; while ((row = mysql_fetch_row(res)) != NULL) { - if(show_chans && matches == criteria.limit) { - //too many - break; + if((criteria.flags & (CMD_SEARCH_FLAG_IS_ZOMBIE | CMD_SEARCH_FLAG_NOT_ZOMBIE))) { + channel = getChanByName(row[0]); + if(channel) + channel->flags |= CHANFLAG_SCRIPTFLAG1; + if(show_chans && matches == criteria.limit) { + //too many + continue; + } + } else { + if(show_chans && matches == criteria.limit) { + //too many + break; + } } + if((criteria.flags & CMD_SEARCH_FLAG_IS_ZOMBIE)) continue; if(criteria.name && match(criteria.name, row[0])) continue; if(criteria.registrar && row[1] && match(criteria.registrar, row[1])) continue; if(criteria.unvisited) { @@ -136,7 +166,8 @@ CMD_BIND(neonserv_cmd_search) { if((criteria.flags & CMD_SEARCH_FLAG_HAS_SUSPENDED) && strcmp(row[4], "1")) continue; if((criteria.flags & CMD_SEARCH_FLAG_NOT_SUSPENDED) && strcmp(row[4], "0")) continue; if((criteria.flags & CMD_SEARCH_FLAG_STATES) || criteria.onchan) { - struct ChanNode *channel = getChanByName(row[0]); + if(!(criteria.flags & (CMD_SEARCH_FLAG_IS_ZOMBIE | CMD_SEARCH_FLAG_NOT_ZOMBIE))) + channel = getChanByName(row[0]); if(criteria.onchan) { if(!channel) continue; struct ChanUser *chanuser = NULL; @@ -168,8 +199,23 @@ CMD_BIND(neonserv_cmd_search) { matches++; //output if(show_chans) { - reply(getTextBot(), user, "%s", row[0]); + reply(textclient, user, "%s", row[0]); + } + } + if((criteria.flags & (CMD_SEARCH_FLAG_IS_ZOMBIE | CMD_SEARCH_FLAG_NOT_ZOMBIE))) { + struct ChanUser *chanuser; + for(chanuser = getUserChannels(client->user, NULL); chanuser; chanuser = getUserChannels(client->user, chanuser)) { + channel = chanuser->chan; + if(channel->flags & CHANFLAG_SCRIPTFLAG1) { + channel->flags &= ~CHANFLAG_SCRIPTFLAG1; + } else if((criteria.flags & CMD_SEARCH_FLAG_IS_ZOMBIE)) { + matches++; + if(show_chans) { + reply(textclient, user, "%s", channel->name); + } + } } } - reply(getTextBot(), user, "NS_TABLE_COUNT", matches); + neonserv_cmd_search_zombie = 0; + reply(textclient, user, "NS_TABLE_COUNT", matches); }