changed Makefile; build all commands as an own file
[NeonServV5.git] / cmd_neonserv_trim.c
index 96791954eb4a6e099d91c93e2469a1690a37feaa..67501a7107033f4ed77b84da759f77b9c6524fc4 100644 (file)
@@ -1,32 +1,43 @@
 
+#include "cmd_neonserv.h"
+
 /*
 * argv[0]  target (format: minaccess-maxaccess/users/bans)
 * argv[1]  duration
 */
 static USERLIST_CALLBACK(neonserv_cmd_trim_userlist_lookup);
-static void neonserv_cmd_trim_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, int min_access, int max_access, int duration);
+static void neonserv_cmd_trim_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, int min_access, int max_access, int duration);
 
 struct neonserv_cmd_trim_cache {
     struct ClientSocket *client, *textclient;
     struct UserNode *user;
+    struct Event *event;
     int min_access;
     int max_access;
     int duration;
 };
 
-static CMD_BIND(neonserv_cmd_trim) {
-    if(stricmp(argv[0], "bans") && !checkChannelAccess(user, chan, "channel_candel", 1, 0)) {
-        reply(getTextBot(), user, "NS_ACCESS_DENIED");
-        return;
+CMD_BIND(neonserv_cmd_trim) {
+    if(stricmp(argv[0], "bans") && !checkChannelAccess(user, chan, "channel_candel", 0, 0)) {
+        if(isGodMode(user)) {
+            event->flags |= CMDFLAG_OPLOG;
+        } else {
+            reply(getTextBot(), user, "NS_ACCESS_DENIED");
+            return;
+        }
     }
     int min_access, max_access;
     if(!stricmp(argv[0], "users")) {
         min_access = 1;
         max_access = getChannelAccess(user, chan, 0) - 1;
     } else if(!stricmp(argv[0], "bans")) {
-        if(!checkChannelAccess(user, chan, "channel_staticban", 1, 0)) {
-            reply(getTextBot(), user, "NS_ACCESS_DENIED");
-            return;
+        if(!checkChannelAccess(user, chan, "channel_staticban", 0, 0)) {
+            if(isGodMode(user)) {
+                event->flags |= CMDFLAG_OPLOG;
+            } else {
+                reply(getTextBot(), user, "NS_ACCESS_DENIED");
+                return;
+            }
         }
         //TODO: TRIM BANS
         return;
@@ -37,7 +48,7 @@ static CMD_BIND(neonserv_cmd_trim) {
             seperator++;
             min_access = atoi(argv[0]);
             max_access = atoi(seperator);
-            if(max_access > min_access) {
+            if(max_access < min_access) {
                 reply(getTextBot(), user, "NS_INVALID_ACCESS_RANGE", min_access, max_access);
                 return;
             }
@@ -45,9 +56,13 @@ static CMD_BIND(neonserv_cmd_trim) {
             min_access = atoi(argv[0]);
             max_access = min_access;
         }
-        if(max_access >= getChannelAccess(user, chan, 1)) {
-            reply(getTextBot(), user, "NS_NO_ACCESS");
-            return;
+        if(max_access >= getChannelAccess(user, chan, 0)) {
+            if(isGodMode(user)) {
+                event->flags |= CMDFLAG_OPLOG;
+            } else {
+                reply(getTextBot(), user, "NS_NO_ACCESS");
+                return;
+            }
         }
     }
     //parse duration...
@@ -64,20 +79,21 @@ static CMD_BIND(neonserv_cmd_trim) {
     cache->client = client;
     cache->textclient = getTextBot();
     cache->user = user;
+    cache->event = event;
     cache->min_access = min_access;
     cache->max_access = max_access;
     cache->duration = duration;
-    get_userlist(chan, neonserv_cmd_trim_userlist_lookup, cache);
+    get_userlist_with_invisible(chan, neonserv_cmd_trim_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_trim_userlist_lookup) {
     struct neonserv_cmd_trim_cache *cache = data;
     //got userlist
-    neonserv_cmd_trim_async1(cache->client, cache->textclient, cache->user, chan, cache->min_access, cache->max_access, cache->duration);
+    neonserv_cmd_trim_async1(cache->client, cache->textclient, cache->user, chan, cache->event, cache->min_access, cache->max_access, cache->duration);
     free(cache);
 }
 
-static void neonserv_cmd_trim_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, int min_access, int max_access, int duration) {
+static void neonserv_cmd_trim_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, int min_access, int max_access, int duration) {
     MYSQL_RES *res;
     MYSQL_ROW row;
     int trim_count = 0, is_here;
@@ -103,4 +119,6 @@ static void neonserv_cmd_trim_async1(struct ClientSocket *client, struct ClientS
     }
     char timeBuf[MAXLEN];
     reply(getTextBot(), user, "NS_TRIM_DONE", trim_count, min_access, max_access, chan->name, timeToStr(user, duration, 3, timeBuf));
+    if(trim_count)
+        logEvent(event);
 }