*** VERSION 5.2.0 ***
[NeonServV5.git] / src / cmd_neonserv_trim.c
index eb58093c7146cb1f08e2fed81b7d46d12e864345..97c9615a2e6679cee9f31811a9a07b2e0848b41a 100644 (file)
@@ -1,4 +1,4 @@
-/* cmd_neonserv_trim.c - NeonServ v5.0
+/* cmd_neonserv_trim.c - NeonServ v5.2
  * Copyright (C) 2011  Philipp Kreil (pk910)
  * 
  * This program is free software: you can redistribute it and/or modify
@@ -43,6 +43,11 @@ 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;
@@ -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], "-");
@@ -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");