--- /dev/null
+
+/*
+* 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));
+}
+
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}
};
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];
}
}
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() {