فهرست منبع

Split ROLE_VOICE into ROLE_OP and ROLE_INVITE

Bryan Drewery 10 سال پیش
والد
کامیت
e53d8cccf6
3فایلهای تغییر یافته به همراه6 افزوده شده و 6 حذف شده
  1. 1 0
      src/flags.cc
  2. 1 0
      src/flags.h
  3. 4 6
      src/mod/irc.mod/chan.cc

+ 1 - 0
src/flags.cc

@@ -51,6 +51,7 @@ struct rolecount role_counts[] = {
   {"revenge",	ROLE_REVENGE,	3},
   {"chanmode",	ROLE_CHANMODE,	1},
   {"protect",	ROLE_PROTECT,	2},
+  {"invite",	ROLE_INVITE,	1},
   {NULL,	0,		0},
 };
 

+ 1 - 0
src/flags.h

@@ -78,6 +78,7 @@ extern struct rolecount role_counts[];
 #define ROLE_REVENGE  BIT9
 #define ROLE_CHANMODE BIT10
 #define ROLE_PROTECT  BIT11
+#define ROLE_INVITE   BIT12
 
 #define USER_DEFAULT	0
 

+ 4 - 6
src/mod/irc.mod/chan.cc

@@ -1222,7 +1222,7 @@ static void check_this_member(struct chanset_t *chan, char *nick, struct flag_re
        (!loading && userlist && chan_bitch(chan) && !chk_op(*fr, chan)) ) ) {
     /* if (target_priority(chan, m, 1)) */
       add_mode(chan, '-', 'o', m->nick);
-  } else if (!chan_hasop(m) && dovoice(chan) && m->user && !u_pass_match(m->user, "-") && chk_autoop(*fr, chan)) {
+  } else if (!chan_hasop(m) && (chan->role & ROLE_OP) && m->user && !u_pass_match(m->user, "-") && chk_autoop(*fr, chan)) {
     do_op(m->nick, chan, 1, 0);
   }
   if (dovoice(chan)) {
@@ -1787,7 +1787,7 @@ static int got710(char *from, char *msg)
 
   chan = findchan(chname);
 
-  if (!chan->knock_flags || !dovoice(chan))
+  if (!chan->knock_flags || !(chan->role & ROLE_INVITE))
     return 0;
 
   struct userrec *u = get_user_by_host(uhost);
@@ -2884,17 +2884,15 @@ static int gotjoin(char *from, char *chname)
         }
 #endif /* CACHE */
         if (!splitjoin) {
-          bool common_checks = dovoice(chan) && !glob_bot(fr);
-
           /* Autoop */
           if (!chan_hasop(m) && 
                (op || 
-               (common_checks && !u_pass_match(m->user, "-") && chk_autoop(fr, chan)))) {
+               ((chan->role & ROLE_OP) && !glob_bot(fr) && !u_pass_match(m->user, "-") && chk_autoop(fr, chan)))) {
             do_op(m->nick, chan, 1, 0);
           }
 
           /* +v or +voice */
-          if (!chan_hasvoice(m) && common_checks) {
+          if (!chan_hasvoice(m) && !glob_bot(fr) && dovoice(chan)) {
             if (m->user) {
               if (!(m->flags & EVOICE) &&
                   (