added cmd_staff
authorpk910 <philipp@zoelle1.de>
Fri, 4 Nov 2011 20:32:02 +0000 (21:32 +0100)
committerpk910 <philipp@zoelle1.de>
Fri, 4 Nov 2011 20:39:17 +0000 (21:39 +0100)
Makefile.am
src/UserNode.c
src/UserNode.h
src/bot_NeonServ.c
src/cmd_global.h
src/cmd_global_staff.c [new file with mode: 0644]
src/commands.c

index d33ab4b5b7714423d0a8a4053c7a3456a431579b..0c8c81d881ac0dea81a06e65b88bc46f97316caf 100644 (file)
@@ -113,6 +113,7 @@ neonserv_SOURCES = src/version.c \
       src/cmd_neonserv_extscript.c \
       src/cmd_neonspam_set.c \
       src/cmd_neonserv_noregister.c \
+      src/cmd_global_staff.c \
       src/cmd_funcmds.c \
       src/lib/ini.c
 
index 7be5ebdac2115a29ec6eeb6df69af88776680901..e4d73cac70bc8e33817c34f3657053aa61c209bf 100644 (file)
@@ -159,6 +159,20 @@ struct UserNode* getAllUsers(struct UserNode *last) {
         return last->next;
 }
 
+struct UserNode* getUsersWithAuth(const char *auth, struct UserNode *last) {
+    int cindex = (last ? get_nicklist_entry(last->nick[0]) : 0);
+    struct UserNode *cuser = last;
+    while(cindex <= VALID_NICK_CHARS_FIRST_LEN) {
+        for(cuser = (cuser ? cuser->next : userList[cindex]); cuser; cuser = cuser->next) {
+            if((cuser->flags & USERFLAG_ISAUTHED) && !strcmp(cuser->auth, auth))
+                return cuser;
+        }
+        cindex++;
+        cuser = NULL;
+    }
+    return NULL;
+}
+
 int getUserCount() {
     int i, count = 0;
     struct UserNode *user;
index ef1332c76975ea231efc649189d485a48fde4a77..e7932fd0197af12a86d46da04b0a8f172a4de418 100644 (file)
@@ -64,6 +64,7 @@ int countUsersWithHost(char *host);
 char *getAuthFakehost(char *auth);
 struct UserNode* searchUserByNick(const char *nick);
 struct UserNode* getAllUsers(struct UserNode *last);
+struct UserNode* getUsersWithAuth(const char *auth, struct UserNode *last);
 int getUserCount();
 struct UserNode* addUser(const char *nick);
 struct UserNode* addUserMask(const char *mask);
index 7e6b9beedf57e79ef3f93c6fa9826564a85ee936..2b557ddce9876631adf43c1e7d30c2bc9431a638 100644 (file)
@@ -329,7 +329,7 @@ static const struct default_language_entry msgtab[] = {
     {"NS_DNR_USER", "Issuer"},
     {"NS_DNR_EXPIRES", "Expires"},
     {"NS_DNR_REASON", "Reason"},
-    
+    {"NS_STAFF_LOGGEDIN", "Logged in as"},
     {NULL, NULL}
 };
 
index 6ef1706347940ba5a5ff652dc0a21d934392349a..8a0635d8753e276d28efd7f857be122696a15f71 100644 (file)
@@ -49,6 +49,7 @@ CMD_BIND(global_cmd_register);
 CMD_BIND(global_cmd_reloadlang);
 CMD_BIND(global_cmd_say);
 CMD_BIND(global_cmd_setaccess);
+CMD_BIND(global_cmd_staff);
 CMD_BIND(global_cmd_unbind);
 CMD_BIND(global_cmd_unregister);
 CMD_BIND(global_cmd_version);
diff --git a/src/cmd_global_staff.c b/src/cmd_global_staff.c
new file mode 100644 (file)
index 0000000..d4bdabe
--- /dev/null
@@ -0,0 +1,52 @@
+/* cmd_global_staff.c - NeonServ v5.2
+ * Copyright (C) 2011  Philipp Kreil (pk910)
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License 
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. 
+ */
+
+#include "cmd_global.h"
+
+/*
+* no arguments
+*/
+
+CMD_BIND(global_cmd_staff) {
+    MYSQL_RES *res, *res2;
+    MYSQL_ROW row, row2;
+    printf_mysql_query("SELECT `rank_id`, `rank_name` FROM `support_ranks` ORDER BY `rank_order` ASC");
+    res = mysql_use();
+    while ((row = mysql_fetch_row(res)) != NULL) {
+        printf_mysql_query("SELECT `user_user`, `user_god` FROM `users` WHERE `user_rank` = '%s'", row[0]);
+        res2 = mysql_use();
+        if(mysql_num_rows(res2)) {
+            reply(getTextBot(), user, "\002%s\002", row[1]);
+            while ((row2 = mysql_fetch_row(res2)) != NULL) {
+                if(strcmp(row2[1], "0")) {
+                    //god enabled - show nicks
+                    char loggedinBuf[MAXLEN];
+                    int loggedinPos = 0;
+                    struct UserNode *cuser;
+                    for(cuser = getUsersWithAuth(row2[0], NULL); cuser; cuser = getUsersWithAuth(row2[0], cuser)) {
+                        loggedinPos += sprintf(loggedinBuf+loggedinPos, (loggedinPos ? ", %s" : "%s"), cuser->nick);
+                    }
+                    if(loggedinPos)
+                        reply(getTextBot(), user, "  %s (%s: %s)", row2[0], get_language_string(user, "NS_STAFF_LOGGEDIN"), loggedinBuf);
+                    else
+                        reply(getTextBot(), user, "  %s", row2[0]);
+                } else
+                    reply(getTextBot(), user, "  %s", row2[0]);
+            }
+        }
+    }
+}
index 9fe300575e9894786a958b228a1a36e0b84b0fc8..f088dd26841b01f23d68fc69bc71e35e742a79e9 100644 (file)
@@ -30,6 +30,7 @@ void register_commands() {
     USER_COMMAND("netinfo",      global_cmd_netinfo,   0, NULL,                   0);
     USER_COMMAND("commands",     global_cmd_commands,  0, NULL,                   0);
     USER_COMMAND("command",      global_cmd_command,   1, NULL,                   0);
+    USER_COMMAND("staff",        global_cmd_staff,     0, NULL,                   0);
     #undef USER_COMMAND
     
     #define OPER_COMMAND(NAME,FUNCTION,PARAMCOUNT,GACCESS,FLAGS) register_command(0, NAME, FUNCTION, PARAMCOUNT, NULL, GACCESS, FLAGS)