-/* cmd_neonserv_trim.c - NeonServ v5.0
- * Copyright (C) 2011 Philipp Kreil (pk910)
+/* cmd_neonserv_trim.c - NeonServ v5.3
+ * Copyright (C) 2011-2012 Philipp Kreil (pk910)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
};
CMD_BIND(neonserv_cmd_trim) {
- if(stricmp(argv[0], "bans") && !checkChannelAccess(user, chan, "channel_candel", 0, 0)) {
+ if(stricmp(argv[0], "bans") && !checkChannelAccess(user, chan, "channel_candel", 0)) {
if(isGodMode(user)) {
event->flags |= CMDFLAG_OPLOG;
} else {
}
}
int min_access, max_access;
+ int duration = strToTime(user, argv[1]);
+ if(duration < 30) {
+ reply(getTextBot(), user, "NS_TRIM_DURATION_TOO_SHORT", 30);
+ return;
+ }
if(!stricmp(argv[0], "users")) {
min_access = 1;
- max_access = getChannelAccess(user, chan, 0) - 1;
+ max_access = getChannelAccess(user, chan) - 1;
} else if(!stricmp(argv[0], "bans")) {
- if(!checkChannelAccess(user, chan, "channel_staticban", 0, 0)) {
+ if(!checkChannelAccess(user, chan, "channel_staticban", 0)) {
if(isGodMode(user)) {
event->flags |= CMDFLAG_OPLOG;
} else {
return;
}
}
- //TODO: TRIM BANS
+ MYSQL_RES *res;
+ MYSQL_ROW row;
+ char nameBuf[20];
+ printf_mysql_query("SELECT `ban_mask`, `ban_id`, `ban_timeout` FROM `bans` WHERE `ban_channel` = '%d' AND `ban_triggered` < %d", chan->channel_id, (int) (time(0) - duration));
+ res = mysql_use();
+ int bancount = mysql_num_rows(res);
+ struct ModeBuffer *modenode = initModeBuffer(client, chan);
+ while ((row = mysql_fetch_row(res)) != NULL) {
+ if(strcmp(row[2], "0")) {
+ sprintf(nameBuf, "ban_%s", row[1]);
+ timeq_del_name(nameBuf);
+ }
+ printf_mysql_query("DELETE FROM `bans` WHERE `ban_id` = '%s'", row[1]);
+ modeBufferUnban(modenode, row[0]);
+ }
+ freeModeBuffer(modenode);
+ char timeBuf[MAXLEN];
+ reply(getTextBot(), user, "NS_TRIM_BAN_DONE", bancount, chan->name, timeToStr(user, duration, 3, timeBuf));
+ if(bancount)
+ logEvent(event);
return;
} else {
char *seperator = strstr(argv[0], "-");
min_access = atoi(argv[0]);
max_access = min_access;
}
- if(max_access >= getChannelAccess(user, chan, 0)) {
+ if(max_access >= getChannelAccess(user, chan)) {
if(isGodMode(user)) {
event->flags |= CMDFLAG_OPLOG;
} else {
}
}
}
- //parse duration...
- int duration = strToTime(user, argv[1]);
- if(duration < 30) {
- reply(getTextBot(), user, "NS_TRIM_DURATION_TOO_SHORT", 30);
- return;
- }
struct neonserv_cmd_trim_cache *cache = malloc(sizeof(*cache));
if (!cache) {
perror("malloc() failed");