misskey-dev / misskey

🌎 A completely free and open interplanetary microblogging platform 🚀
https://misskey-hub.net/
GNU Affero General Public License v3.0
9.99k stars 1.36k forks source link

アンテナ #5754

Closed syuilo closed 4 years ago

syuilo commented 4 years ago

Summary

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

syuilo commented 4 years ago

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

syuilo commented 4 years ago

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

syuilo commented 4 years ago

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

syuilo commented 4 years ago

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

syuilo commented 4 years ago

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

syuilo commented 4 years ago

式評価はこれで https://github.com/donmccurdy/expression-eval

rinsuki commented 4 years ago

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

syuilo commented 4 years ago

それ式なの?

syuilo commented 4 years ago

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

syuilo commented 4 years ago

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

syuilo commented 4 years ago

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

syuilo commented 4 years ago

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

syuilo commented 4 years ago

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

syuilo commented 4 years ago

やっぱり別にしよう

syuilo commented 4 years ago

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

rinsuki commented 4 years ago

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

syuilo commented 4 years ago

ひーっ

acid-chicken commented 4 years ago

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

yumetodo commented 4 years ago

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

syuilo commented 4 years ago

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

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

syuilo commented 4 years ago

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

tateisu commented 4 years ago

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

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

syuilo commented 4 years ago

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

syuilo commented 4 years ago

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

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