2 #define CMD_SEARCH_FLAG_HAS_NODELETE 0x01
3 #define CMD_SEARCH_FLAG_NOT_NODELETE 0x02
4 #define CMD_SEARCH_FLAG_HAS_SUSPENDED 0x04
5 #define CMD_SEARCH_FLAG_NOT_SUSPENDED 0x08
7 struct neonserv_cmd_search_criteria {
10 unsigned int flags : 16;
11 unsigned int unvisited;
12 unsigned int registered;
13 unsigned int limit : 16;
16 static CMD_BIND(neonserv_cmd_search) {
17 //ok parse the criterias
18 struct neonserv_cmd_search_criteria *criteria = malloc(sizeof(*criteria));
20 perror("malloc() failed");
23 memset(criteria, 0, sizeof(*criteria));
25 int i, show_chans = 0, positive;
26 if(!stricmp(argv[0], "print")) {
29 for(i = 1; i < argc; i += 2) {
31 reply(getTextBot(), user, "MODCMD_LESS_PARAM_COUNT");
34 if(!stricmp(argv[i], "name")) criteria->name = argv[i+1];
35 else if(!stricmp(argv[i], "registrar")) criteria->registrar = argv[i+1];
36 else if(!stricmp(argv[i], "unvisited")) criteria->unvisited = strToTime(user, argv[i+1]);
37 else if(!stricmp(argv[i], "registered")) criteria->registered = strToTime(user, argv[i+1]);
38 else if(!stricmp(argv[i], "flags")) {
39 if(argv[i+1][0] == '+') {
42 } else if(argv[i+1][0] == '-') {
47 if(!stricmp(argv[i+1], "nodelete")) {
49 criteria->flags |= CMD_SEARCH_FLAG_HAS_NODELETE;
51 criteria->flags |= CMD_SEARCH_FLAG_NOT_NODELETE;
52 } else if(!stricmp(argv[i+1], "suspended")) {
54 criteria->flags |= CMD_SEARCH_FLAG_HAS_SUSPENDED;
56 criteria->flags |= CMD_SEARCH_FLAG_NOT_SUSPENDED;
59 else if(!stricmp(argv[i], "limit")) {
60 criteria->limit = atoi(argv[i+1]);
64 reply(getTextBot(), user, "NS_SEARCH_HEADER");
65 MYSQL_RES *res, *res2;
67 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);
69 while ((row = mysql_fetch_row(res)) != NULL) {
70 if(show_chans && matches == criteria->limit) {
74 if(criteria->name && match(criteria->name, row[0])) continue;
75 if(criteria->registrar && row[1] && match(criteria->registrar, row[1])) continue;
76 if(criteria->unvisited) {
77 printf_mysql_query("SELECT `chanuser_seen` FROM `chanusers` WHERE `chanuser_cid` = '%s' ORDER BY `chanuser_seen` DESC LIMIT 1", row[5]);
79 row2 = mysql_fetch_row(res);
81 if((time(0) - atoi(row2[0])) < criteria->unvisited) continue;
83 if(criteria->registered && (time(0) - atoi(row[2])) < criteria->registered) continue;
85 if((criteria->flags & CMD_SEARCH_FLAG_HAS_NODELETE) && strcmp(row[3], "1")) continue;
86 if((criteria->flags & CMD_SEARCH_FLAG_NOT_NODELETE) && strcmp(row[3], "0")) continue;
87 if((criteria->flags & CMD_SEARCH_FLAG_HAS_SUSPENDED) && strcmp(row[4], "1")) continue;
88 if((criteria->flags & CMD_SEARCH_FLAG_NOT_SUSPENDED) && strcmp(row[4], "0")) continue;
92 reply(getTextBot(), user, "%s", row[0]);
95 reply(getTextBot(), user, "NS_TABLE_COUNT", matches);