void User::UnOper() { if (!IS_OPER(this)) return; /* * unset their oper type (what IS_OPER checks). * note, order is important - this must come before modes as -o attempts * to call UnOper. -- w00t */ oper = NULL; /* Remove all oper only modes from the user when the deoper - Bug #466*/ std::string moderemove("-"); for (unsigned char letter = 'A'; letter <= 'z'; letter++) { ModeHandler* mh = ServerInstance->Modes->FindMode(letter, MODETYPE_USER); if (mh && mh->NeedsOper()) moderemove += letter; } std::vector<std::string> parameters; parameters.push_back(this->nick); parameters.push_back(moderemove); ServerInstance->Parser->CallHandler("MODE", parameters, this); /* remove the user from the oper list. Will remove multiple entries as a safeguard against bug #404 */ ServerInstance->Users->all_opers.remove(this); this->modes[UM_OPERATOR] = 0; }
void User::UnOper() { if (!this->IsOper()) return; /* * unset their oper type (what IS_OPER checks). * note, order is important - this must come before modes as -o attempts * to call UnOper. -- w00t */ oper = NULL; /* Remove all oper only modes from the user when the deoper - Bug #466*/ std::string moderemove("-"); for (unsigned char letter = 'A'; letter <= 'z'; letter++) { ModeHandler* mh = ServerInstance->Modes->FindMode(letter, MODETYPE_USER); if (mh && mh->NeedsOper()) moderemove += letter; } std::vector<std::string> parameters; parameters.push_back(this->nick); parameters.push_back(moderemove); ServerInstance->Modes->Process(parameters, this); // Remove the user from the oper list stdalgo::vector::swaperase(ServerInstance->Users->all_opers, this); ModeHandler* opermh = ServerInstance->Modes->FindMode('o', MODETYPE_USER); this->SetMode(opermh, false); }