modechange.push_back(add ? "+" : "-");
modechange[1].push_back(opm.GetModeChar());
modechange.push_back(user->nick);
- for (UCListIter v = user->chans.begin(); v != user->chans.end(); v++)
+ for (User::ChanList::iterator v = user->chans.begin(); v != user->chans.end(); v++)
{
- modechange[0] = (*v)->name;
+ modechange[0] = (*v)->chan->name;
ServerInstance->Modes->Process(modechange, ServerInstance->FakeClient);
}
}
void HideOperWatcher::AfterMode(User* source, User* dest, Channel* channel, const std::string& parameter, bool adding)
{
- if (IS_LOCAL(dest))
+ // If hideoper is being unset because the user is deopering, don't set +y
+ if (IS_LOCAL(dest) && dest->IsOper())
parentmod->SetOperPrefix(dest, !adding);
}