send JOIN/PART events to a user when getting oped/deoped on a +u channel
authorpk910 <philipp@zoelle1.de>
Thu, 30 Jun 2011 21:28:26 +0000 (23:28 +0200)
committerpk910 <philipp@zoelle1.de>
Thu, 30 Jun 2011 21:28:26 +0000 (23:28 +0200)
ircd/channel.c

index aa266307b4dbbc5ad26739aabfb1b31eeb20b2da..4f9547dcc730d534625023994ecee7cc82389e6b 100644 (file)
@@ -3526,7 +3526,24 @@ mode_process_clients(struct ParseState *state)
                        sendcmdto_channel_butserv_butone(member->user, CMD_PART, member->channel, member->user, SKIP_OPS, "%H :%s", member->channel, "user deoped/devoiced on a +u channel.");
                }
                if(MyUser(member->user) && (state->cli_change[i].flag & MODE_CHANOP)) {
-                       do_names(member->user, member->channel, NAMES_ALL|NAMES_EON|((member->status & MODE_CHANOP) ? 0 : NAMES_OPS));
+                       //do_names(member->user, member->channel, NAMES_ALL|NAMES_EON|((member->status & MODE_CHANOP) ? 0 : NAMES_OPS));
+                       //this is not woring for all users :(  so we have to send join/part events
+                       struct Membership *member2;
+                       if (state->cli_change[i].flag & MODE_ADD) {
+                               //JOIN events
+                               for(member2 = state->chptr->members; member2; member2 = member->next_member) {
+                                       if(!IsChanOp(member2) && !HasVoice(member2)) {
+                                               sendcmdto_one(member->user, CMD_JOIN, member2->user, ":%H", chan);
+                                       }
+                               }
+                       } else {
+                               //PART ebents
+                               for(member2 = state->chptr->members; member2; member2 = member->next_member) {
+                                       if(!IsChanOp(member2) && !HasVoice(member2) && member != member2) {
+                                               sendcmdto_one(member->user, CMD_PART, member2->user, "%H :%s", chan, "invisible user on +u channel.");
+                                       }
+                               }
+                       }
                }
        }
   } /* for (i = 0; state->cli_change[i].flags; i++) */