Merge branch 'develop' into niri-la/mute-channel-from-featured
This commit is contained in:
commit
72f24f03d8
|
@ -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
|
||||
|
|
|
@ -87,6 +87,10 @@ export type Source = {
|
|||
videoThumbnailGenerator?: string;
|
||||
|
||||
signToActivityPubGet?: boolean;
|
||||
|
||||
nirila?: {
|
||||
abuseDiscordHook: string;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -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 }),
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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,
|
||||
|
|
|
@ -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';
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue