diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3246aabe8..7ab5b1f68 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@ unreleased
* ログイン時に二段階認証が分かりにくいのを改善
* 投稿のツールチップを出すのは時間の上だけに変更
* ハッシュタグ判定の強化
+* ストーク機能の廃止
* クライアントのAPIリクエストをストリーム経由で行うオプションを廃止
* 一部箇所でカスタム絵文字が適用されていないのを修正
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 2cb1c317d..6b70ed08d 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -1402,9 +1402,6 @@ desktop/views/pages/user/user.photos.vue:
desktop/views/pages/user/user.profile.vue:
follows-you: "フォローされています"
- stalk: "ストークする"
- stalking: "ストーキングしています"
- unstalk: "ストーク解除"
menu: "メニュー"
desktop/views/pages/user/user.header.vue:
diff --git a/src/client/app/desktop/views/pages/user/user.profile.vue b/src/client/app/desktop/views/pages/user/user.profile.vue
index 22cbf6546..5f424432a 100644
--- a/src/client/app/desktop/views/pages/user/user.profile.vue
+++ b/src/client/app/desktop/views/pages/user/user.profile.vue
@@ -3,10 +3,6 @@
{{ $t('menu') }}
@@ -24,26 +20,6 @@ export default Vue.extend({
props: ['user'],
methods: {
- stalk() {
- this.$root.api('following/stalk', {
- userId: this.user.id
- }).then(() => {
- this.user.isStalking = true;
- }, () => {
- alert('error');
- });
- },
-
- unstalk() {
- this.$root.api('following/unstalk', {
- userId: this.user.id
- }).then(() => {
- this.user.isStalking = false;
- }, () => {
- alert('error');
- });
- },
-
menu() {
this.$root.new(XUserMenu, {
source: this.$refs.menu.$el,
@@ -78,9 +54,6 @@ export default Vue.extend({
background #eefaff
border-radius 4px
- > .stalk
- margin 12px 0 0 0
-
> .action-form
padding 16px
text-align center
diff --git a/src/docs/follow.ja-JP.md b/src/docs/follow.ja-JP.md
index a883435ab..28a606e28 100644
--- a/src/docs/follow.ja-JP.md
+++ b/src/docs/follow.ja-JP.md
@@ -1,8 +1,3 @@
# フォロー
ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。
ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
-
-## ストーキング
-ユーザーをフォローしている状態では、さらに「ストーキング」モードをオンにすることができます。ストーキングを行うと、タイムラインにそのユーザーの全ての投稿が表示されるようになります。つまり、他のユーザーに対する返信も含まれることになります。
-ストーキングするには、ユーザーページの「ストークする」をクリックします。ストーキングをやめるには、もう一度クリックします。
-ストーキングしていることは相手に通知されません。
diff --git a/src/models/following.ts b/src/models/following.ts
index 58d55bbee..12cc27211 100644
--- a/src/models/following.ts
+++ b/src/models/following.ts
@@ -12,7 +12,6 @@ export type IFollowing = {
createdAt: Date;
followeeId: mongo.ObjectID;
followerId: mongo.ObjectID;
- stalk: boolean;
// 非正規化
_followee: {
diff --git a/src/models/user.ts b/src/models/user.ts
index 85dfdf290..6987bd3da 100644
--- a/src/models/user.ts
+++ b/src/models/user.ts
@@ -219,7 +219,6 @@ export async function getRelation(me: mongo.ObjectId, target: mongo.ObjectId) {
return {
id: target,
isFollowing: following1 !== null,
- isStalking: following1 ? following1.stalk : false,
hasPendingFollowRequestFromYou: followReq1 !== null,
hasPendingFollowRequestToYou: followReq2 !== null,
isFollowed: following2 !== null,
@@ -352,7 +351,6 @@ export const pack = (
_user.isFollowing = relation.isFollowing;
_user.isFollowed = relation.isFollowed;
- _user.isStalking = relation.isStalking;
_user.hasPendingFollowRequestFromYou = relation.hasPendingFollowRequestFromYou;
_user.hasPendingFollowRequestToYou = relation.hasPendingFollowRequestToYou;
_user.isBlocking = relation.isBlocking;
diff --git a/src/server/api/common/get-friends.ts b/src/server/api/common/get-friends.ts
index e0b05f73d..876aa399f 100644
--- a/src/server/api/common/get-friends.ts
+++ b/src/server/api/common/get-friends.ts
@@ -36,14 +36,12 @@ export const getFriends = async (me: mongodb.ObjectID, includeMe = true, remoteO
// ID list of other users who the I follows
const myfollowings = followings.map(following => ({
- id: following.followeeId,
- stalk: following.stalk
+ id: following.followeeId
}));
if (includeMe) {
myfollowings.push({
- id: me,
- stalk: true
+ id: me
});
}
diff --git a/src/server/api/endpoints/following/stalk.ts b/src/server/api/endpoints/following/stalk.ts
deleted file mode 100644
index 3a58e2192..000000000
--- a/src/server/api/endpoints/following/stalk.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import $ from 'cafy'; import ID, { transform } from '../../../../misc/cafy-id';
-import Following from '../../../../models/following';
-import define from '../../define';
-
-export const meta = {
- desc: {
- 'ja-JP': '指定したユーザーをストーキングします。',
- 'en-US': 'Stalk a user.'
- },
-
- requireCredential: true,
-
- kind: 'following-write',
-
- params: {
- userId: {
- validator: $.type(ID),
- transform: transform,
- desc: {
- 'ja-JP': '対象のユーザーのID',
- 'en-US': 'Target user ID'
- }
- }
- }
-};
-
-export default define(meta, (ps, user) => new Promise(async (res, rej) => {
- const follower = user;
-
- // Fetch following
- const following = await Following.findOne({
- followerId: follower._id,
- followeeId: ps.userId
- });
-
- if (following === null) {
- return rej('following not found');
- }
-
- // Stalk
- await Following.update({ _id: following._id }, {
- $set: {
- stalk: true
- }
- });
-
- res();
-
- // TODO: イベント
-}));
diff --git a/src/server/api/endpoints/following/unstalk.ts b/src/server/api/endpoints/following/unstalk.ts
deleted file mode 100644
index ad07ec38b..000000000
--- a/src/server/api/endpoints/following/unstalk.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import $ from 'cafy'; import ID, { transform } from '../../../../misc/cafy-id';
-import Following from '../../../../models/following';
-import define from '../../define';
-
-export const meta = {
- desc: {
- 'ja-JP': '指定したユーザーのストーキングをやめます。',
- 'en-US': 'Unstalk a user.'
- },
-
- requireCredential: true,
-
- kind: 'following-write',
-
- params: {
- userId: {
- validator: $.type(ID),
- transform: transform,
- desc: {
- 'ja-JP': '対象のユーザーのID',
- 'en-US': 'Target user ID'
- }
- }
- }
-};
-
-export default define(meta, (ps, user) => new Promise(async (res, rej) => {
- const follower = user;
-
- // Fetch following
- const following = await Following.findOne({
- followerId: follower._id,
- followeeId: ps.userId
- });
-
- if (following === null) {
- return rej('following not found');
- }
-
- // Stalk
- await Following.update({ _id: following._id }, {
- $set: {
- stalk: false
- }
- });
-
- res();
-
- // TODO: イベント
-}));
diff --git a/src/server/api/endpoints/notes/hybrid-timeline.ts b/src/server/api/endpoints/notes/hybrid-timeline.ts
index 919b0662a..c05b88a01 100644
--- a/src/server/api/endpoints/notes/hybrid-timeline.ts
+++ b/src/server/api/endpoints/notes/hybrid-timeline.ts
@@ -119,12 +119,10 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
_id: -1
};
- const followQuery = followings.map(f => f.stalk ? {
- userId: f.id
- } : {
+ const followQuery = followings.map(f => ({
userId: f.id,
- // ストーキングしてないならリプライは含めない(ただし投稿者自身の投稿へのリプライ、自分の投稿へのリプライ、自分のリプライは含める)
+ // リプライは含めない(ただし投稿者自身の投稿へのリプライ、自分の投稿へのリプライ、自分のリプライは含める)
$or: [{
// リプライでない
replyId: null
@@ -140,7 +138,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
// 自分(フォロワー)が送信したリプライ
userId: user._id
}]
- });
+ }));
const visibleQuery = user == null ? [{
visibility: { $in: [ 'public', 'home' ] }
diff --git a/src/server/api/endpoints/notes/timeline.ts b/src/server/api/endpoints/notes/timeline.ts
index 24ed222e9..9b0cc6ac2 100644
--- a/src/server/api/endpoints/notes/timeline.ts
+++ b/src/server/api/endpoints/notes/timeline.ts
@@ -117,9 +117,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
_id: -1
};
- const followQuery = followings.map(f => f.stalk ? {
- userId: f.id
- } : {
+ const followQuery = followings.map(f => ({
userId: f.id,
// ストーキングしてないならリプライは含めない(ただし投稿者自身の投稿へのリプライ、自分の投稿へのリプライ、自分のリプライは含める)
@@ -138,7 +136,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
// 自分(フォロワー)が送信したリプライ
userId: user._id
}]
- });
+ }));
const visibleQuery = user == null ? [{
visibility: { $in: [ 'public', 'home' ] }
diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index 8031746c8..f8d1c2408 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -540,12 +540,9 @@ async function publishToFollowers(note: INote, user: IUser, noteActivity: any) {
const follower = following._follower;
if (isLocalUser(follower)) {
- // ストーキングしていない場合
- if (!following.stalk) {
- // この投稿が返信ならスキップ
- if (note.replyId && !note._reply.userId.equals(following.followerId) && !note._reply.userId.equals(note.userId))
- continue;
- }
+ // この投稿が返信ならスキップ
+ if (note.replyId && !note._reply.userId.equals(following.followerId) && !note._reply.userId.equals(note.userId))
+ continue;
// Publish event to followers stream
publishHomeTimelineStream(following.followerId, detailPackedNote);