check IsAnOper() (local or global) instead of IsOper() (global) diff -r 4ef83f0e2e71 ircd/s_user.c --- a/ircd/s_user.c +++ b/ircd/s_user.c @@ -1351,15 +1351,15 @@ * new umode; servers can set it, local users cannot; * prevents users from /kick'ing or /mode -o'ing */ - if (!FlagHas(&setflags, FLAG_CHSERV) && !(IsOper(sptr) && HasPriv(sptr, PRIV_CHANSERV))) + if (!FlagHas(&setflags, FLAG_CHSERV) && !(IsAnOper(sptr) && HasPriv(sptr, PRIV_CHANSERV))) ClearChannelService(sptr); - if (!FlagHas(&setflags, FLAG_XTRAOP) && !(IsOper(sptr) && HasPriv(sptr, PRIV_XTRA_OPER))) + if (!FlagHas(&setflags, FLAG_XTRAOP) && !(IsAnOper(sptr) && HasPriv(sptr, PRIV_XTRA_OPER))) ClearXtraOp(sptr); - if (!FlagHas(&setflags, FLAG_NOCHAN) && !(IsOper(sptr) || feature_bool(FEAT_USER_HIDECHANS))) + if (!FlagHas(&setflags, FLAG_NOCHAN) && !(IsAnOper(sptr) || feature_bool(FEAT_USER_HIDECHANS))) ClearNoChan(sptr); - if (!FlagHas(&setflags, FLAG_NOIDLE) && !((IsOper(sptr) && HasPriv(sptr, PRIV_NOIDLE)) || feature_bool(FEAT_USER_HIDEIDLETIME))) + if (!FlagHas(&setflags, FLAG_NOIDLE) && !((IsAnOper(sptr) && HasPriv(sptr, PRIV_NOIDLE)) || feature_bool(FEAT_USER_HIDEIDLETIME))) ClearNoIdle(sptr); - if (!FlagHas(&setflags, FLAG_PARANOID) && !(IsOper(sptr) && HasPriv(sptr, PRIV_PARANOID))) + if (!FlagHas(&setflags, FLAG_PARANOID) && !(IsAnOper(sptr) && HasPriv(sptr, PRIV_PARANOID))) ClearParanoid(sptr); /* TODO: */