summaryrefslogtreecommitdiff
path: root/packages/backend/src
diff options
context:
space:
mode:
authorHazelnoot <acomputerdog@gmail.com>2025-05-11 05:46:40 -0400
committerHazelnoot <acomputerdog@gmail.com>2025-05-14 23:24:51 -0400
commitdee2e19b6352197a2d8b764f81e15690967845a4 (patch)
treed430489bc5b90009d829bbf1b4d84afad7f32e08 /packages/backend/src
parentcheck ps.trending before hiding non-explorable users from /users endpoint (diff)
downloadsharkey-dee2e19b6352197a2d8b764f81e15690967845a4.tar.gz
sharkey-dee2e19b6352197a2d8b764f81e15690967845a4.tar.bz2
sharkey-dee2e19b6352197a2d8b764f81e15690967845a4.zip
don't trend notes from non-explorable or non-trendable users
Diffstat (limited to 'packages/backend/src')
-rw-r--r--packages/backend/src/core/NoteCreateService.ts27
-rw-r--r--packages/backend/src/core/ReactionService.ts24
-rw-r--r--packages/backend/src/server/api/endpoints/notes/featured.ts3
3 files changed, 33 insertions, 21 deletions
diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts
index 4514f3decd..097d657ba3 100644
--- a/packages/backend/src/core/NoteCreateService.ts
+++ b/packages/backend/src/core/NoteCreateService.ts
@@ -633,7 +633,7 @@ export class NoteCreateService implements OnApplicationShutdown {
}
if (this.isRenote(data) && !this.isQuote(data) && data.renote.userId !== user.id && !user.isBot) {
- this.incRenoteCount(data.renote);
+ this.incRenoteCount(data.renote, user);
}
if (data.poll && data.poll.expiresAt) {
@@ -816,8 +816,8 @@ export class NoteCreateService implements OnApplicationShutdown {
}
@bindThis
- private incRenoteCount(renote: MiNote) {
- this.notesRepository.createQueryBuilder().update()
+ private async incRenoteCount(renote: MiNote, user: MiUser) {
+ await this.notesRepository.createQueryBuilder().update()
.set({
renoteCount: () => '"renoteCount" + 1',
})
@@ -825,15 +825,18 @@ export class NoteCreateService implements OnApplicationShutdown {
.execute();
// 30%の確率、3日以内に投稿されたノートの場合ハイライト用ランキング更新
- if (Math.random() < 0.3 && (Date.now() - this.idService.parse(renote.id).date.getTime()) < 1000 * 60 * 60 * 24 * 3) {
- if (renote.channelId != null) {
- if (renote.replyId == null) {
- this.featuredService.updateInChannelNotesRanking(renote.channelId, renote, 5);
- }
- } else {
- if (renote.visibility === 'public' && renote.userHost == null && renote.replyId == null) {
- this.featuredService.updateGlobalNotesRanking(renote, 5);
- this.featuredService.updatePerUserNotesRanking(renote.userId, renote, 5);
+ if (user.isExplorable && Math.random() < 0.3 && (Date.now() - this.idService.parse(renote.id).date.getTime()) < 1000 * 60 * 60 * 24 * 3) {
+ const policies = await this.roleService.getUserPolicies(user);
+ if (policies.canTrend) {
+ if (renote.channelId != null) {
+ if (renote.replyId == null) {
+ this.featuredService.updateInChannelNotesRanking(renote.channelId, renote, 5);
+ }
+ } else {
+ if (renote.visibility === 'public' && renote.userHost == null && renote.replyId == null) {
+ this.featuredService.updateGlobalNotesRanking(renote, 5);
+ this.featuredService.updatePerUserNotesRanking(renote.userId, renote, 5);
+ }
}
}
}
diff --git a/packages/backend/src/core/ReactionService.ts b/packages/backend/src/core/ReactionService.ts
index 373fea8605..a93605d2db 100644
--- a/packages/backend/src/core/ReactionService.ts
+++ b/packages/backend/src/core/ReactionService.ts
@@ -30,6 +30,7 @@ import { trackPromise } from '@/misc/promise-tracker.js';
import { isQuote, isRenote } from '@/misc/is-renote.js';
import { ReactionsBufferingService } from '@/core/ReactionsBufferingService.js';
import { PER_NOTE_REACTION_USER_PAIR_CACHE_MAX } from '@/const.js';
+import { CacheService } from '@/core/CacheService.js';
const FALLBACK = '\u2764';
@@ -102,6 +103,7 @@ export class ReactionService {
private apDeliverManagerService: ApDeliverManagerService,
private notificationService: NotificationService,
private perUserReactionsChart: PerUserReactionsChart,
+ private readonly cacheService: CacheService,
) {
}
@@ -220,14 +222,20 @@ export class ReactionService {
note.userId !== user.id &&
(Date.now() - this.idService.parse(note.id).date.getTime()) < 1000 * 60 * 60 * 24 * 3
) {
- if (note.channelId != null) {
- if (note.replyId == null) {
- this.featuredService.updateInChannelNotesRanking(note.channelId, note, 1);
- }
- } else {
- if (note.visibility === 'public' && note.userHost == null && note.replyId == null) {
- this.featuredService.updateGlobalNotesRanking(note, 1);
- this.featuredService.updatePerUserNotesRanking(note.userId, note, 1);
+ const author = await this.cacheService.findUserById(note.userId);
+ if (author.isExplorable) {
+ const policies = await this.roleService.getUserPolicies(author);
+ if (policies.canTrend) {
+ if (note.channelId != null) {
+ if (note.replyId == null) {
+ this.featuredService.updateInChannelNotesRanking(note.channelId, note, 1);
+ }
+ } else {
+ if (note.visibility === 'public' && note.userHost == null && note.replyId == null) {
+ this.featuredService.updateGlobalNotesRanking(note, 1);
+ this.featuredService.updatePerUserNotesRanking(note.userId, note, 1);
+ }
+ }
}
}
}
diff --git a/packages/backend/src/server/api/endpoints/notes/featured.ts b/packages/backend/src/server/api/endpoints/notes/featured.ts
index 02d572e89b..8ab9f72139 100644
--- a/packages/backend/src/server/api/endpoints/notes/featured.ts
+++ b/packages/backend/src/server/api/endpoints/notes/featured.ts
@@ -117,7 +117,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
.leftJoinAndSelect('note.renote', 'renote')
.leftJoinAndSelect('reply.user', 'replyUser')
.leftJoinAndSelect('renote.user', 'renoteUser')
- .leftJoinAndSelect('note.channel', 'channel');
+ .leftJoinAndSelect('note.channel', 'channel')
+ .andWhere('user.isExplorable = TRUE');
this.queryService.generateBlockedHostQueryForNote(query);