free_ban(link);
}
chptr->banlist = NULL;
+
+ /* Immediately destruct empty -A channels if not using apass. */
+ if (!feature_bool(FEAT_OPLEVELS))
+ {
+ destruct_channel(chptr);
+ return 0;
+ }
}
if (TStime() - chptr->creationtime < 172800) /* Channel younger than 48 hours? */
schedule_destruct_event_1m(chptr); /* Get rid of it in approximately 4-5 minutes */
* we do not want to send ERR_CANNOTSENDTOCHAN more than once.
*/
if (!MyUser(member->user))
+ {
+ if (IsDelayedJoin(member) && reveal)
+ RevealDelayedJoin(member);
return 1;
+ }
/* Discourage using the Apass to get op. They should use the Upass. */
if (IsChannelManager(member) && member->channel->mode.apass[0])
/* Ok, if we were given the OPMODE flag, or its a server, hide the source.
*/
- if (mbuf->mb_dest & MODEBUF_DEST_OPMODE || IsServer(mbuf->mb_source) || IsMe(mbuf->mb_source))
+ if (feature_bool(FEAT_HIS_MODEWHO) &&
+ (mbuf->mb_dest & MODEBUF_DEST_OPMODE ||
+ IsServer(mbuf->mb_source) ||
+ IsMe(mbuf->mb_source)))
app_source = &his;
else
app_source = mbuf->mb_source;
* We're propagating a normal MODE command to the rest of the network;
* we send the actual channel TS unless this is a HACK3 or a HACK4
*/
- if (IsServer(mbuf->mb_source))
+ if (IsServer(mbuf->mb_source) || IsMe(mbuf->mb_source))
sendcmdto_serv_butone(mbuf->mb_source, CMD_MODE, mbuf->mb_connect,
"%H %s%s%s%s%s%s %Tu", mbuf->mb_channel,
rembuf_i ? "-" : "", rembuf, addbuf_i ? "+" : "",
/* actually effect the change */
if (state->flags & MODE_PARSE_SET) {
if (state->cli_change[i].flag & MODE_ADD) {
- if (IsDelayedJoin(member))
+ if (IsDelayedJoin(member) && !IsZombie(member))
RevealDelayedJoin(member);
member->status |= (state->cli_change[i].flag &
(MODE_CHANOP | MODE_VOICE));