diff --git a/website/client/components/settings/site.vue b/website/client/components/settings/site.vue index e50c72dda4..2847c1fc45 100644 --- a/website/client/components/settings/site.vue +++ b/website/client/components/settings/site.vue @@ -66,6 +66,9 @@ .checkbox input(type='checkbox', v-model='user.preferences.suppressModals.streak', @change='set("suppressModals", "streak")') label {{ $t('suppressStreakModal') }} + .checkbox + input(type='checkbox', v-model='user.preferences.searchableUsername', @change='set("searchableUsername")') + label {{ $t('searchableUsernameSetting') }} //- .checkbox //- label {{ $t('confirmScoreNotes') }} //- input(type='checkbox', v-model='user.preferences.tasks.confirmScoreNotes', @change='set({"preferences.tasks.confirmScoreNotes": user.preferences.tasks.confirmScoreNotes ? true: false})') diff --git a/website/common/locales/en/settings.json b/website/common/locales/en/settings.json index 3ee48d25de..356e8fb3be 100644 --- a/website/common/locales/en/settings.json +++ b/website/common/locales/en/settings.json @@ -206,5 +206,7 @@ "usernameVerifiedConfirmation": "Your username, <%= username %>, is confirmed!", "usernameNotVerified": "Please confirm your username.", "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", - "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!", + "searchableUsernameSetting": "Allow username to appear in searches", + "searchableUsernamePopover": "If enabled, other users can @mention and invite you easier." } diff --git a/website/server/controllers/api-v4/members.js b/website/server/controllers/api-v4/members.js index d46c75f650..54bd0c4517 100644 --- a/website/server/controllers/api-v4/members.js +++ b/website/server/controllers/api-v4/members.js @@ -16,13 +16,13 @@ api.getUsernameAutocompletes = { let username = req.params.username.toLowerCase(); if (username[0] === '@') username = username.slice(1, username.length); - if (username.length < 2) { + if (username.length < 1) { res.respond(200, []); return; } let members = await User - .find({'auth.local.lowerCaseUsername': {$regex: `.*${username}.*`}, 'flags.verifiedUsername': true}) + .find({'auth.local.lowerCaseUsername': {$regex: `.*${username}.*`}, 'flags.verifiedUsername': true, 'preferences.searchableUsername': {$ne: false}}) .select(['profile.name', 'contributor', 'auth.local.username']) .limit(20) .exec(); diff --git a/website/server/models/user/schema.js b/website/server/models/user/schema.js index 42871628c8..768042c77b 100644 --- a/website/server/models/user/schema.js +++ b/website/server/models/user/schema.js @@ -460,6 +460,7 @@ let schema = new Schema({ reverseChatOrder: {$type: Boolean, default: false}, background: String, displayInviteToPartyWhenPartyIs1: {$type: Boolean, default: true}, + searchableUsername: {$type: Boolean, default: true}, webhooks: {$type: Schema.Types.Mixed, default: () => { return {}; }},