changed Makefile; build all commands as an own file
[NeonServV5.git] / cmd_neonserv_clvl.c
index 9d4e7e44c92b62b24c02c75606044c9e1e265ecd..ff386b22d040d32f370aadbc741d56411efc6d7e 100644 (file)
@@ -1,36 +1,41 @@
 
+#include "cmd_neonserv.h"
+
 /*
 * argv[0] - nick / *auth
 * argv[1] - access
 */
 static USERAUTH_CALLBACK(neonserv_cmd_clvl_nick_lookup);
-static void neonserv_cmd_clvl_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, char *nick, char *auth, int caccess);
+static void neonserv_cmd_clvl_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *nick, char *auth, int caccess);
 
 struct neonserv_cmd_clvl_cache {
     struct ClientSocket *client, *textclient;
     struct UserNode *user;
     struct ChanNode *chan;
+    struct Event *event;
     char *nick;
     int access;
 };
 
-static CMD_BIND(neonserv_cmd_clvl) {
+CMD_BIND(neonserv_cmd_clvl) {
     int caccess;
-    check_mysql();
-    checkChannelAccess(user, chan, "channel_canclvl", 1, 0);
     caccess = atoi(argv[1]);
     if(caccess <= 0 || caccess > 500) {
         reply(getTextBot(), user, "NS_INVALID_ACCESS", caccess);
         return;
     }
-    if(caccess >= getChannelAccess(user, chan, 1)) {
-        reply(getTextBot(), user, "NS_ACCESS_OUTRANKED");
-        return;
+    if(caccess >= getChannelAccess(user, chan, 0)) {
+        if(isGodMode(user)) {
+            event->flags |= CMDFLAG_OPLOG;
+        } else {
+            reply(getTextBot(), user, "NS_ACCESS_OUTRANKED");
+            return;
+        }
     }
     if(argv[0][0] == '*') {
         //we've got an auth
         argv[0]++;
-        neonserv_cmd_clvl_async1(client, getTextBot(), user, chan, argv[0], argv[0], caccess);
+        neonserv_cmd_clvl_async1(client, getTextBot(), user, chan, event, argv[0], argv[0], caccess);
     } else {
         struct UserNode *cuser = getUserByNick(argv[0]);
         if(!cuser) {
@@ -38,7 +43,7 @@ static CMD_BIND(neonserv_cmd_clvl) {
             cuser->flags |= USERFLAG_ISTMPUSER;
         }
         if(cuser->flags & USERFLAG_ISAUTHED) {
-            neonserv_cmd_clvl_async1(client, getTextBot(), user, chan, argv[0], cuser->auth, caccess);
+            neonserv_cmd_clvl_async1(client, getTextBot(), user, chan, event, argv[0], cuser->auth, caccess);
         } else {
             struct neonserv_cmd_clvl_cache *cache = malloc(sizeof(*cache));
             if (!cache) {
@@ -49,6 +54,7 @@ static CMD_BIND(neonserv_cmd_clvl) {
             cache->textclient = getTextBot();
             cache->user = user;
             cache->chan = chan;
+            cache->event = event;
             cache->nick = strdup(argv[0]);
             cache->access = caccess;
             get_userauth(cuser, neonserv_cmd_clvl_nick_lookup, cache);
@@ -67,12 +73,12 @@ static USERAUTH_CALLBACK(neonserv_cmd_clvl_nick_lookup) {
         reply(cache->textclient, cache->user, "NS_USER_NEED_AUTH", cache->nick);
     }
     else
-        neonserv_cmd_clvl_async1(cache->client, cache->textclient, cache->user, cache->chan, user->nick, user->auth, cache->access);
+        neonserv_cmd_clvl_async1(cache->client, cache->textclient, cache->user, cache->chan, cache->event, user->nick, user->auth, cache->access);
     free(cache->nick);
     free(cache);
 }
 
-static void neonserv_cmd_clvl_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, char *nick, char *auth, int caccess) {
+static void neonserv_cmd_clvl_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *nick, char *auth, int caccess) {
     //we've got a valid auth now...
     MYSQL_RES *res;
     MYSQL_ROW row;
@@ -92,6 +98,7 @@ static void neonserv_cmd_clvl_async1(struct ClientSocket *client, struct ClientS
             }
             printf_mysql_query("UPDATE `chanusers` SET `chanuser_access` = '%d' WHERE `chanuser_id` = '%s'", caccess, row[1]);
             reply(textclient, user, "NS_CLVL_DONE", nick, caccess, chan->name);
+            logEvent(event);
             return;
         }
     }