Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: アンテナでセンシティブなチャンネルからのノートを除外できるように #15346

Open
wants to merge 10 commits into
base: develop
Choose a base branch
from

Conversation

sevenc-nanashi
Copy link
Contributor

@sevenc-nanashi sevenc-nanashi commented Jan 25, 2025

What

タイトル通りです。

Why

closes: #14177

Additional info (optional)

手元の環境ではなぜかESLintのフォーマットが効かなかったので手動フォーマットしています。(おそらく何か間違えている...)

Checklist

  • Read the contribution guide
  • Test working in a local environment
  • (If needed) Add story of storybook
  • (If needed) Update CHANGELOG.md
  • (If possible) Add tests

@github-actions github-actions bot added packages/frontend Client side specific issue/PR packages/backend Server side specific issue/PR packages/misskey-js packages/backend:test labels Jan 25, 2025
Copy link

codecov bot commented Jan 25, 2025

Codecov Report

Attention: Patch coverage is 38.23529% with 21 lines in your changes missing coverage. Please review.

Project coverage is 40.44%. Comparing base (791b450) to head (f98076e).

Files with missing lines Patch % Lines
...backend/src/server/api/endpoints/antennas/notes.ts 0.00% 12 Missing ⚠️
...ckages/frontend/src/components/MkAntennaEditor.vue 0.00% 4 Missing ⚠️
packages/backend/src/core/AntennaService.ts 0.00% 2 Missing ⚠️
.../backend/src/core/entities/AntennaEntityService.ts 0.00% 1 Missing ⚠️
...ackend/src/server/api/endpoints/antennas/create.ts 50.00% 1 Missing ⚠️
...ackend/src/server/api/endpoints/antennas/update.ts 50.00% 1 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##           develop   #15346      +/-   ##
===========================================
+ Coverage    38.75%   40.44%   +1.69%     
===========================================
  Files         1601     1605       +4     
  Lines       204020   209879    +5859     
  Branches      4012     4058      +46     
===========================================
+ Hits         79065    84887    +5822     
- Misses      124319   124356      +37     
  Partials       636      636              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Copy link
Contributor

github-actions bot commented Jan 25, 2025

このPRによるapi.jsonの差分

差分はこちら
--- base
+++ head
@@ -18394,6 +18394,9 @@
                   },
                   "withFile": {
                     "type": "boolean"
+                  },
+                  "hideNotesInSensitiveChannel": {
+                    "type": "boolean"
                   }
                 },
                 "required": [
@@ -19295,6 +19298,9 @@
                   },
                   "withFile": {
                     "type": "boolean"
+                  },
+                  "hideNotesInSensitiveChannel": {
+                    "type": "boolean"
                   }
                 },
                 "required": [
@@ -81699,6 +81705,10 @@
           "notify": {
             "type": "boolean",
             "default": false
+          },
+          "hideNotesInSensitiveChannel": {
+            "type": "boolean",
+            "default": false
           }
         },
         "required": [
@@ -81717,7 +81727,8 @@
           "withFile",
           "isActive",
           "hasUnreadNote",
-          "notify"
+          "notify",
+          "hideNotesInSensitiveChannel"
         ]
       },
       "Clip": {

Get diff files from Workflow Page

@@ -52,6 +52,7 @@
- Enhance: チャート更新時にDBに同時接続しないように
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/830)
- Enhance: config(default.yml)からSQLログ全文を出力するか否かを設定可能に ( #15266 )
- Enhance: アンテナでセンシティブなチャンネルのノートを除外できるように ( #14177 )
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Server欄に書きましたが、General欄の方があっているかもしれません(どこで区切るのかがよくわかっていないです)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

フロントエンドにも変更が及んでいるためGeneral欄でよさそうです(ここの変更は弄ったpackageベースで考えていいはずです)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ありがとうございます。

PRのmilestoneを見る限り2025.2.0以降になるので、developのCHANGELOGに2025.2.0のセクションが増えたらそれの追従と一緒に移動しようと思います。

@@ -410,6 +410,7 @@ export class NoteCreateService implements OnApplicationShutdown {
replyId: data.reply ? data.reply.id : null,
renoteId: data.renote ? data.renote.id : null,
channelId: data.channel ? data.channel.id : null,
channel: data.channel,
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

センシティブチャンネルかどうかの情報を取得するためにここのコンストラクタにチャンネルを渡していますが、もしかしたらORM的にはよくないかもしれません。

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

channneldを挿入しているのでここでchannelを追加せずともチャンネル情報はjoinして取得することが可能となってはいないでしょうか

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

センシティブチャンネルかどうかを取得するcheckHitAntennaでjoinのクエリをするとクエリがアンテナの数だけ行われて結構負荷がかかりそうなんですよね。
そもそもここでchannel: data.channelをしておけばクエリ数が増えることも無いのでここに増やしました。

が、これはもしかしたら何らかのしきたりに反するかもしれないな...というのが上のコメントの意図でした(ごめんなさい)。

@@ -113,6 +113,18 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
.leftJoinAndSelect('reply.user', 'replyUser')
.leftJoinAndSelect('renote.user', 'renoteUser');

if (antenna.hideNotesInSensitiveChannel) {
// TypeORMにはRIGHT JOINがないので、サブクエリで代用。
Copy link
Contributor Author

@sevenc-nanashi sevenc-nanashi Jan 25, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

「channelIdがNULL、またはchannelIdの指すchannelのisSensitiveがfalse」を「channelIdがNULL、またはisSensitive = falseなid = channelIdのchannelが存在する」で代用しました。

@@ -626,6 +629,42 @@ describe('アンテナ', () => {
assert.deepStrictEqual(response, expected);
});

test('が取得できること(センシティブチャンネルのノートを除く)', async () => {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

これだけチャンネル作成が必要になってくるので上のeachとは別に書いています。

@sevenc-nanashi sevenc-nanashi force-pushed the feat/hide-sensitive-from-antenna branch from d8c380a to f98076e Compare January 26, 2025 10:08
Comment on lines +116 to +127
if (antenna.hideNotesInSensitiveChannel) {
// TypeORMにはRIGHT JOINがないので、サブクエリで代用。
query
.andWhere('note.channelId IS NULL OR EXISTS(' +
query.subQuery()
.from('channel', 'channel')
.where('channel.id = note.channelId')
.andWhere('channel.isSensitive = false')
.getQuery() +
' )');
}

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

このクエリ、悩ましいですね…
NoteCreateServiceでredisに積む段階で既にフィルタ済みなので、

  • redisに積んでから設定が変わったチャンネルのノートを取り除く
  • redisに積んでからアンテナの設定を変えてたことにより除外対象となったチャンネルのノートを取り除く

というケースでしか作用せず、コスト対効果がいまいちな気がしております。
(ブロック・ミュートとは異なり、どちらもそうそう変えるものでもないと思われるため)

@syuilo どうでしょう

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
packages/backend:test packages/backend Server side specific issue/PR packages/frontend Client side specific issue/PR packages/misskey-js
Projects
Development

Successfully merging this pull request may close these issues.

センシティブチャンネルをアンテナから除外できる設定をつけてほしい
4 participants