added OPER support (let the bots try to op themselves)
[NeonServV5.git] / src / bots.c
index 353abc5a4d1cf7bd39b520f2499d18dce096d085..7ada74312aac2d40f3dfa190f0d0f7cca9f9494f 100644 (file)
@@ -135,20 +135,25 @@ struct ClientSocket *getChannelBot(struct ChanNode *chan, int botid) {
 }
 
 void requestOp(struct UserNode *user, struct ChanNode *chan) {
-    struct ClientSocket *bot;
+    struct ClientSocket *bot, *userbot = NULL;
     struct ChanUser *chanuser = getChanUser(user, chan);
     char opped = 0;
     if(!chanuser) return;
     if((chanuser->flags & CHANUSERFLAG_OPPED)) return;
     for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) {
-        if((chanuser = getChanUser(bot->user, chan)) != NULL && (chanuser->flags & CHANUSERFLAG_OPPED)) {
+        if(!opped && (chanuser = getChanUser(bot->user, chan)) != NULL && (chanuser->flags & CHANUSERFLAG_OPPED)) {
             opped = 1;
             putsock(bot, "MODE %s +o %s", chan->name, user->nick);
-            break;
+        }
+        if(bot->user == user) {
+            userbot = bot;
         }
     }
     if(!opped) {
-        //self op?
+        if(userbot && (isUserModeSet(user, 'o') || isUserModeSet(user, 'O') || isUserModeSet(user, 'k') || isUserModeSet(user, 'X'))) {
+            putsock(userbot, "MODE %s +o %s", chan->name, user->nick);
+            putsock(userbot, "OPMODE %s +o %s", chan->name, user->nick);
+        }
     }
 }