From 182ddeec434b694a35901ff714fb177ea76d4f80 Mon Sep 17 00:00:00 2001 From: pk910 Date: Fri, 4 Nov 2011 21:32:02 +0100 Subject: [PATCH] added cmd_staff --- Makefile.am | 1 + src/UserNode.c | 14 ++++++++++++ src/UserNode.h | 1 + src/bot_NeonServ.c | 2 +- src/cmd_global.h | 1 + src/cmd_global_staff.c | 52 ++++++++++++++++++++++++++++++++++++++++++ src/commands.c | 1 + 7 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 src/cmd_global_staff.c diff --git a/Makefile.am b/Makefile.am index d33ab4b..0c8c81d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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 diff --git a/src/UserNode.c b/src/UserNode.c index 7be5ebd..e4d73ca 100644 --- a/src/UserNode.c +++ b/src/UserNode.c @@ -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; diff --git a/src/UserNode.h b/src/UserNode.h index ef1332c..e7932fd 100644 --- a/src/UserNode.h +++ b/src/UserNode.h @@ -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); diff --git a/src/bot_NeonServ.c b/src/bot_NeonServ.c index 7e6b9be..2b557dd 100644 --- a/src/bot_NeonServ.c +++ b/src/bot_NeonServ.c @@ -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} }; diff --git a/src/cmd_global.h b/src/cmd_global.h index 6ef1706..8a0635d 100644 --- a/src/cmd_global.h +++ b/src/cmd_global.h @@ -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 index 0000000..d4bdabe --- /dev/null +++ b/src/cmd_global_staff.c @@ -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 . + */ + +#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]); + } + } + } +} diff --git a/src/commands.c b/src/commands.c index 9fe3005..f088dd2 100644 --- a/src/commands.c +++ b/src/commands.c @@ -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) -- 2.20.1