deleteUser(atoi(row[0]));
char *alertchan = get_string_field("General.CheckAuths.alertchan");
if(alertchan) {
+ char reason[MAXLEN];
+ if(!exists) {
+ strcpy(reason, "USER_NOT_EXISTS");
+ } else {
+ sprintf(reason, "USER_REGISTERED_MISSMATCH: %lu, expected %d (diff: %d)", (unsigned long) registered, atoi(row[1]), diff);
+ }
struct ChanNode *alertchan_chan = getChanByName(alertchan);
struct ClientSocket *alertclient;
if(alertchan_chan && (alertclient = getChannelBot(alertchan_chan, 0)) != NULL) {
- putsock(alertclient, "PRIVMSG %s :Deleted User %s", alertchan_chan->name, auth);
+ putsock(alertclient, "PRIVMSG %s :Deleted User %s (%s)", alertchan_chan->name, auth, reason);
}
}
} else if(exists && !strcmp(row[1], "0")) {
#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 {
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;
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")) {
}
}
int matches = 0;
+ if((criteria.flags & (CMD_SEARCH_FLAG_IS_ZOMBIE | CMD_SEARCH_FLAG_NOT_ZOMBIE))) {
+ if(neonserv_cmd_search_zombie) {
+ reply(getTextBot(), user, "NS_SEARCH_ZOMBIE_SCAN_IN_PROGRESS");
+ return;
+ }
+ neonserv_cmd_search_zombie = 1;
+ }
+
reply(getTextBot(), 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) {
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;
reply(getTextBot(), 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(getTextBot(), user, "%s", channel->name);
+ }
+ }
+ }
+ }
+ neonserv_cmd_search_zombie = 0;
reply(getTextBot(), user, "NS_TABLE_COUNT", matches);
}
loadChannelSettings(chan);
printf_mysql_query("SELECT `channel_scanner`, `channel_spam_limit`, `channel_spam_except`, `channel_flood_limit`, `channel_flood_time`, `channel_flood_except`, `channel_join_limit`, `channel_join_time`, `channel_join_except`, `channel_caps_percent`, `channel_caps_except`, `channel_digit_percent`, `channel_digit_except`, `channel_badword_except` FROM `channels` WHERE `channel_id` = '%d'", chan->channel_id);
res = mysql_use();
- row = mysql_fetch_row(res);
+ if(!(row = mysql_fetch_row(res)))
+ return 0;
if(!row[0] || !row[1] || !row[2] || !row[3] || !row[4] || !row[5] || !row[6] || !row[7] || !row[8] || !row[9] || !row[10] || !row[11] || !row[12]) {
printf_mysql_query("SELECT `channel_scanner`, `channel_spam_limit`, `channel_spam_except`, `channel_flood_limit`, `channel_flood_time`, `channel_flood_except`, `channel_join_limit`, `channel_join_time`, `channel_join_except`, `channel_caps_percent`, `channel_caps_except`, `channel_digit_percent`, `channel_digit_except`, `channel_badword_except` FROM `channels` WHERE `channel_name` = 'defaults'");
res = mysql_use();