]> jfr.im git - irc/quakenet/newserv.git/commitdiff
Added support for +T and +M modes (mode tracking only - we don't actually do
authorsplidge <redacted>
Wed, 30 May 2007 21:59:19 +0000 (22:59 +0100)
committersplidge <redacted>
Wed, 30 May 2007 21:59:19 +0000 (22:59 +0100)
anything with them, but then I don't think it's needed on services).

channel/channel.c
channel/channel.h
channel/channelhandlers.c

index 03ec848f3feed77b531bee0a26e5a8bc15baf71b..be74c3431bad1ca28b2155d841fa6caab0ab7213 100644 (file)
@@ -35,6 +35,8 @@ const flag cmodeflags[] = {
    { 'D', CHANMODE_DELJOINS    },
    { 'u', CHANMODE_NOQUITMSG   },
    { 'N', CHANMODE_NONOTICE    },
+   { 'M', CHANMODE_MODNOAUTH   },
+   { 'T', CHANMODE_SINGLETARG  },
    { '\0', 0 } };   
 
 void channelstats(int hooknum, void *arg);
index 913a9c08a7cf56eaa1fb83d5e08c07853934e55f..11cc3eb034c4731c19e6d45eae4da0e9f1105301 100644 (file)
 #define CHANMODE_DELJOINS   0x0800
 #define CHANMODE_NOQUITMSG  0x1000
 #define CHANMODE_NONOTICE   0x2000
+#define CHANMODE_MODNOAUTH  0x4000
+#define CHANMODE_SINGLETARG 0x8000
 
-#define CHANMODE_ALL        0x3FFF
+#define CHANMODE_ALL        0xFFFF
 
 #define CHANBAN_NICKEXACT   0x0001  /* Ban includes an exact nick (no wildcards) */
 #define CHANBAN_NICKMASK    0x0002  /* Ban includes a nick mask with wildcards */
@@ -63,6 +65,8 @@
 #define IsDelJoins(x)   ((x)->flags & CHANMODE_DELJOINS)
 #define IsNoQuitMsg(x)  ((x)->flags & CHANMODE_NOQUITMSG)
 #define IsNoNotice(x)   ((x)->flags & CHANMODE_NONOTICE)
+#define IsModNoAuth(x)  ((x)->flags & CHANMODE_MODNOAUTH)
+#define IsSingleTarg(x) ((x)->flags & CHANMODE_SINGLETARG)
 
 #define SetNoExtMsg(x)   ((x)->flags |= CHANMODE_NOEXTMSG)
 #define SetTopicLimit(x) ((x)->flags |= CHANMODE_TOPICLIMIT)
@@ -78,6 +82,8 @@
 #define SetDelJoins(x)   ((x)->flags |= CHANMODE_DELJOINS)
 #define SetNoQuitMsg(x)  ((x)->flags |= CHANMODE_NOQUITMSG)
 #define SetNoNotice(x)   ((x)->flags |= CHANMODE_NONOTICE)
+#define SetModNoAuth(x)  ((x)->flags |= CHANMODE_MODNOAUTH)
+#define SetSingleTarg(x) ((x)->flags |= CHANMODE_SINGLETARG)
 
 #define ClearNoExtMsg(x)   ((x)->flags &= ~CHANMODE_NOEXTMSG)
 #define ClearTopicLimit(x) ((x)->flags &= ~CHANMODE_TOPICLIMIT)
@@ -93,6 +99,8 @@
 #define ClearDelJoins(x)   ((x)->flags &= ~CHANMODE_DELJOINS)
 #define ClearNoQuitMsg(x)  ((x)->flags &= ~CHANMODE_NOQUITMSG)
 #define ClearNoNotice(x)   ((x)->flags &= ~CHANMODE_NONOTICE)
+#define ClearModNoAuth(x)  ((x)->flags &= ~CHANMODE_MODNOAUTH)
+#define ClearSingleTarg(x) ((x)->flags &= ~CHANMODE_SINGLETARG)
 
 #define     CUMODE_OP      0x80000000
 #define     CUMODE_VOICE   0x40000000
index d4a2745e462ae2d2d5f80ce6ff11e0e6b9272786..eeea4651c97ba53e2c84c8e63d4b4aad3a1672da 100644 (file)
@@ -652,6 +652,16 @@ int handlemodemsg(void *source, int cargc, char **cargv) {
         changes |= MODECHANGE_MODES;
         break;
         
+      case 'M':
+        if (dir) { SetModNoAuth(cp); } else { ClearModNoAuth(cp); }
+        changes |= MODECHANGE_MODES;
+        break;
+      
+      case 'T':
+        if (dir) { SetSingleTarg(cp); } else { ClearSingleTarg(cp); }
+        changes |= MODECHANGE_MODES;
+        break;
+        
       /* Parameter modes: advance parameter and possibly read it in */    
     
       case 'l':
@@ -845,6 +855,16 @@ int handleclearmodemsg(void *source, int cargc, char **cargv) {
         ClearNoNotice(cp);
         changes |= MODECHANGE_MODES;
         break;
+        
+      case 'M':
+        ClearModNoAuth(cp);
+        changes |= MODECHANGE_MODES;
+        break;
+      
+      case 'T':
+        ClearSingleTarg(cp);
+        changes |= MODECHANGE_MODES;
+        break;
 
       case 'b':
         clearallbans(cp);