CMD_BIND(neonserv_cmd_search) {
//ok parse the criterias
- struct neonserv_cmd_search_criteria *criteria = malloc(sizeof(*criteria));
- if (!criteria) {
- perror("malloc() failed");
- return;
- }
- memset(criteria, 0, sizeof(*criteria));
- criteria->limit = 50;
+ struct neonserv_cmd_search_criteria criteria;
+ memset(&criteria, 0, sizeof(criteria));
+ criteria.limit = 50;
int i, show_chans = 0, positive;
if(!stricmp(argv[0], "print")) {
show_chans = 1;
reply(getTextBot(), user, "MODCMD_LESS_PARAM_COUNT");
return;
}
- if(!stricmp(argv[i], "name")) criteria->name = argv[i+1];
- else if(!stricmp(argv[i], "registrar")) criteria->registrar = argv[i+1];
- else if(!stricmp(argv[i], "onchan")) criteria->onchan = argv[i+1];
- else if(!stricmp(argv[i], "unvisited")) criteria->unvisited = strToTime(user, argv[i+1]);
- else if(!stricmp(argv[i], "registered")) criteria->registered = strToTime(user, argv[i+1]);
+ if(!stricmp(argv[i], "name")) criteria.name = argv[i+1];
+ else if(!stricmp(argv[i], "registrar")) criteria.registrar = argv[i+1];
+ else if(!stricmp(argv[i], "onchan")) criteria.onchan = argv[i+1];
+ else if(!stricmp(argv[i], "unvisited")) criteria.unvisited = strToTime(user, argv[i+1]);
+ else if(!stricmp(argv[i], "registered")) criteria.registered = strToTime(user, argv[i+1]);
else if(!stricmp(argv[i], "flags")) {
if(argv[i+1][0] == '+') {
positive = 1;
positive = 1;
if(!stricmp(argv[i+1], "nodelete")) {
if(positive)
- criteria->flags |= CMD_SEARCH_FLAG_HAS_NODELETE;
+ criteria.flags |= CMD_SEARCH_FLAG_HAS_NODELETE;
else
- criteria->flags |= CMD_SEARCH_FLAG_NOT_NODELETE;
+ criteria.flags |= CMD_SEARCH_FLAG_NOT_NODELETE;
} else if(!stricmp(argv[i+1], "suspended")) {
if(positive)
- criteria->flags |= CMD_SEARCH_FLAG_HAS_SUSPENDED;
+ criteria.flags |= CMD_SEARCH_FLAG_HAS_SUSPENDED;
else
- criteria->flags |= CMD_SEARCH_FLAG_NOT_SUSPENDED;
+ criteria.flags |= CMD_SEARCH_FLAG_NOT_SUSPENDED;
}
}
else if(!stricmp(argv[i], "state")) {
positive = 1;
if(!stricmp(argv[i+1], "joined")) {
if(positive)
- criteria->flags |= CMD_SEARCH_FLAG_IS_JOINED;
+ criteria.flags |= CMD_SEARCH_FLAG_IS_JOINED;
else
- criteria->flags |= CMD_SEARCH_FLAG_NOT_JOINED;
+ criteria.flags |= CMD_SEARCH_FLAG_NOT_JOINED;
} else if(!stricmp(argv[i+1], "opped")) {
if(positive)
- criteria->flags |= CMD_SEARCH_FLAG_IS_OPPED;
+ criteria.flags |= CMD_SEARCH_FLAG_IS_OPPED;
else
- criteria->flags |= CMD_SEARCH_FLAG_NOT_OPPED;
+ criteria.flags |= CMD_SEARCH_FLAG_NOT_OPPED;
} else if(!stricmp(argv[i+1], "voiced")) {
if(positive)
- criteria->flags |= CMD_SEARCH_FLAG_IS_VOICED;
+ criteria.flags |= CMD_SEARCH_FLAG_IS_VOICED;
else
- criteria->flags |= CMD_SEARCH_FLAG_NOT_VOICED;
+ criteria.flags |= CMD_SEARCH_FLAG_NOT_VOICED;
}
}
else if(!stricmp(argv[i], "limit")) {
- criteria->limit = atoi(argv[i+1]);
+ criteria.limit = atoi(argv[i+1]);
}
}
int matches = 0;
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();
while ((row = mysql_fetch_row(res)) != NULL) {
- if(show_chans && matches == criteria->limit) {
+ if(show_chans && matches == criteria.limit) {
//too many
break;
}
- if(criteria->name && match(criteria->name, row[0])) continue;
- if(criteria->registrar && row[1] && match(criteria->registrar, row[1])) continue;
- if(criteria->unvisited) {
+ if(criteria.name && match(criteria.name, row[0])) continue;
+ if(criteria.registrar && row[1] && match(criteria.registrar, row[1])) continue;
+ if(criteria.unvisited) {
printf_mysql_query("SELECT `chanuser_seen` FROM `chanusers` WHERE `chanuser_cid` = '%s' ORDER BY `chanuser_seen` DESC LIMIT 1", row[5]);
res2 = mysql_use();
row2 = mysql_fetch_row(res2);
if(!row2) continue;
- if((time(0) - atoi(row2[0])) < criteria->unvisited) continue;
+ if((time(0) - atoi(row2[0])) < criteria.unvisited) continue;
}
- if(criteria->registered && (time(0) - atoi(row[2])) < criteria->registered) continue;
+ if(criteria.registered && (time(0) - atoi(row[2])) < criteria.registered) continue;
- if((criteria->flags & CMD_SEARCH_FLAG_HAS_NODELETE) && strcmp(row[3], "1")) continue;
- if((criteria->flags & CMD_SEARCH_FLAG_NOT_NODELETE) && strcmp(row[3], "0")) continue;
- 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) {
+ if((criteria.flags & CMD_SEARCH_FLAG_HAS_NODELETE) && strcmp(row[3], "1")) continue;
+ if((criteria.flags & CMD_SEARCH_FLAG_NOT_NODELETE) && strcmp(row[3], "0")) continue;
+ 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->onchan) {
+ if(criteria.onchan) {
if(!channel) continue;
struct ChanUser *chanuser = NULL;
for(chanuser = getChannelUsers(channel, NULL); chanuser; chanuser = getChannelUsers(channel, chanuser)) {
- if(!match(criteria->onchan, chanuser->user->nick)) break;
+ if(!match(criteria.onchan, chanuser->user->nick)) break;
}
if(!chanuser) continue;
}
- if((criteria->flags & CMD_SEARCH_FLAG_IS_JOINED) && !channel) continue;
- if((criteria->flags & CMD_SEARCH_FLAG_NOT_JOINED) && channel) continue;
- if(channel && (criteria->flags & (CMD_SEARCH_FLAG_IS_OPPED | CMD_SEARCH_FLAG_NOT_OPPED | CMD_SEARCH_FLAG_IS_VOICED | CMD_SEARCH_FLAG_NOT_VOICED))) {
+ if((criteria.flags & CMD_SEARCH_FLAG_IS_JOINED) && !channel) continue;
+ if((criteria.flags & CMD_SEARCH_FLAG_NOT_JOINED) && channel) continue;
+ if(channel && (criteria.flags & (CMD_SEARCH_FLAG_IS_OPPED | CMD_SEARCH_FLAG_NOT_OPPED | CMD_SEARCH_FLAG_IS_VOICED | CMD_SEARCH_FLAG_NOT_VOICED))) {
int flags = 0;
struct ClientSocket *bot;
for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) {
}
}
}
- if((criteria->flags & CMD_SEARCH_FLAG_IS_OPPED) && !(flags & CHANUSERFLAG_OPPED)) continue;
- if((criteria->flags & CMD_SEARCH_FLAG_NOT_OPPED) && (flags & CHANUSERFLAG_OPPED)) continue;
- if((criteria->flags & CMD_SEARCH_FLAG_IS_VOICED) && !(flags & CHANUSERFLAG_VOICED)) continue;
- if((criteria->flags & CMD_SEARCH_FLAG_NOT_VOICED) && (flags & CHANUSERFLAG_VOICED)) continue;
+ if((criteria.flags & CMD_SEARCH_FLAG_IS_OPPED) && !(flags & CHANUSERFLAG_OPPED)) continue;
+ if((criteria.flags & CMD_SEARCH_FLAG_NOT_OPPED) && (flags & CHANUSERFLAG_OPPED)) continue;
+ if((criteria.flags & CMD_SEARCH_FLAG_IS_VOICED) && !(flags & CHANUSERFLAG_VOICED)) continue;
+ if((criteria.flags & CMD_SEARCH_FLAG_NOT_VOICED) && (flags & CHANUSERFLAG_VOICED)) continue;
}
}
matches++;