- if (strchr(Channel_Modes(chan), 'i')) {
- /* Yes. The user must be channel operator! */
- if (!strchr(Channel_UserModes(chan, from), 'o'))
- return IRC_WriteStrClient(from, ERR_CHANOPRIVSNEEDED_MSG,
- Client_ID(from), Channel_Name(chan));
+ if (Channel_HasMode(chan, 'i')) {
+ /* Yes. The user issuing the INVITE command must be
+ * channel owner/admin/operator/halfop! */
+ if (!Channel_UserHasMode(chan, from, 'q') &&
+ !Channel_UserHasMode(chan, from, 'a') &&
+ !Channel_UserHasMode(chan, from, 'o') &&
+ !Channel_UserHasMode(chan, from, 'h'))
+ return IRC_WriteErrClient(from,
+ ERR_CHANOPRIVSNEEDED_MSG,
+ Client_ID(from),
+ Channel_Name(chan));