X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fcmd_neonserv_trim.c;h=65a0e73482f76d6a62ffbb2710dd8174670c28e2;hb=bb5692b9cbff069abbf9573c81e86c3cd2061ceb;hp=eb58093c7146cb1f08e2fed81b7d46d12e864345;hpb=95fed4deda0319bee515e44ceec0c77061a2c04e;p=NeonServV5.git diff --git a/src/cmd_neonserv_trim.c b/src/cmd_neonserv_trim.c index eb58093..65a0e73 100644 --- a/src/cmd_neonserv_trim.c +++ b/src/cmd_neonserv_trim.c @@ -1,5 +1,5 @@ -/* 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 @@ -34,7 +34,7 @@ struct neonserv_cmd_trim_cache { }; 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 { @@ -43,11 +43,16 @@ CMD_BIND(neonserv_cmd_trim) { } } 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 { @@ -55,7 +60,26 @@ CMD_BIND(neonserv_cmd_trim) { 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], "-"); @@ -72,7 +96,7 @@ CMD_BIND(neonserv_cmd_trim) { 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 { @@ -81,12 +105,6 @@ CMD_BIND(neonserv_cmd_trim) { } } } - //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");