- if (('#' != *parv[1] && '&' != *parv[1]) || !(chptr = FindChannel(parv[1])))
- return send_error_to_client(sptr, ERR_NOSUCHCHANNEL, parv[1]);
+ chname = parv[1];
+ if (*chname == '!')
+ {
+ chname++;
+ if (!HasPriv(sptr, IsLocalChannel(chname) ? PRIV_FORCE_LOCAL_OPMODE
+ : PRIV_FORCE_OPMODE))
+ return send_reply(sptr, ERR_NOPRIVILEGES);
+ force = 1;
+ }
+
+ if (!HasPriv(sptr,
+ IsLocalChannel(chname) ? PRIV_LOCAL_OPMODE : PRIV_OPMODE))
+ return send_reply(sptr, ERR_NOPRIVILEGES);
+
+ if (!IsChannelName(chname) || !(chptr = FindChannel(chname)))
+ return send_reply(sptr, ERR_NOSUCHCHANNEL, chname);