added recover function to NeonBackup (used to recover Bot privileges when NeonBackup...
authorpk910 <philipp@zoelle1.de>
Sun, 1 Jul 2012 13:35:22 +0000 (15:35 +0200)
committerpk910 <philipp@zoelle1.de>
Sun, 1 Jul 2012 13:45:46 +0000 (15:45 +0200)
src/ClientSocket.h
src/modules/NeonBackup.mod/bot_NeonBackup.c
src/modules/NeonFun.mod/bot_NeonFun.c
src/modules/NeonHelp.mod/bot_NeonHelp.c
src/modules/NeonServ.mod/bot_NeonServ.c
src/modules/NeonSpam.mod/bot_NeonSpam.c

index 9261be3a62ea6239fb169fec7855e1d23f9d33bf..a1f87da68bc0bdfa208aa208a9a528eaf9848f65 100644 (file)
@@ -32,6 +32,7 @@
 #define SOCKET_FLAG_SILENT         0x400
 #define SOCKET_FLAG_CHANGENICK     0x800
 #define SOCKET_FLAG_REQUEST_INVITE 0x1000
+#define SOCKET_FLAG_REQUEST_OP     0x2000
 
 #define SOCKET_HAVE_BOTCLASSVALUE1 0x10000000
 #define SOCKET_HAVE_BOTCLASSVALUE2 0x20000000
index 9738afbdcb80cd5747dc24fdcd15c003cb4f3e9a..19cffbde99cd6caafcbe9e4e2c6c05f9bcd44939 100644 (file)
@@ -96,7 +96,7 @@ static void start_bots(int type) {
             client->flags |= (strcmp(row[6], "0") ? SOCKET_FLAG_PREFERRED : 0);
             client->flags |= (strcmp(row[8], "0") ? SOCKET_FLAG_USE_QUEUE : 0);
             client->flags |= (strcmp(row[9], "0") ? SOCKET_FLAG_SSL : 0);
-            client->flags |= SOCKET_FLAG_REQUEST_INVITE;
+            client->flags |= SOCKET_FLAG_REQUEST_INVITE | SOCKET_FLAG_REQUEST_OP;
             client->botid = BOTID;
             client->clientid = atoi(row[7]);
             connect_socket(client);
@@ -124,7 +124,23 @@ static void start_bots(int type) {
 }
 
 void neonbackup_recover_chan(struct ChanNode *chan) {
-    
+    struct ClientSocket *bot = getChannelBot(chan, BOTID); // prefer backup bot ;)
+    struct ChanUser *chanuser = (bot ? getChanUser(bot->user, chan) : NULL);
+    if(!chanuser || !(chanuser->flags & CHANUSERFLAG_OPPED)) {
+        //search an opped bot
+        for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) {
+            if((chanuser = getChanUser(bot->user, chan)) && (chanuser->flags & CHANUSERFLAG_OPPED))
+                break;
+        }
+    }
+    if(!bot) //no opped bots present... channel can't be recovered
+        return;
+    struct ClientSocket *target;
+    for(target = getBots(SOCKET_FLAG_READY, NULL); target; target = getBots(SOCKET_FLAG_READY, target)) {
+        if((target->flags & SOCKET_FLAG_REQUEST_OP) && (chanuser = getChanUser(target->user, chan)) && !(chanuser->flags & CHANUSERFLAG_OPPED)) {
+            putsock(bot, "MODE %s +o %s", chan->name, target->user->nick);
+        }
+    }
 }
 
 static void neonbackup_event_join(struct ChanUser *chanuser) {
index 75afbbad825c500f6153a7af86287c0e899b8494..3679234aea712bdeeda7ba8eb8c6aae8fa48fca4 100644 (file)
@@ -101,7 +101,7 @@ static void start_bots(int type) {
             client->flags |= (strcmp(row[8], "0") ? SOCKET_FLAG_USE_QUEUE : 0);
             client->flags |= (strcmp(row[9], "0") ? SOCKET_FLAG_SSL : 0);
             client->flags |= SOCKET_FLAG_SILENT;
-            client->flags |= SOCKET_FLAG_REQUEST_INVITE;
+            client->flags |= SOCKET_FLAG_REQUEST_INVITE | SOCKET_FLAG_REQUEST_OP;
             client->botid = BOTID;
             client->clientid = atoi(row[7]);
             connect_socket(client);
index 07b6a975ecbc684117534b401fa9040d085e1cf4..ac363007bdeb989d725bfa621a3e5ea008dce56f 100644 (file)
@@ -127,7 +127,7 @@ static void start_bots(int type) {
             client->flags |= (strcmp(row[8], "0") ? SOCKET_FLAG_USE_QUEUE : 0);
             client->flags |= (strcmp(row[9], "0") ? SOCKET_FLAG_SSL : 0);
             client->flags |= SOCKET_FLAG_SILENT;
-            client->flags |= SOCKET_FLAG_REQUEST_INVITE;
+            client->flags |= SOCKET_FLAG_REQUEST_INVITE | SOCKET_FLAG_REQUEST_OP;
             client->botid = BOTID;
             client->clientid = atoi(row[7]);
             connect_socket(client);
index 4d377e4e2e5033e8604c4712e92cab495ab882b6..89f298bdcf8d60fab2465236e314c4d66970e270 100644 (file)
@@ -473,7 +473,7 @@ static void start_bots(int type) {
             client->flags |= (strcmp(row[6], "0") ? SOCKET_FLAG_PREFERRED : 0);
             client->flags |= (strcmp(row[8], "0") ? SOCKET_FLAG_USE_QUEUE : 0);
             client->flags |= (strcmp(row[9], "0") ? SOCKET_FLAG_SSL : 0);
-            client->flags |= SOCKET_FLAG_REQUEST_INVITE;
+            client->flags |= SOCKET_FLAG_REQUEST_INVITE | SOCKET_FLAG_REQUEST_OP;
             client->botid = BOTID;
             client->clientid = atoi(row[7]);
             connect_socket(client);
index 16e0016a3dc57bdea26a5a1267f6a6d62b1018d4..b568facd47536b4901cc8fffe8500ddd0507e12d 100644 (file)
@@ -160,7 +160,7 @@ static void start_bots(int type) {
             client->flags |= (strcmp(row[6], "0") ? SOCKET_FLAG_PREFERRED : 0);
             client->flags |= (strcmp(row[8], "0") ? SOCKET_FLAG_USE_QUEUE : 0);
             client->flags |= (strcmp(row[9], "0") ? SOCKET_FLAG_SSL : 0);
-            client->flags |= SOCKET_FLAG_REQUEST_INVITE;
+            client->flags |= SOCKET_FLAG_REQUEST_INVITE | SOCKET_FLAG_REQUEST_OP;
             client->botid = BOTID;
             client->clientid = atoi(row[7]);
             connect_socket(client);