unsigned int flags;
bool noop;
bool secure;
- bool guard;
metadata_t *md;
chanacs_t *ca2;
char akickreason[120] = "User is banned from this channel", *p;
* sophisticated mechanism is disabled */
secure = mc->flags & MC_SECURE || (!chansvs.changets &&
chan->nummembers == 1 && chan->ts > CURRTIME - 300);
- /* chanserv or a botserv bot should join */
- guard = mc->flags & MC_GUARD ||
- metadata_find(mc, "private:botserv:bot-assigned") != NULL;
if (chan->nummembers == 1 && mc->flags & MC_GUARD &&
metadata_find(mc, "private:botserv:bot-assigned") == NULL)
if ((mc->flags & MC_RESTRICTED) && !(flags & CA_ALLPRIVS) && !has_priv_user(u, PRIV_JOIN_STAFFONLY))
{
/* Stay on channel if this would empty it -- jilles */
- if (chan->nummembers <= (guard ? 2 : 1))
+ if (chan->nummembers - chan->numsvcmembers == 1)
{
mc->flags |= MC_INHABIT;
- if (!guard)
+ if (chan->numsvcmembers == 0)
join(chan->name, chansvs.nick);
}
if (mc->mlock_on & CMODE_INVITE || chan->modes & CMODE_INVITE)
if (flags & CA_AKICK && !(flags & CA_EXEMPT))
{
/* Stay on channel if this would empty it -- jilles */
- if (chan->nummembers <= (guard ? 2 : 1))
+ if (chan->nummembers - chan->numsvcmembers == 1)
{
mc->flags |= MC_INHABIT;
- if (!guard)
+ if (chan->numsvcmembers == 0)
join(chan->name, chansvs.nick);
}
/* use a user-given ban mask if possible -- jilles */
*/
if (mc->mlock_on & CMODE_INVITE && !(flags & CA_INVITE) &&
(!me.bursting || mc->flags & MC_RECREATED) &&
- (!(u->server->flags & SF_EOB) || (chan->nummembers <= 2 && (chan->nummembers <= 1 || chanuser_find(chan, chansvs.me->me)))) &&
+ (!(u->server->flags & SF_EOB) || (chan->nummembers - chan->numsvcmembers == 1)) &&
(!ircd->invex_mchar || !next_matching_ban(chan, u, ircd->invex_mchar, chan->bans.head)))
{
- if (chan->nummembers <= (guard ? 2 : 1))
+ if (chan->nummembers - chan->numsvcmembers == 1)
{
mc->flags |= MC_INHABIT;
- if (!guard)
+ if (chan->numsvcmembers == 0)
join(chan->name, chansvs.nick);
}
if (!(chan->modes & CMODE_INVITE))
* triggering autocycle-for-ops scripts and immediately
* destroying channels with kick on split riding.
*/
- if (mc->flags & MC_INHABIT && chan->nummembers >= 3)
+ if (mc->flags & MC_INHABIT && chan->nummembers - chan->numsvcmembers >= 2)
{
mc->flags &= ~MC_INHABIT;
if (!(mc->flags & MC_GUARD) && !(chan->flags & CHAN_LOG) && chanuser_find(chan, chansvs.me->me))
return;
/* we're not parting if the channel has more than one person on it */
- if (cu->chan->nummembers > 2)
+ if (cu->chan->nummembers - cu->chan->numsvcmembers > 1)
return;
/* internal clients parting a channel shouldn't cause chanserv to leave. */
if (!(mc->flags & MC_INHABIT))
continue;
/* If there is only one user, stay indefinitely. */
- if (mc->chan != NULL && mc->chan->nummembers == 2)
+ if (mc->chan != NULL && mc->chan->nummembers - mc->chan->numsvcmembers == 1)
continue;
mc->flags &= ~MC_INHABIT;
if (mc->chan != NULL &&
!(mc->chan->flags & CHAN_LOG) &&
(!(mc->flags & MC_GUARD) ||
- (config_options.leave_chans && mc->chan->nummembers == 1) ||
+ (config_options.leave_chans && mc->chan->nummembers == mc->chan->numsvcmembers) ||
metadata_find(mc, "private:close:closer")) &&
chanuser_find(mc->chan, chansvs.me->me))
{
if (take && !(fl & CA_ALLPRIVS) && (mc->flags & MC_RESTRICTED) && !has_priv_user(cu->user, PRIV_JOIN_STAFFONLY))
{
/* Stay on channel if this would empty it -- jilles */
- if (mc->chan->nummembers <= (mc->flags & MC_GUARD ? 2 : 1))
+ if (mc->chan->nummembers - mc->chan->numsvcmembers == 1)
{
mc->flags |= MC_INHABIT;
- if (!(mc->flags & MC_GUARD))
+ if (mc->chan->numsvcmembers == 0)
join(mc->chan->name, chansvs.nick);
}
metadata_t *md;
/* Stay on channel if this would empty it -- jilles */
- if (mc->chan->nummembers <= (mc->flags & MC_GUARD ? 2 : 1))
+ if (mc->chan->nummembers - mc->chan->numsvcmembers == 1)
{
mc->flags |= MC_INHABIT;
- if (!(mc->flags & MC_GUARD))
+ if (mc->chan->numsvcmembers == 0)
join(mc->chan->name, chansvs.nick);
}