*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