RSS ログイン
Date==== Time==== Update==== Time==== Title==== [[W]WRITE [RET]READ [?]HELP]
2025-02-01 17:51:53 2025-02-08 17:20:16 【備忘録】Misskeyにフォロー解除通知とブロック通知を搭載した
TEXT FILE (  21KiB ) を受信しますか? [Y]/[N] > Y

備忘録 Misskey 通知 改造 TypeScript JavaScript

はじまり


てことで実装する

Misskeyを理解する

/packagesに全部詰まってることは理解した

フォロー解除

/packages/backend/src/core/UserFollowingService.tsにフォロー、
そしてフォロー解除も入ってるっぽい
色々探した所public async unfollowがそれっぽい
この関数の一番下に書くとする
通知を発行するには
this.notificationService.createNotification(送りつけ先, 通知のタイプ, {必要なら何かしらのデータを}, 通知に表示するアイコン);
followerがフォロー解除した張本人
そしてfolloweeが解除された人
なのでこう書けばいい
this.notificationService.createNotification(followee.id, 'unfollow', {}, follower.id);

通知のタイプの追加

/packages/backend/src/models/Notification.tsに通知のタイプとかも入ってるっぽい
export type MiNotification = {に追記しよう
{//↓フォロー解除
	type: 'unfollow';
	id: string;
	createdAt: string;
	notifierId: MiUser['id'];
}
これでフォロー解除通知を発行できるようになった、

ブロック通知

この調子で次はブロック関係も実装しよう
この例ではブロック通知のみで、解除は実装しない
やろうと思えばできるのでやってみよう()

/packages/backend/src/core/UserBlockingService.tsにブロック関係が入っている
public async block(blocker: MiUser, blockee: MiUser, silent = false) {
がブロック時に実行されるやつだ

blockerがした人
blockeeがされた人

なのでこれにも通知発行を搭載すればいい、
だけどこのクラスにはまだ通知を発行するやつがインポートされてないので、
それを先にする。

一番上を見てみよう、「import」がいっぱい書かれた場所がある
ここに適当に追記しよう
import { NotificationService } from '@/core/NotificationService.js';
次はexport class UserBlockingService implements OnModuleInit {の中の
constructor{に追記する
private notificationService: NotificationService
これで完了、さっきの「block」関数に戻ろう
この関数の最後の方に通知発行を搭載しよう
あ、フォロー解除で紹介した通知のタイプを追加するやつもやらないとエラー出るので
this.notificationService.createNotification(blockee.id, 'blocked', {}, blocker.id);

クライアント側

此処まで来たらたぶん通知が発行される。
が、多分こうなってると思う

これじゃ何の通知かわからないので、直していく

まずは/packages/frontend-shared/js/const.tsを開く
そこにexport const notificationTypes = [ってのがあるので
そこに追記する
フォロー解除とブロック通知なので、unfollowblockedを追記すればいい

次は/packages/frontend/src/components/MkNotification.vueを開く
説明したいところだが、だるいので、コードをそのまま貼るから解読してくれ()
ほぼHTMLだからだいたいわかると思う。





			
コメントも書いたから多分理解できる、、、はず
最悪全部コピペしていいよ、OSSだから