2 #include "cmd_neonserv.h"
4 #define CMD_SEARCH_FLAG_HAS_NODELETE 0x01
5 #define CMD_SEARCH_FLAG_NOT_NODELETE 0x02
6 #define CMD_SEARCH_FLAG_HAS_SUSPENDED 0x04
7 #define CMD_SEARCH_FLAG_NOT_SUSPENDED 0x08
9 struct neonserv_cmd_search_criteria {
12 unsigned int flags : 16;
13 unsigned int unvisited;
14 unsigned int registered;
15 unsigned int limit : 16;
18 CMD_BIND(neonserv_cmd_search) {
19 //ok parse the criterias
20 struct neonserv_cmd_search_criteria *criteria = malloc(sizeof(*criteria));
22 perror("malloc() failed");
25 memset(criteria, 0, sizeof(*criteria));
27 int i, show_chans = 0, positive;
28 if(!stricmp(argv[0], "print")) {
31 for(i = 1; i < argc; i += 2) {
33 reply(getTextBot(), user, "MODCMD_LESS_PARAM_COUNT");
36 if(!stricmp(argv[i], "name")) criteria->name = argv[i+1];
37 else if(!stricmp(argv[i], "registrar")) criteria->registrar = argv[i+1];
38 else if(!stricmp(argv[i], "unvisited")) criteria->unvisited = strToTime(user, argv[i+1]);
39 else if(!stricmp(argv[i], "registered")) criteria->registered = strToTime(user, argv[i+1]);
40 else if(!stricmp(argv[i], "flags")) {
41 if(argv[i+1][0] == '+') {
44 } else if(argv[i+1][0] == '-') {
49 if(!stricmp(argv[i+1], "nodelete")) {
51 criteria->flags |= CMD_SEARCH_FLAG_HAS_NODELETE;
53 criteria->flags |= CMD_SEARCH_FLAG_NOT_NODELETE;
54 } else if(!stricmp(argv[i+1], "suspended")) {
56 criteria->flags |= CMD_SEARCH_FLAG_HAS_SUSPENDED;
58 criteria->flags |= CMD_SEARCH_FLAG_NOT_SUSPENDED;
61 else if(!stricmp(argv[i], "limit")) {
62 criteria->limit = atoi(argv[i+1]);
66 reply(getTextBot(), user, "NS_SEARCH_HEADER");
67 MYSQL_RES *res, *res2;
69 printf_mysql_query("SELECT `channel_name`, `user_user`, `channel_registered`, `channel_nodelete`, `suspended`, `channel_id` FROM `bot_channels` LEFT JOIN `channels` ON `chanid` = `channel_id` LEFT JOIN `users` ON `channel_registrator` = `user_id` WHERE `botid` = '%d'", client->botid);
71 while ((row = mysql_fetch_row(res)) != NULL) {
72 if(show_chans && matches == criteria->limit) {
76 if(criteria->name && match(criteria->name, row[0])) continue;
77 if(criteria->registrar && row[1] && match(criteria->registrar, row[1])) continue;
78 if(criteria->unvisited) {
79 printf_mysql_query("SELECT `chanuser_seen` FROM `chanusers` WHERE `chanuser_cid` = '%s' ORDER BY `chanuser_seen` DESC LIMIT 1", row[5]);
81 row2 = mysql_fetch_row(res);
83 if((time(0) - atoi(row2[0])) < criteria->unvisited) continue;
85 if(criteria->registered && (time(0) - atoi(row[2])) < criteria->registered) continue;
87 if((criteria->flags & CMD_SEARCH_FLAG_HAS_NODELETE) && strcmp(row[3], "1")) continue;
88 if((criteria->flags & CMD_SEARCH_FLAG_NOT_NODELETE) && strcmp(row[3], "0")) continue;
89 if((criteria->flags & CMD_SEARCH_FLAG_HAS_SUSPENDED) && strcmp(row[4], "1")) continue;
90 if((criteria->flags & CMD_SEARCH_FLAG_NOT_SUSPENDED) && strcmp(row[4], "0")) continue;
94 reply(getTextBot(), user, "%s", row[0]);
97 reply(getTextBot(), user, "NS_TABLE_COUNT", matches);