added support ranking system
[NeonServV5.git] / src / cmd_neonserv_setrank.c
diff --git a/src/cmd_neonserv_setrank.c b/src/cmd_neonserv_setrank.c
new file mode 100644 (file)
index 0000000..7c86661
--- /dev/null
@@ -0,0 +1,96 @@
+
+#include "cmd_neonserv.h"
+
+/*
+* argv[0]   rank id
+* argv[1]   setting
+* argv[2-*] value
+*/
+
+static void neonserv_cmd_setrank_name(struct UserNode *user, int rank_id, char *current, char *value);
+static void neonserv_cmd_setrank_info(struct UserNode *user, int rank_id, char *current, char *value);
+static void neonserv_cmd_setrank_access(struct UserNode *user, int rank_id, char *current, char *value);
+static void neonserv_cmd_setrank_order(struct UserNode *user, int rank_id, char *current, char *value);
+
+CMD_BIND(neonserv_cmd_setrank) {
+    MYSQL_RES *res;
+    MYSQL_ROW row;
+    printf_mysql_query("SELECT `rank_id`, `rank_name`, `rank_info`, `rank_access`, `rank_order` FROM `support_ranks` WHERE `rank_id` = '%s'", escape_string(argv[0]));
+    res = mysql_use();
+    if ((row = mysql_fetch_row(res)) == NULL) {
+        reply(getTextBot(), user, "NS_SETRANK_NOT_FOUND", argv[0]);
+        return;
+    }
+    if(argc < 2) {
+        reply(getTextBot(), user, "NS_SETRANK_HEAD", row[0]);
+        reply(getTextBot(), user, "\002NAME   \002 %s", row[1]);
+        reply(getTextBot(), user, "\002INFO   \002 %s", row[2]);
+        reply(getTextBot(), user, "\002ACCESS \002 %s", row[3]);
+        reply(getTextBot(), user, "\002ORDER  \002 %s", row[4]);
+    } else {
+        char *value = NULL;
+        if(argc > 2) {
+            value = merge_argv(argv, 2, argc);
+        }
+        if(!stricmp(argv[1], "name"))
+            neonserv_cmd_setrank_name(user, atoi(row[0]), row[1], value);
+        else if(!stricmp(argv[1], "info"))
+            neonserv_cmd_setrank_info(user, atoi(row[0]), row[2], value);
+        else if(!stricmp(argv[1], "access"))
+            neonserv_cmd_setrank_access(user, atoi(row[0]), row[3], value);
+        else if(!stricmp(argv[1], "order"))
+            neonserv_cmd_setrank_order(user, atoi(row[0]), row[4], value);
+        else
+            reply(getTextBot(), user, "NS_SETRANK_UNKNOWN_SETTING", row[1]);
+    }
+}
+
+static void neonserv_cmd_setrank_name(struct UserNode *user, int rank_id, char *current, char *value) {
+    if(value && stricmp(value, current)) {
+        MYSQL_RES *res;
+        MYSQL_ROW row;
+        printf_mysql_query("SELECT `rank_id` FROM `support_ranks` WHERE `rank_name` = '%s'", escape_string(value));
+        res = mysql_use();
+        if ((row = mysql_fetch_row(res)) != NULL) {
+            reply(getTextBot(), user, "NS_ADDRANK_EXISTS", value);
+            return;
+        }
+        printf_mysql_query("UPDATE `support_ranks` SET `rank_name` = '%s' WHERE `rank_id` = '%d'", escape_string(value), rank_id);
+        current = value;
+    }
+    reply(getTextBot(), user, "\002NAME\002 %s", current);
+}
+
+static void neonserv_cmd_setrank_info(struct UserNode *user, int rank_id, char *current, char *value) {
+    if(value && stricmp(value, current)) {
+        printf_mysql_query("UPDATE `support_ranks` SET `rank_info` = '%s' WHERE `rank_id` = '%d'", escape_string(value), rank_id);
+        current = value;
+    }
+    reply(getTextBot(), user, "\002INFO\002 %s", current);
+}
+
+static void neonserv_cmd_setrank_access(struct UserNode *user, int rank_id, char *current, char *value) {
+    if(value && stricmp(value, current)) {
+        int new_access = atoi(value);
+        if(new_access <= 0 || new_access > 1000) {
+            reply(getTextBot(), user, "NS_INVALID_ACCESS", new_access);
+            return;
+        }
+        printf_mysql_query("UPDATE `support_ranks` SET `rank_access` = '%d' WHERE `rank_id` = '%d'", new_access, rank_id);
+        current = value;
+    }
+    reply(getTextBot(), user, "\002ACCESS\002 %s", current);
+}
+
+static void neonserv_cmd_setrank_order(struct UserNode *user, int rank_id, char *current, char *value) {
+    if(value && stricmp(value, current)) {
+        int new_order = atoi(value);
+        if(new_order <= 0 || new_order > 99) {
+            reply(getTextBot(), user, "NS_SETRANK_ORDER_INVALID", new_order);
+            return;
+        }
+        printf_mysql_query("UPDATE `support_ranks` SET `rank_order` = '%d' WHERE `rank_id` = '%d'", new_order, rank_id);
+        current = value;
+    }
+    reply(getTextBot(), user, "\002ORDER\002 %s", current);
+}