Merge branch 'develop' into niri-la/mute-channel-from-featured

This commit is contained in:
anatawa12 2023-07-27 19:51:16 +09:00 committed by GitHub
commit 72f24f03d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 60 additions and 2 deletions

View File

@ -22,6 +22,7 @@
- ユーザーにロールが期限付きでアサインされている場合、その期限をユーザーのモデレーションページで確認できるようになりました
- identicon生成を無効にしてパフォーマンスを向上させることができるようになりました
- サーバーのマシン情報の公開を無効にしてパフォーマンスを向上させることができるようになりました
- 管理者専用の他人を見るwebhookが増えました
- ハイライトからおはnoteとチャンネル投稿を除外するようになりました
### Client
@ -43,7 +44,6 @@
- リストTLで、ユーザーが追加・削除されてもTLを初期化しないように
- URL取得変数を関数に変更 CURRENT_URL -> Mk:url()
- プレビューの表示状態を記憶するように
- 管理者専用の他人を見るwebhookが増えました
- Fix: サーバーメトリクスが90度傾いている
- Fix: 非ログイン時にクレデンシャルが必要なページに行くとエラーが出る問題を修正
- Fix: sparkle内にリンクを入れるとクリック不能になる問題の修正
@ -69,6 +69,7 @@
- Export notes with file detail
- Add unix socket support
- 設定ファイルでioredisの全てのオプションを指定可能に
- 通報をDiscordのWebhookに送信できるように
- Fix: エクスポートしたカスタム絵文字のzipが大きいと読み込めない問題を修正
- Fix: リモートサーバーに無意味なActivityPubの配信を行うことがあるのを修正
- Fix: Remove Meilisearch index when notes are deleted

View File

@ -87,6 +87,10 @@ export type Source = {
videoThumbnailGenerator?: string;
signToActivityPubGet?: boolean;
nirila?: {
abuseDiscordHook: string;
}
};
/**

View File

@ -0,0 +1,40 @@
import { Inject, Injectable } from '@nestjs/common';
import { DI } from '@/di-symbols.js';
import type { User } from '@/models/entities/User.js';
import { bindThis } from '@/decorators.js';
import type { Config } from '@/config.js';
import { HttpRequestService } from '@/core/HttpRequestService.js';
@Injectable()
export class AbuseDiscordHookService {
constructor(
@Inject(DI.config)
private config: Config,
private httpRequestService: HttpRequestService,
) {
}
@bindThis
public send(me: User, user: User, comment: string): void {
const webhookUrl = this.config.nirila?.abuseDiscordHook;
if (webhookUrl) {
setImmediate(async () => {
const content = 'New abuse report created!\n'
+ `author: \`@${me.username}${me.host ? `@${me.host}` : ''}\`\n`
+ `target user: \`@${user.username}${user.host ? `@${user.host}` : ''}\`\n`
+ 'Comment:\n'
+ comment;
await this.httpRequestService.send(webhookUrl, {
method: 'POST',
headers: {
'User-Agent': 'Niri-la-Misskey-Hooks',
'Content-Type': 'application/json',
},
body: JSON.stringify({ content }),
});
});
}
}
}

View File

@ -118,6 +118,7 @@ import { ApQuestionService } from './activitypub/models/ApQuestionService.js';
import { QueueModule } from './QueueModule.js';
import { QueueService } from './QueueService.js';
import { LoggerService } from './LoggerService.js';
import { AbuseDiscordHookService } from './AbuseDiscordHookService.js';
import type { Provider } from '@nestjs/common';
//#region 文字列ベースでのinjection用(循環参照対応のため)
@ -366,6 +367,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
ApPersonService,
ApQuestionService,
QueueService,
AbuseDiscordHookService,
//#region 文字列ベースでのinjection用(循環参照対応のため)
$LoggerService,
@ -606,6 +608,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
ApPersonService,
ApQuestionService,
QueueService,
AbuseDiscordHookService,
//#region 文字列ベースでのinjection用(循環参照対応のため)
$LoggerService,

View File

@ -24,6 +24,7 @@ import { QueueService } from '@/core/QueueService.js';
import type { UsersRepository, NotesRepository, FollowingsRepository, AbuseUserReportsRepository, FollowRequestsRepository } from '@/models/index.js';
import { bindThis } from '@/decorators.js';
import type { RemoteUser } from '@/models/entities/User.js';
import { AbuseDiscordHookService } from '@/core/AbuseDiscordHookService.js';
import { getApHrefNullable, getApId, getApIds, getApType, isAccept, isActor, isAdd, isAnnounce, isBlock, isCollection, isCollectionOrOrderedCollection, isCreate, isDelete, isFlag, isFollow, isLike, isMove, isPost, isReject, isRemove, isTombstone, isUndo, isUpdate, validActor, validPost } from './type.js';
import { ApNoteService } from './models/ApNoteService.js';
import { ApLoggerService } from './ApLoggerService.js';
@ -81,6 +82,7 @@ export class ApInboxService {
private accountMoveService: AccountMoveService,
private cacheService: CacheService,
private queueService: QueueService,
private abuseDiscordHookService: AbuseDiscordHookService,
) {
this.logger = this.apLoggerService.logger;
}
@ -512,6 +514,8 @@ export class ApInboxService {
});
if (users.length < 1) return 'skip';
const comment = `${activity.content}\n${JSON.stringify(uris, null, 2)}`;
await this.abuseUserReportsRepository.insert({
id: this.idService.genId(),
createdAt: new Date(),
@ -519,9 +523,11 @@ export class ApInboxService {
targetUserHost: users[0].host,
reporterId: actor.id,
reporterHost: actor.host,
comment: `${activity.content}\n${JSON.stringify(uris, null, 2)}`,
comment,
});
this.abuseDiscordHookService.send(actor, users[0], comment);
return 'ok';
}

View File

@ -9,6 +9,7 @@ import { EmailService } from '@/core/EmailService.js';
import { DI } from '@/di-symbols.js';
import { GetterService } from '@/server/api/GetterService.js';
import { RoleService } from '@/core/RoleService.js';
import { AbuseDiscordHookService } from '@/core/AbuseDiscordHookService.js';
import { ApiError } from '../../error.js';
export const meta = {
@ -64,6 +65,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
private getterService: GetterService,
private roleService: RoleService,
private globalEventService: GlobalEventService,
private abuseDiscordHookService: AbuseDiscordHookService,
) {
super(meta, paramDef, async (ps, me) => {
// Lookup user
@ -110,6 +112,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
sanitizeHtml(ps.comment));
}
});
this.abuseDiscordHookService.send(me, user, ps.comment);
});
}
}