added strToTime function and started writing cmd_trim
authorpk910 <philipp@zoelle1.de>
Wed, 24 Aug 2011 00:44:56 +0000 (02:44 +0200)
committerpk910 <philipp@zoelle1.de>
Wed, 24 Aug 2011 01:13:43 +0000 (03:13 +0200)
bot_NeonServ.c
cmd_neonserv_trim.c [new file with mode: 0644]
tools.c
tools.h

index a9d453532757b89a616e1d387d3c284f5885c005..1dda375415f9993a45e93cf1aeb5a37320ca5cc2 100644 (file)
@@ -90,7 +90,7 @@ INCLUDE ALL CMD's HERE
 #include "cmd_neonserv_deluser.c"
 #include "cmd_neonserv_delme.c"
 #include "cmd_neonserv_mdeluser.c"
-//#include "cmd_neonserv_trim.c"
+#include "cmd_neonserv_trim.c"  /* TODO: trim bans */
 //#include "cmd_neonserv_giveownership.c"
 #include "cmd_neonserv_users.c"
 #include "cmd_neonserv_up.c"
@@ -239,6 +239,7 @@ void init_NeonServ() {
     register_command(BOTID, "upall",        neonserv_cmd_upall,     0, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
     register_command(BOTID, "downall",      neonserv_cmd_downall,   0, 0);
     register_command(BOTID, "mdeluser",     neonserv_cmd_mdeluser,  2, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
+    register_command(BOTID, "trim",         neonserv_cmd_trim,      2, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
     
     start_bots();
     bind_bot_ready(neonserv_bot_ready);
diff --git a/cmd_neonserv_trim.c b/cmd_neonserv_trim.c
new file mode 100644 (file)
index 0000000..e938ed5
--- /dev/null
@@ -0,0 +1,46 @@
+
+/*
+* argv[0]  target (format: minaccess-maxaccess/users/bans)
+* argv[1]  duration
+* argv[2]  (optional) "vacation"
+*/
+
+static CMD_BIND(neonserv_cmd_trim) {
+    check_mysql();
+    if(!checkChannelAccess(user, chan, "channel_candel", 1, 0)) {
+        reply(getTextBot(), user, "NS_ACCESS_DENIED");
+        return;
+    }
+    int min_access, max_access;
+    if(!strcmp(argv[0], "users")) {
+        min_access = 1;
+        max_access = getChannelAccess(user, chan, 0) - 1;
+    } else if(!strcmp(argv[0], "bans")) {
+        //TODO: TRIM BANS
+        return;
+    } else {
+        char *seperator = strstr(argv[0], "-");
+        if(seperator) {
+            seperator = '\0';
+            seperator++;
+            min_access = atoi(argv[0]);
+            max_access = atoi(seperator);
+            if(max_access > min_access) {
+                reply(getTextBot(), user, "NS_INVALID_ACCESS_RANGE", min_access, max_access);
+                return;
+            }
+        } else {
+            min_access = atoi(argv[0]);
+            max_access = min_access;
+        }
+        if(max_access >= getChannelAccess(user, chan, 1)) {
+            reply(getTextBot(), user, "NS_NO_ACCESS");
+            return;
+        }
+    }
+    //parse duration...
+    int duration = strToTime(user, argv[1]);
+    char timeBuf[MAXLEN];
+    reply(getTextBot(), user, "yea; time: %d  (%s)", duration, timeToStr(user, duration, 3, timeBuf));
+}
+
diff --git a/tools.c b/tools.c
index 70cfc1e82d3f57a4fb8d84112b2b787a3bf11e70..55b69200544bbe105fed85b366ccd01d97b9b8ab 100644 (file)
--- a/tools.c
+++ b/tools.c
@@ -5,16 +5,20 @@
 static const struct default_language_entry msgtab[] = {
     {"TIME_MASK_2_ITEMS", "%s and %s"},
     {"TIME_MASK_3_ITEMS", "%s, %s and %s"},
-    {"TIME_YEAR", "%d year"},
-    {"TIME_YEARS", "%d years"},
-    {"TIME_DAY", "%d day"},
-    {"TIME_DAYS", "%d days"},
-    {"TIME_HOUR", "%d hour"},
-    {"TIME_HOURS", "%d hours"},
-    {"TIME_MINUTE", "%d minute"},
-    {"TIME_MINUTES", "%d minutes"},
-    {"TIME_SECOND", "%d second"},
-    {"TIME_SECONDS", "%d seconds"},
+    {"TIME_YEAR", "year"},
+    {"TIME_YEARS", "years"},
+    {"TIME_MONTH", "month"},
+    {"TIME_MONTHS", "months"},
+    {"TIME_WEEK", "week"},
+    {"TIME_WEEKS", "weeks"},
+    {"TIME_DAY", "day"},
+    {"TIME_DAYS", "days"},
+    {"TIME_HOUR", "hour"},
+    {"TIME_HOURS", "hours"},
+    {"TIME_MINUTE", "minute"},
+    {"TIME_MINUTES", "minutes"},
+    {"TIME_SECOND", "second"},
+    {"TIME_SECONDS", "seconds"},
     {NULL, NULL}
 };
 
@@ -182,40 +186,40 @@ void table_free(struct Table *table) {
     free(table);
 }
 
-int timeToStr(struct UserNode *user, int seconds, int items, char *buf) {
-    char *item[items];
+char* timeToStr(struct UserNode *user, int seconds, int items, char *buf) {
+    char item[items][MAXLEN];
     int tmp, citem = 0;
     if(citem != items && seconds >= 31536000) { //60*60*24*365 = 31536000
         
         tmp = seconds / 31536000;
-        item[citem++] = build_language_string(user, NULL, (tmp == 1 ? "TIME_YEAR" : "TIME_YEARS"), tmp);
+        sprintf(item[citem++], "%d %s", tmp, get_language_string(user, tmp == 1 ? "TIME_YEAR" : "TIME_YEARS"));
         seconds -= tmp * 31536000;
     }
     if(citem != items && seconds >= 86400) { //60*60*24 = 86400
         tmp = seconds / 86400;
-        item[citem++] = build_language_string(user, NULL, (tmp == 1 ? "TIME_DAY" : "TIME_DAYS"), tmp);
+        sprintf(item[citem++], "%d %s", tmp, get_language_string(user, tmp == 1 ? "TIME_DAY" : "TIME_DAYS"));
         seconds -= tmp * 86400;
     }
     if(citem != items && seconds >= 3600) { //60*60 = 3600
         tmp = seconds / 3600;
-        item[citem++] = build_language_string(user, NULL, (tmp == 1 ? "TIME_HOUR" : "TIME_HOURS"), tmp);
+        sprintf(item[citem++], "%d %s", tmp, get_language_string(user, tmp == 1 ? "TIME_HOUR" : "TIME_HOURS"));
         seconds -= tmp * 3600;
     }
     if(citem != items && seconds >= 60) {
         tmp = seconds / 60;
-        item[citem++] = build_language_string(user, NULL, (tmp == 1 ? "TIME_MINUTE" : "TIME_MINUTES"), tmp);
+        sprintf(item[citem++], "%d %s", tmp, get_language_string(user, tmp == 1 ? "TIME_MINUTE" : "TIME_MINUTES"));
         seconds -= tmp * 60;
     }
     if(citem != items && seconds >= 1) {
-        item[citem++] = build_language_string(user, NULL, (seconds == 1 ? "TIME_SECOND" : "TIME_SECONDS"), seconds);
+        sprintf(item[citem++], "%d %s", seconds, get_language_string(user, seconds == 1 ? "TIME_SECOND" : "TIME_SECONDS"));
     }
-    if(items == 2) {
+    if(citem == 2) {
         build_language_string(user, buf, "TIME_MASK_2_ITEMS", item[0], item[1]);
-    } else if(items == 3) {
+    } else if(citem == 3) {
         build_language_string(user, buf, "TIME_MASK_3_ITEMS", item[0], item[1], item[2]);
     } else {
         int i, ii, p = 0;
-        for(i = 0; i < items; i++) {
+        for(i = 0; i < citem; i++) {
             for(ii = 0; ii < strlen(item[i]); ii++) {
                 buf[p++] = item[i][ii];
             }
@@ -223,10 +227,81 @@ int timeToStr(struct UserNode *user, int seconds, int items, char *buf) {
         }
         buf[p-1] = '\0';
     }
-    return 1;
+    return buf;
 }
 
-
+int strToTime(struct UserNode *user, char *str) {
+    /*
+    * y = year = 365 days
+    * M = month = 30 days
+    * w = week = 7 days
+    * d = day
+    * h = hour
+    * m = minute
+    * (s) = second
+    */
+    int total_time = 0, cvalue;
+    char *p, tmpchar;
+    int unit_multiplikator;
+    while(*str) {
+        p = str;
+        while(*p && isdigit(*p)) //get the value
+            p++;
+        tmpchar = *p;
+        *p = '\0';
+        cvalue = isdigit(*str) ? atoi(str) : 0;
+        *p = tmpchar;
+        str = p;
+        while(*p && !isdigit(*p)) //get the unit
+            p++;
+        tmpchar = *p;
+        *p = '\0';
+        if(p - str > 1) { //unit has more than one char
+            if(!stricmp(str, "year") || !stricmp(str, "year") || !stricmp(str, get_language_string(user, "TIME_YEAR")) || !stricmp(str, get_language_string(user, "TIME_YEARS")))
+                unit_multiplikator = 31536000; //60*60*24*365 = 31536000
+            else if(!stricmp(str, "month") || !stricmp(str, "months") || !stricmp(str, get_language_string(user, "TIME_MONTH")) || !stricmp(str, get_language_string(user, "TIME_MONTHS")))
+                unit_multiplikator = 2592000; //60*60*24*30 = 2592000
+            else if(!stricmp(str, "week") || !stricmp(str, "weeks") || !stricmp(str, get_language_string(user, "TIME_WEEK")) || !stricmp(str, get_language_string(user, "TIME_WEEKS")))
+                unit_multiplikator = 604800; //60*60*24*7 = 604800
+            else if(!stricmp(str, "day") || !stricmp(str, "days") || !stricmp(str, get_language_string(user, "TIME_DAY")) || !stricmp(str, get_language_string(user, "TIME_DAYS")))
+                unit_multiplikator = 86400; //60*60*24 = 86400
+            else if(!stricmp(str, "hour") || !stricmp(str, "hours") || !stricmp(str, get_language_string(user, "TIME_HOUR")) || !stricmp(str, get_language_string(user, "TIME_HOURS")))
+                unit_multiplikator = 3600; //60*60 = 3600
+            else if(!stricmp(str, "minute") || !stricmp(str, "minutes") || !stricmp(str, "min") || !stricmp(str, "mins") || !stricmp(str, get_language_string(user, "TIME_MINUTE")) || !stricmp(str, get_language_string(user, "TIME_MINUTES")))
+                unit_multiplikator = 60;
+            else
+                unit_multiplikator = 1;
+        } else {
+            switch(*str) {
+                case 'y':
+                    unit_multiplikator = 31536000; //60*60*24*365 = 31536000
+                    break;
+                case 'M':
+                    unit_multiplikator = 2592000; //60*60*24*30 = 2592000
+                    break;
+                case 'w':
+                    unit_multiplikator = 604800; //60*60*24*7 = 604800
+                    break;
+                case 'd':
+                    unit_multiplikator = 86400; //60*60*24 = 86400
+                    break;
+                case 'h':
+                    unit_multiplikator = 3600; //60*60 = 3600
+                    break;
+                case 'm':
+                    unit_multiplikator = 60;
+                    break;
+                default:
+                    unit_multiplikator = 1;
+                    break;
+            }
+        }
+        total_time += (cvalue * unit_multiplikator);
+        *p = tmpchar;
+        str = p;
+    }
+    return total_time;
+}
 
 
 void init_tools() {
diff --git a/tools.h b/tools.h
index f34787d6d0efbb4d452a3299af7095284ee93eba..60a590e5f178c3a71da39e22c50b220ec781f1ce 100644 (file)
--- a/tools.h
+++ b/tools.h
@@ -29,7 +29,8 @@ int table_set_bold(struct Table *table, int collum, int bold);
 char **table_end(struct Table *table);
 void table_free(struct Table *table);
 
-int timeToStr(struct UserNode *user, int seconds, int items, char *buf);
+char* timeToStr(struct UserNode *user, int seconds, int items, char *buf);
+int strToTime(struct UserNode *user, char *str);
 
 void init_tools();