Sfoglia il codice sorgente

Merge branch '39-dynamic-roles' into next

* 39-dynamic-roles:
  Consolidate some chk_autoop() logic.
  Split ROLE_VOICE into ROLE_OP and ROLE_INVITE
Bryan Drewery 10 anni fa
parent
commit
06ce96e5c4
3 ha cambiato i file con 9 aggiunte e 9 eliminazioni
  1. 3 2
      src/flags.cc
  2. 2 1
      src/flags.h
  3. 4 6
      src/mod/irc.mod/chan.cc

+ 3 - 2
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},
 };
 
@@ -475,9 +476,9 @@ real_chk_op(const struct flag_record fr, const struct chanset_t *chan, bool botb
 }
 
 int
-chk_autoop(const struct flag_record fr, const struct chanset_t *chan)
+chk_autoop(struct userrec *user, const struct flag_record fr, const struct chanset_t *chan)
 {
-  if (glob_bot(fr) || !chan)
+  if (glob_bot(fr) || !chan || u_pass_match(user, "-"))
     return 0;
   if (!channel_take(chan) && !privchan(fr, chan, PRIV_OP) && chk_op(fr, chan) && !chk_deop(fr, chan)) {
     if (channel_autoop(chan) || chan_autoop(fr) || glob_autoop(fr))

+ 2 - 1
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
 
@@ -174,7 +175,7 @@ char geticon(int);
 int privchan(const struct flag_record, const struct chanset_t *, int);
 #define chk_op(fr, chan) real_chk_op(fr, chan, 1)
 int real_chk_op(const struct flag_record, const struct chanset_t *, bool);
-int chk_autoop(const struct flag_record, const struct chanset_t *);
+int chk_autoop(struct userrec *, const struct flag_record, const struct chanset_t *);
 #define chk_deop(fr, chan) real_chk_deop(fr, chan, 1)
 int real_chk_deop(const struct flag_record, const struct chanset_t *, bool);
 #define chk_voice(fr, chan) (\

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

@@ -1230,7 +1230,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) && chk_autoop(m->user, *fr, chan)) {
     do_op(m->nick, chan, 1, 0);
   }
   if (dovoice(chan)) {
@@ -1794,7 +1794,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);
@@ -2891,17 +2891,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) && chk_autoop(m->user, 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) &&
                   (