Przeglądaj źródła

* Moved the do_take() call into gotmode()
* do_take now supports modesperline


svn: 1199

Bryan Drewery 22 lat temu
rodzic
commit
59aecf4487
3 zmienionych plików z 17 dodań i 15 usunięć
  1. 3 0
      doc/UPDATES
  2. 2 2
      src/mod/irc.mod/chan.c
  3. 12 13
      src/mod/irc.mod/mode.c

+ 3 - 0
doc/UPDATES

@@ -24,6 +24,9 @@ This is a summary of ChangeLog basically.
 * Renamed 'op-time-slack' to 'cookie-time-slack'
 * SIGHUP now restarts bot.
 * Fixed possible SEGFAULT on bot timeout.
+* Sped up mode parsing
+* +take is now enforced much quicker (take() moved up ~300 lines of code)
+* +take now uses MAXMODES-1 deops
 
 1.1.9
 

+ 2 - 2
src/mod/irc.mod/chan.c

@@ -1104,8 +1104,8 @@ do_take(struct chanset_t *chan)
     if (to_op[0])
       op = newsplit(&to_op);
 
-    for (i = 0; i < 4; i ++) {
-      if (to_deop[0] && ((i < 3) || (!op))) {
+    for (i = 0; i < modesperline; i ++) {
+      if (to_deop[0] && ((i < (modesperline - 1)) || (!op))) {
         deopn++; 
         strcat(deops, newsplit(&to_deop)); 
         strcat(deops, " "); 

+ 12 - 13
src/mod/irc.mod/mode.c

@@ -455,14 +455,9 @@ got_op(struct chanset_t *chan, char *nick, char *from,
   }
 
   /* Did *I* just get opped? */
-  if (!me_op(chan) && match_my_nick(who)) {
-    /* take asap. */
-    if (channel_take(chan))
-      do_take(chan);
-    else
-      check_chan = 1;
-  }
-
+  if (!me_op(chan) && match_my_nick(who))
+    check_chan = 1;
+  
   if (!m->user) {
     simple_sprintf(s, "%s!%s", m->nick, m->userhost);
     u = get_user_by_host(s);
@@ -902,9 +897,7 @@ gotmode(char *from, char *msg)
       if (!isserver) {
         char **modes = NULL;
         char tmp[1024] = "", *wptr = NULL, *p = NULL, work[1024] = "";
-        int modecnt = 0, i = 0, n = 0, ops = 0, deops = 0, bans = 0, unbans = 0;
-
-
+        int modecnt = 0, i = 0, n = 0, ops = 0, deops = 0, bans = 0, unbans = 0, me_opped = 0;
 
         /* Split up the mode: #chan modes param param param param */
         strncpyz(work, msg, sizeof(work));
@@ -926,9 +919,11 @@ gotmode(char *from, char *msg)
               sprintf(modes[modecnt], "%c%c %s", sign, p[0], mp);
               modecnt++;
               if (p[0] == 'o') {
-                if (sign == '+')
+                if (sign == '+') {
                   ops++;
-                else
+                  if (match_my_nick(mp))
+                    me_opped++;
+                } else
                   deops++;
               }
               if (p[0] == 'b') {
@@ -946,6 +941,10 @@ gotmode(char *from, char *msg)
           p++;
         }
 
+        /* take ASAP */
+        if (me_opped && !me_op(chan) && channel_take(chan))
+          do_take(chan);
+
         /* Now we got modes[], chan, u, nick, hfrom, and count of each relevant mode */
 
         /* check for mdop */