Resolve #2853
This commit is contained in:
		
							parent
							
								
									10e59957d1
								
							
						
					
					
						commit
						65e5cfa68e
					
				
					 8 changed files with 109 additions and 82 deletions
				
			
		| 
						 | 
				
			
			@ -938,6 +938,7 @@ desktop/views/components/settings.profile.vue:
 | 
			
		|||
  save: "保存"
 | 
			
		||||
  locked-account: "アカウントの保護"
 | 
			
		||||
  is-locked: "フォローを承認制にする"
 | 
			
		||||
  careful-bot: "Botからのフォローだけ承認制にする"
 | 
			
		||||
  other: "その他"
 | 
			
		||||
  is-bot: "このアカウントはBotです"
 | 
			
		||||
  is-cat: "このアカウントはCatです"
 | 
			
		||||
| 
						 | 
				
			
			@ -1420,6 +1421,7 @@ mobile/views/pages/settings/settings.profile.vue:
 | 
			
		|||
  banner: "バナー"
 | 
			
		||||
  is-cat: "このアカウントはCatです"
 | 
			
		||||
  is-locked: "フォローを承認制にする"
 | 
			
		||||
  careful-bot: "Botからのフォローだけ承認制にする"
 | 
			
		||||
  advanced: "その他"
 | 
			
		||||
  privacy: "プライバシー"
 | 
			
		||||
  save: "保存"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,12 +21,13 @@
 | 
			
		|||
	<ui-button primary @click="save">%i18n:@save%</ui-button>
 | 
			
		||||
	<section>
 | 
			
		||||
		<h2>%i18n:@locked-account%</h2>
 | 
			
		||||
		<ui-switch v-model="$store.state.i.isLocked" @change="onChangeIsLocked">%i18n:@is-locked%</ui-switch>
 | 
			
		||||
		<ui-switch v-model="isLocked" @change="save(false)">%i18n:@is-locked%</ui-switch>
 | 
			
		||||
		<ui-switch v-model="carefulBot" @change="save(false)">%i18n:@careful-bot%</ui-switch>
 | 
			
		||||
	</section>
 | 
			
		||||
	<section>
 | 
			
		||||
		<h2>%i18n:@other%</h2>
 | 
			
		||||
		<ui-switch v-model="$store.state.i.isBot" @change="onChangeIsBot">%i18n:@is-bot%</ui-switch>
 | 
			
		||||
		<ui-switch v-model="$store.state.i.isCat" @change="onChangeIsCat">%i18n:@is-cat%</ui-switch>
 | 
			
		||||
		<ui-switch v-model="isBot" @change="save(false)">%i18n:@is-bot%</ui-switch>
 | 
			
		||||
		<ui-switch v-model="isCat" @change="save(false)">%i18n:@is-cat%</ui-switch>
 | 
			
		||||
		<ui-switch v-model="alwaysMarkNsfw">%i18n:common.always-mark-nsfw%</ui-switch>
 | 
			
		||||
	</section>
 | 
			
		||||
</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -42,6 +43,10 @@ export default Vue.extend({
 | 
			
		|||
			location: null,
 | 
			
		||||
			description: null,
 | 
			
		||||
			birthday: null,
 | 
			
		||||
			isBot: false,
 | 
			
		||||
			isCat: false,
 | 
			
		||||
			isLocked: false,
 | 
			
		||||
			carefulBot: false,
 | 
			
		||||
		};
 | 
			
		||||
	},
 | 
			
		||||
	computed: {
 | 
			
		||||
| 
						 | 
				
			
			@ -55,34 +60,29 @@ export default Vue.extend({
 | 
			
		|||
		this.location = this.$store.state.i.profile.location;
 | 
			
		||||
		this.description = this.$store.state.i.description;
 | 
			
		||||
		this.birthday = this.$store.state.i.profile.birthday;
 | 
			
		||||
		this.isCat = this.$store.state.i.isCat;
 | 
			
		||||
		this.isBot = this.$store.state.i.isBot;
 | 
			
		||||
		this.isLocked = this.$store.state.i.isLocked;
 | 
			
		||||
		this.carefulBot = this.$store.state.i.carefulBot;
 | 
			
		||||
	},
 | 
			
		||||
	methods: {
 | 
			
		||||
		updateAvatar() {
 | 
			
		||||
			(this as any).apis.updateAvatar();
 | 
			
		||||
		},
 | 
			
		||||
		save() {
 | 
			
		||||
		save(notify) {
 | 
			
		||||
			(this as any).api('i/update', {
 | 
			
		||||
				name: this.name || null,
 | 
			
		||||
				location: this.location || null,
 | 
			
		||||
				description: this.description || null,
 | 
			
		||||
				birthday: this.birthday || null
 | 
			
		||||
				birthday: this.birthday || null,
 | 
			
		||||
				isCat: this.isCat,
 | 
			
		||||
				isBot: this.isBot,
 | 
			
		||||
				isLocked: this.isLocked,
 | 
			
		||||
				carefulBot: this.carefulBot
 | 
			
		||||
			}).then(() => {
 | 
			
		||||
				if (notify) {
 | 
			
		||||
					(this as any).apis.notify('%i18n:@profile-updated%');
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
		onChangeIsLocked() {
 | 
			
		||||
			(this as any).api('i/update', {
 | 
			
		||||
				isLocked: this.$store.state.i.isLocked
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
		onChangeIsBot() {
 | 
			
		||||
			(this as any).api('i/update', {
 | 
			
		||||
				isBot: this.$store.state.i.isBot
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
		onChangeIsCat() {
 | 
			
		||||
			(this as any).api('i/update', {
 | 
			
		||||
				isCat: this.$store.state.i.isCat
 | 
			
		||||
				}
 | 
			
		||||
			});
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,7 +19,7 @@
 | 
			
		|||
				<li @click="list">
 | 
			
		||||
					<p>%fa:list%<span>%i18n:@lists%</span>%fa:angle-right%</p>
 | 
			
		||||
				</li>
 | 
			
		||||
				<li @click="followRequests" v-if="$store.state.i.isLocked">
 | 
			
		||||
				<li @click="followRequests" v-if="($store.state.i.isLocked || $store.state.i.carefulBot)">
 | 
			
		||||
					<p>%fa:envelope R%<span>%i18n:@follow-requests%<i v-if="$store.state.i.pendingReceivedFollowRequestsCount">{{ $store.state.i.pendingReceivedFollowRequestsCount }}</i></span>%fa:angle-right%</p>
 | 
			
		||||
				</li>
 | 
			
		||||
			</ul>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@
 | 
			
		|||
					<li><router-link to="/" :data-active="$route.name == 'index'">%fa:home%%i18n:@timeline%%fa:angle-right%</router-link></li>
 | 
			
		||||
					<li><router-link to="/i/notifications" :data-active="$route.name == 'notifications'">%fa:R bell%%i18n:@notifications%<template v-if="hasUnreadNotification">%fa:circle%</template>%fa:angle-right%</router-link></li>
 | 
			
		||||
					<li><router-link to="/i/messaging" :data-active="$route.name == 'messaging'">%fa:R comments%%i18n:@messaging%<template v-if="hasUnreadMessagingMessage">%fa:circle%</template>%fa:angle-right%</router-link></li>
 | 
			
		||||
					<li v-if="$store.getters.isSignedIn && $store.state.i.isLocked"><router-link to="/i/received-follow-requests" :data-active="$route.name == 'received-follow-requests'">%fa:R envelope%%i18n:@follow-requests%<template v-if="$store.getters.isSignedIn && $store.state.i.pendingReceivedFollowRequestsCount">%fa:circle%</template>%fa:angle-right%</router-link></li>
 | 
			
		||||
					<li v-if="$store.getters.isSignedIn && ($store.state.i.isLocked || $store.state.i.carefulBot)"><router-link to="/i/received-follow-requests" :data-active="$route.name == 'received-follow-requests'">%fa:R envelope%%i18n:@follow-requests%<template v-if="$store.getters.isSignedIn && $store.state.i.pendingReceivedFollowRequestsCount">%fa:circle%</template>%fa:angle-right%</router-link></li>
 | 
			
		||||
					<li><router-link to="/reversi" :data-active="$route.name == 'reversi'">%fa:gamepad%%i18n:@game%<template v-if="hasGameInvitation">%fa:circle%</template>%fa:angle-right%</router-link></li>
 | 
			
		||||
				</ul>
 | 
			
		||||
				<ul>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -58,6 +58,7 @@
 | 
			
		|||
 | 
			
		||||
		<div>
 | 
			
		||||
			<ui-switch v-model="isLocked" @change="save(false)">%i18n:@is-locked%</ui-switch>
 | 
			
		||||
			<ui-switch v-model="carefulBot" @change="save(false)">%i18n:@careful-bot%</ui-switch>
 | 
			
		||||
		</div>
 | 
			
		||||
	</section>
 | 
			
		||||
</ui-card>
 | 
			
		||||
| 
						 | 
				
			
			@ -80,6 +81,7 @@ export default Vue.extend({
 | 
			
		|||
			bannerId: null,
 | 
			
		||||
			isCat: false,
 | 
			
		||||
			isLocked: false,
 | 
			
		||||
			carefulBot: false,
 | 
			
		||||
			saving: false,
 | 
			
		||||
			avatarUploading: false,
 | 
			
		||||
			bannerUploading: false
 | 
			
		||||
| 
						 | 
				
			
			@ -103,6 +105,7 @@ export default Vue.extend({
 | 
			
		|||
		this.bannerId = this.$store.state.i.bannerId;
 | 
			
		||||
		this.isCat = this.$store.state.i.isCat;
 | 
			
		||||
		this.isLocked = this.$store.state.i.isLocked;
 | 
			
		||||
		this.carefulBot = this.$store.state.i.carefulBot;
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	methods: {
 | 
			
		||||
| 
						 | 
				
			
			@ -161,7 +164,8 @@ export default Vue.extend({
 | 
			
		|||
				avatarId: this.avatarId,
 | 
			
		||||
				bannerId: this.bannerId,
 | 
			
		||||
				isCat: this.isCat,
 | 
			
		||||
				isLocked: this.isLocked
 | 
			
		||||
				isLocked: this.isLocked,
 | 
			
		||||
				carefulBot: this.carefulBot
 | 
			
		||||
			}).then(i => {
 | 
			
		||||
				this.saving = false;
 | 
			
		||||
				this.$store.state.i.avatarId = i.avatarId;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,6 +65,16 @@ type IUserBase = {
 | 
			
		|||
	 */
 | 
			
		||||
	isLocked: boolean;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Botか否か
 | 
			
		||||
	 */
 | 
			
		||||
	isBot: boolean;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Botからのフォローを承認制にするか
 | 
			
		||||
	 */
 | 
			
		||||
	carefulBot: boolean;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * このアカウントに届いているフォローリクエストの数
 | 
			
		||||
	 */
 | 
			
		||||
| 
						 | 
				
			
			@ -94,7 +104,6 @@ export interface ILocalUser extends IUserBase {
 | 
			
		|||
		tags: string[];
 | 
			
		||||
	};
 | 
			
		||||
	lastUsedAt: Date;
 | 
			
		||||
	isBot: boolean;
 | 
			
		||||
	isCat: boolean;
 | 
			
		||||
	isAdmin?: boolean;
 | 
			
		||||
	isVerified?: boolean;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -67,6 +67,12 @@ export const meta = {
 | 
			
		|||
			}
 | 
			
		||||
		}),
 | 
			
		||||
 | 
			
		||||
		carefulBot: $.bool.optional.note({
 | 
			
		||||
			desc: {
 | 
			
		||||
				'ja-JP': 'Botからのフォローを承認制にするか'
 | 
			
		||||
			}
 | 
			
		||||
		}),
 | 
			
		||||
 | 
			
		||||
		isBot: $.bool.optional.note({
 | 
			
		||||
			desc: {
 | 
			
		||||
				'ja-JP': 'Botか否か'
 | 
			
		||||
| 
						 | 
				
			
			@ -110,6 +116,7 @@ export default async (params: any, user: ILocalUser, app: IApp) => new Promise(a
 | 
			
		|||
	if (ps.wallpaperId !== undefined) updates.wallpaperId = ps.wallpaperId;
 | 
			
		||||
	if (typeof ps.isLocked == 'boolean') updates.isLocked = ps.isLocked;
 | 
			
		||||
	if (typeof ps.isBot == 'boolean') updates.isBot = ps.isBot;
 | 
			
		||||
	if (typeof ps.carefulBot == 'boolean') updates.carefulBot = ps.carefulBot;
 | 
			
		||||
	if (typeof ps.isCat == 'boolean') updates.isCat = ps.isCat;
 | 
			
		||||
	if (typeof ps.autoWatch == 'boolean') updates['settings.autoWatch'] = ps.autoWatch;
 | 
			
		||||
	if (typeof ps.alwaysMarkNsfw == 'boolean') updates['settings.alwaysMarkNsfw'] = ps.alwaysMarkNsfw;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,9 +11,15 @@ import { deliver } from '../../queue';
 | 
			
		|||
import createFollowRequest from './requests/create';
 | 
			
		||||
 | 
			
		||||
export default async function(follower: IUser, followee: IUser) {
 | 
			
		||||
	if (followee.isLocked || isLocalUser(follower) && isRemoteUser(followee)) {
 | 
			
		||||
	// フォロー対象が鍵アカウントである or
 | 
			
		||||
	// フォロワーがBotであり、フォロー対象がBotからのフォローに慎重である or
 | 
			
		||||
	// フォロワーがローカルユーザーであり、フォロー対象がリモートユーザーである
 | 
			
		||||
	// 上記のいずれかに当てはまる場合はすぐフォローせずにフォローリクエストを発行しておく
 | 
			
		||||
	if (followee.isLocked || (followee.carefulBot && follower.isBot) || (isLocalUser(follower) && isRemoteUser(followee))) {
 | 
			
		||||
		await createFollowRequest(follower, followee);
 | 
			
		||||
	} else {
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const following = await Following.insert({
 | 
			
		||||
		createdAt: new Date(),
 | 
			
		||||
		followerId: follower._id,
 | 
			
		||||
| 
						 | 
				
			
			@ -77,4 +83,3 @@ export default async function(follower: IUser, followee: IUser) {
 | 
			
		|||
		deliver(followee, content, follower.inbox);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue