feature_int(FEAT_CHANNELLEN), CHANNELLEN
#define FEATURESVALUES2 (feature_bool(FEAT_LOCAL_CHANNELS) ? "#&" : "#"), "(ov)@+", "@+", \
- (feature_bool(FEAT_OPLEVELS) ? "b,AkU,l,imnpstrDd" : "b,k,l,imnpstrDd"), \
+ (feature_bool(FEAT_OPLEVELS) ? "b,AkU,l,imnpstrDdu" : "b,k,l,imnpstrDdu"), \
"rfc1459", feature_str(FEAT_NETWORK)
#endif /* INCLUDED_supported_h */
*mbuf++ = 'n';
if (chptr->mode.mode & MODE_REGONLY)
*mbuf++ = 'r';
+ if (chptr->mode.mode & MODE_NOQUITPARTS)
+ *mbuf++ = 'u';
if (chptr->mode.mode & MODE_DELJOINS)
*mbuf++ = 'D';
else if (MyUser(cptr) && (chptr->mode.mode & MODE_WASDELJOINS))
*mbuf++ = 'k';
if (previous_parameter)
strcat(pbuf, " ");
- if (is_chan_op(cptr, chptr) || IsServer(cptr)) {
+ if (is_chan_op(cptr, chptr) || IsServer(cptr) || IsOper(cptr)) {
strcat(pbuf, chptr->mode.key);
} else
strcat(pbuf, "*");
MODE_LIMIT, 'l',
/* MODE_APASS, 'A', */
/* MODE_UPASS, 'U', */
+ MODE_NOQUITPARTS, 'u',
0x0, 0x0
};
int i;
mode &= (MODE_ADD | MODE_DEL | MODE_PRIVATE | MODE_SECRET | MODE_MODERATED |
MODE_TOPICLIMIT | MODE_INVITEONLY | MODE_NOPRIVMSGS | MODE_REGONLY |
- MODE_DELJOINS | MODE_WASDELJOINS);
+ MODE_DELJOINS | MODE_WASDELJOINS | MODE_NOQUITPARTS);
if (!(mode & ~(MODE_ADD | MODE_DEL))) /* don't add empty modes... */
return;
MODE_LIMIT, 'l',
MODE_REGONLY, 'r',
MODE_DELJOINS, 'D',
+ MODE_NOQUITPARTS, 'u',
0x0, 0x0
};
unsigned int add;
MODE_LIMIT, 'l',
MODE_REGONLY, 'r',
MODE_DELJOINS, 'D',
+ MODE_NOQUITPARTS, 'u',
MODE_ADD, '+',
MODE_DEL, '-',
0x0, 0x0
/* Send notification to channel */
if (!(flags & (CHFL_ZOMBIE | CHFL_DELAYED)))
sendcmdto_channel_butserv_butone(jbuf->jb_source, CMD_PART, chan, NULL, 0,
- (flags & CHFL_BANNED || !jbuf->jb_comment) ?
- ":%H" : "%H :%s", chan, jbuf->jb_comment);
+ ((flags & CHFL_BANNED) || ((chan->mode.mode & MODE_NOQUITPARTS)
+ && !IsChannelService(member->user)) || !jbuf->jb_comment) ?
+ "%H" : "%H :%s", chan, jbuf->jb_comment);
else if (MyUser(jbuf->jb_source))
sendcmdto_one(jbuf->jb_source, CMD_PART, jbuf->jb_source,
- (flags & CHFL_BANNED || !jbuf->jb_comment) ?
+ ((flags & CHFL_BANNED) || (chan->mode.mode & MODE_NOQUITPARTS)
+ || !jbuf->jb_comment) ?
":%H" : "%H :%s", chan, jbuf->jb_comment);
/* XXX: Shouldn't we send a PART here anyway? */
/* to users on the channel? Why? From their POV, the user isn't on
if (cli_user(sptr)) {
struct Membership* chan;
+ /* (slug for +u) removed !IsDelayedJoin(chan) as splidge said to */
for (chan = cli_user(sptr)->channel; chan; chan = chan->next_channel) {
- if (!IsZombie(chan) && !IsDelayedJoin(chan) && !member_can_send_to_channel(chan, 0))
- return exit_client(cptr, sptr, sptr, "Signed off");
+ if (!IsZombie(chan) && (!member_can_send_to_channel(chan, 0)
+ || (chan->channel->mode.mode & MODE_NOQUITPARTS)))
+ return exit_client(cptr, sptr, sptr, "Signed off");
}
}
if (parc > 1 && !BadPtr(parv[parc - 1]))