Misskey: アンテナ

Created on 25 Jan 2020  ·  24Comments  ·  Source: syuilo/misskey

Summary


名称は仮。
設定した条件に一致するノートを収集する機能
まずソース(ホーム、ローカル、リスト、全投稿など)を選び、フィルター(キーワード、メディアが添付されているか、ユーザーのフォロワー数など)をいくつでも組み合わせて「クリップ」を設定する
Pagesの編集画面ようなUIで、AndやOrを入れ子にしたりできる
ミュートしているユーザーを含むかどうかなども設定できるようにする
Misskeyに投稿がされると、データベース上のクリップ全てに対して、その投稿が条件に合致するか判定し、合致した場合そのクリップとその投稿を紐づけるレコードを挿入する
またそのクリップに新しい投稿が追加されたことを示すフラグも立て、ユーザーに通知することができるようにする
クリップの投稿を取得するAPIが叩かれた時か、もしくはクリップを既読にするAPIを叩かれたときにフラグをオフにする
データベースへの負荷などを考えて、クリップ作成前の投稿を自動収集したりはしない
あくまでもクリップ作成後の投稿のみが対象

✨Feature

Most helpful comment

ブロックが含まれてる時点で式ではなさそうだし、jespのドキュメントやソースコード読んだけどwhileやブロックが解析されている様子はないので問題なさそう

All 24 comments

ただキーワード以外でフィルタしたいケース少なそうだから単にキーワード指定でいいかもしれない

クリップごとに通知するかどうかを決められる方が良さそう

キーワードは現在のミュートワードと同じようにスペース区切りでAND、改行でORで設定するのが楽そう

ハッシュタグのページから直接そのハッシュタグを集めるクリップを作成できるようにすると便利そう

んーまあどうせなら高度なオプションとしてJavaScript式を使えるようにしてもいいかもしれない

while(true){}でオワオワリになりそう

それ式なの?

ブロックが含まれてる時点で式ではなさそうだし、jespのドキュメントやソースコード読んだけどwhileやブロックが解析されている様子はないので問題なさそう

クリップは単に複数の投稿をまとめられる機能(#425)にして、その中に「オートクリップ」としてオプション機能を実装する感じがいいかも

んーやっぱり別々の機能として分離するか
結構性質違うし(通知が必要かどうかとか、第三者に公開するかどうかとか、タイムライン選択時に一覧として出すべきかどうかとか)

複数の投稿をまとめられる機能 --> クリップ
条件に一致した投稿を自動収集する機能 --> アンテナ(仮)
で良さそう

めんどいから一緒でいいや

やっぱり別にしよう

負荷軽減のため、アンテナに保存されるのは1週間以内の投稿に限り、アンテナ作成時にデータベースの1週間以内の投稿をすべてチェックして収集するようにしてもいいかも

misskey.ioぐらいの規模と場合によっては一週間でも1万件以上舐めることになりそうでつらそう
image

ひーっ

while 文が直接使えなくても 0.constructor.constructor('while(true){}')() とかで何とでもやりようはあるので若干怖い

ハッシュタグとユーザー名ベースだけに限定して、投稿されたとき側でフックとかできないんでしょうか(よくわかっていませんが

ハッシュタグとユーザー名ベースだけに限定して、投稿されたとき側でフックとかできないんでしょうか(よくわかっていませんが

現在はそのような実装になってます

式を記述できるようにするとしたら言語自作するという方法もある

式が高負荷になる例としては 正規表現 (.)^ があります。
http://moyolab.blog57.fc2.com/blog-entry-73.html

しかし正規表現フィルタを禁止すると機能が著しく低下しますね

正規表現はReDoSが怖いため使えるようにする予定はまだないですね。
あまり正規表現が必要になるケースが思いつかないというのもあります

こういうのがあった
https://github.com/uhop/node-re2

これ使えばReDoSは大丈夫かも

Was this page helpful?
0 / 5 - 0 ratings