function build_userlist($userid, $lists = array())
{
    global $vbulletin;
    $userid = intval($userid);
    if ($userid == 0) {
        return false;
    }
    if (empty($lists)) {
        $userlists = vB::getDbAssertor()->assertQuery('vBForum:fetchuserlists', array(vB_dB_Query::TYPE_KEY => vB_dB_Query::QUERY_STORED, 'userid' => $userid));
        foreach ($userlists as $userlist) {
            $lists["{$userlist['type']}"][] = $userlist['userid'];
        }
    }
    $userdata = new vB_Datamanager_User($vbulletin, vB_DataManager_Constants::ERRTYPE_STANDARD);
    $existing = array('userid' => $userid);
    $userdata->set_existing($existing);
    foreach ($lists as $listtype => $values) {
        $key = $listtype . 'list';
        if (isset($userdata->validfields["{$key}"])) {
            $userdata->set($key, implode(',', $values));
        }
    }
    /* Now to set the ones that weren't set. */
    foreach ($userdata->list_types as $listtype) {
        $key = $listtype . 'list';
        if ($userdata->is_field_set($key)) {
            $userdata->set($key, '');
        }
    }
    $userdata->save();
    return true;
}