if (res == MOD_RES_PASSTHRU)
{
- int them = this->GetPrefixValue(src);
- int us = this->GetPrefixValue(user);
- if ((them < HALFOP_VALUE) || (them < us))
+ unsigned int them = this->GetPrefixValue(src);
+ unsigned int req = HALFOP_VALUE;
+ for (std::string::size_type i = 0; i < memb->modes.length(); i++)
{
- src->WriteNumeric(ERR_CHANOPRIVSNEEDED, "%s %s :You must be a channel %soperator",src->nick.c_str(), this->name.c_str(), them >= HALFOP_VALUE ? "" : "half-");
+ ModeHandler* mh = ServerInstance->Modes->FindMode(memb->modes[i], MODETYPE_CHANNEL);
+ if (mh && mh->GetLevelRequired() > req)
+ req = mh->GetLevelRequired();
+ }
+
+ if (them < req)
+ {
+ src->WriteNumeric(ERR_CHANOPRIVSNEEDED, "%s %s :You must be a channel %soperator",
+ src->nick.c_str(), this->name.c_str(), req > HALFOP_VALUE ? "" : "half-");
return;
}
}