summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMeiMei <30769358+mei23@users.noreply.github.com>2018-12-28 21:36:58 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2018-12-28 21:36:58 +0900
commit8823a6c1a1ffebe96c3646896ae84cfc91eeadf4 (patch)
tree6358d6c6481ea09a9a3b2342c0215f7072d311a9 /src
parentSupports CSS Scrollbars (#3783) (diff)
downloadmisskey-8823a6c1a1ffebe96c3646896ae84cfc91eeadf4.tar.gz
misskey-8823a6c1a1ffebe96c3646896ae84cfc91eeadf4.tar.bz2
misskey-8823a6c1a1ffebe96c3646896ae84cfc91eeadf4.zip
フォローしているユーザーからのフォローを自動承認するオプション (#3780)
Diffstat (limited to 'src')
-rw-r--r--src/client/app/common/views/components/profile-editor.vue6
-rw-r--r--src/models/user.ts5
-rw-r--r--src/server/api/endpoints/i/update.ts8
-rw-r--r--src/services/following/create.ts18
4 files changed, 34 insertions, 3 deletions
diff --git a/src/client/app/common/views/components/profile-editor.vue b/src/client/app/common/views/components/profile-editor.vue
index 5f462a2586..75d14236c2 100644
--- a/src/client/app/common/views/components/profile-editor.vue
+++ b/src/client/app/common/views/components/profile-editor.vue
@@ -70,6 +70,7 @@
<div>
<ui-switch v-model="isLocked" @change="save(false)">{{ $t('is-locked') }}</ui-switch>
<ui-switch v-model="carefulBot" @change="save(false)">{{ $t('careful-bot') }}</ui-switch>
+ <ui-switch v-model="autoAcceptFollowed" @change="save(false)">{{ $t('auto-accept-followed') }}</ui-switch>
</div>
</section>
@@ -118,6 +119,7 @@ export default Vue.extend({
isBot: false,
isLocked: false,
carefulBot: false,
+ autoAcceptFollowed: false,
saving: false,
avatarUploading: false,
bannerUploading: false
@@ -156,6 +158,7 @@ export default Vue.extend({
this.isBot = this.$store.state.i.isBot;
this.isLocked = this.$store.state.i.isLocked;
this.carefulBot = this.$store.state.i.carefulBot;
+ this.autoAcceptFollowed = this.$store.state.i.autoAcceptFollowed;
},
methods: {
@@ -217,7 +220,8 @@ export default Vue.extend({
isCat: !!this.isCat,
isBot: !!this.isBot,
isLocked: !!this.isLocked,
- carefulBot: !!this.carefulBot
+ carefulBot: !!this.carefulBot,
+ autoAcceptFollowed: !!this.autoAcceptFollowed
}).then(i => {
this.saving = false;
this.$store.state.i.avatarId = i.avatarId;
diff --git a/src/models/user.ts b/src/models/user.ts
index 19291a2cbe..61fb7244e0 100644
--- a/src/models/user.ts
+++ b/src/models/user.ts
@@ -70,6 +70,11 @@ type IUserBase = {
carefulBot: boolean;
/**
+ * フォローしているユーザーからのフォローリクエストを自動承認するか
+ */
+ autoAcceptFollowed: boolean;
+
+ /**
* このアカウントに届いているフォローリクエストの数
*/
pendingReceivedFollowRequestsCount: number;
diff --git a/src/server/api/endpoints/i/update.ts b/src/server/api/endpoints/i/update.ts
index 7bdd52883c..ec6aaa04da 100644
--- a/src/server/api/endpoints/i/update.ts
+++ b/src/server/api/endpoints/i/update.ts
@@ -94,6 +94,13 @@ export const meta = {
}
},
+ autoAcceptFollowed: {
+ validator: $.bool.optional,
+ desc: {
+ 'ja-JP': 'フォローしているユーザーからのフォローリクエストを自動承認するか'
+ }
+ },
+
isBot: {
validator: $.bool.optional,
desc: {
@@ -140,6 +147,7 @@ export default define(meta, (ps, user, app) => new Promise(async (res, rej) => {
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.autoAcceptFollowed == 'boolean') updates.autoAcceptFollowed = ps.autoAcceptFollowed;
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;
diff --git a/src/services/following/create.ts b/src/services/following/create.ts
index 46b818f8bb..fac53c40af 100644
--- a/src/services/following/create.ts
+++ b/src/services/following/create.ts
@@ -45,8 +45,22 @@ export default async function(follower: IUser, followee: IUser, requestId?: stri
// フォロワーがローカルユーザーであり、フォロー対象がリモートユーザーである
// 上記のいずれかに当てはまる場合はすぐフォローせずにフォローリクエストを発行しておく
if (followee.isLocked || (followee.carefulBot && follower.isBot) || (isLocalUser(follower) && isRemoteUser(followee))) {
- await createFollowRequest(follower, followee, requestId);
- return;
+ let autoAccept = false;
+
+ // フォローしているユーザーは自動承認オプション
+ if (isLocalUser(followee) && followee.autoAcceptFollowed) {
+ const followed = await Following.findOne({
+ followerId: followee._id,
+ followeeId: follower._id
+ });
+
+ if (followed) autoAccept = true;
+ }
+
+ if (!autoAccept) {
+ await createFollowRequest(follower, followee, requestId);
+ return;
+ }
}
await Following.insert({