implemented event logger
[NeonServV5.git] / modcmd.c
index 32011f2a6c82eb58d4001720499828b7465ce28d..c3868ea7e8fb138fb17c50404d2caa2c29ee4569 100644 (file)
--- a/modcmd.c
+++ b/modcmd.c
@@ -10,6 +10,7 @@
 #include "lang.h"
 #include "mysqlConn.h"
 #include "DBHelper.h"
+#include "EventLogger.h"
 
 struct trigger_callback {
     int botid;
@@ -224,6 +225,7 @@ static void handle_command_async(struct ClientSocket *client, struct UserNode *u
     MYSQL_RES *res;
     MYSQL_ROW row;
     int uaccess;
+    int eventflags = (cbind->func->flags & (CMDFLAG_LOG | CMDFLAG_OPLOG));
     if((cbind->func->flags & CMDFLAG_REQUIRE_AUTH) && !(user->flags & USERFLAG_ISAUTHED)) {
         reply(tmp_text_client, user, "MODCMD_AUTH_REQUIRED");
         return;
@@ -293,8 +295,10 @@ static void handle_command_async(struct ClientSocket *client, struct UserNode *u
                 chan->flags |= CHANFLAG_CHAN_REGISTERED;
                 chan->channel_id = atoi(row[0]);
                 if((sent_chan && sent_chan == chan) || access_count || minaccess) {
-                    uaccess = getChannelAccess(user, chan, 1);
-                    if(uaccess < minaccess) {
+                    uaccess = getChannelAccess(user, chan, 0);
+                    if(uaccess < minaccess && isGodMode(user)) {
+                        eventflags |= CMDFLAG_OPLOG;
+                    } else if(uaccess < minaccess) {
                         //ACCESS DENIED
                         reply(tmp_text_client, user, "MODCMD_ACCESS_DENIED");
                         return;
@@ -304,9 +308,13 @@ static void handle_command_async(struct ClientSocket *client, struct UserNode *u
                         defaults = mysql_fetch_row(mysql_use());
                     }
                     if(sent_chan && (sent_chan == chan) && uaccess < (row[1] ? atoi(row[1]) : atoi(defaults[1]))) {
-                        //PUBCMD
-                        reply(tmp_text_client, user, "MODCMD_PUBCMD", chan->name);
-                        return;
+                        if(isGodMode(user)) {
+                            eventflags |= CMDFLAG_OPLOG;
+                        } else {
+                            //PUBCMD
+                            reply(tmp_text_client, user, "MODCMD_PUBCMD", chan->name);
+                            return;
+                        }
                     }
                     int i;
                     for(i = 0; i < access_count; i++) {
@@ -315,8 +323,12 @@ static void handle_command_async(struct ClientSocket *client, struct UserNode *u
                             defaults = mysql_fetch_row(mysql_use());
                         }
                         if(uaccess < (row[2+i] ? atoi(row[2+i]) : atoi(defaults[2+i]))) {
-                            reply(tmp_text_client, user, "MODCMD_ACCESS_DENIED");
-                            return;
+                            if(isGodMode(user)) {
+                                eventflags |= CMDFLAG_OPLOG;
+                            } else {
+                                reply(tmp_text_client, user, "MODCMD_ACCESS_DENIED");
+                                return;
+                            }
                         }
                     }
                 }
@@ -338,7 +350,8 @@ static void handle_command_async(struct ClientSocket *client, struct UserNode *u
         reply(tmp_text_client, user, "MODCMD_PRIVILEGED", cbind->cmd);
         return;
     }
-    cbind->func->func(client, user, chan, argv, argc);
+    struct Event *event = createEvent(client, user, chan, cbind->func->name, argv, argc, eventflags);
+    cbind->func->func(client, user, chan, argv, argc, event);
 }
 
 static void got_chanmsg(struct UserNode *user, struct ChanNode *chan, char *message) {