NIP-51 kind 10000あたりを念頭に目玉をミュートしようと思ってたんだけど、リレーもクライアントもあんまりまだこれは実装してないのかな。
YoshikuniJujo
YoshikuniJujo@yoshikunijujo.github.io
npub1a7y7...fdm2
Haskell好き
目玉の話。
リレー側だったら「目玉アカウント」を検出した時点でIPアドレスを数時間ブロックするみたいな感じで対応できそう。
Haskellのコードの「量」だけならだんとつ。
「量」は「愛」だからね。僕はHaskellでコードにできるものすべてに関心があります。
片目の絵文字の文字コードは128065だ。
目玉消えた
目玉、kind7でcontentが目玉だったとき、そのアカウントが過去1年kind1を発行してなければミュートするみたいなクライアントを作ればいいんじゃないかな。
あとkind0がないことも確認かな。
うにゅう、おはよう
/run hs
import Data.Char
main = putStrLn $ chr <$> [12390, 12377, 12392]
/run hs
import Data.Char
main = putStrLn $ char <$> [12390, 12377, 12392]
/run hs
main = putStrLn "\\12390\\12377\\12392"
/run hs
main = putStrLn "\12390\12377\12392"
めんどくさいけど、とりあえずさっき定義したテーブルを作成して、Event型の値と秘密鍵からSQLのINSERT文を作る関数でも作ろうかな。で、サンプルを2から3個INSERTしておこう。
/run hs
main = putStrLn "test"
/run help
/run hs
main = putStrLn "テスト"
Nostrのイベントを格納するデータベースは
id 文字列
pubkey 文字列
created_at 整数
kind 整数
a 文字列
b 文字列
c 文字列
...
A 文字列
B 文字列
C 文字列
...
content 文字列
sig 文字列
って感じかな。
タグのあたりがやっかいなのだけど、「一文字タグはすべて保存し、それ以外は無視。タグについては「値」より後の内容は無視することにする。
JSONはゆるすぎるので、データベースにするときにちょっとやっかいだったりする。
なんだかめんどくさくなってきたけど、流れとしては次の感じ。
データベースのテーブルを作成する
JSONをEvent型の値に変換
Event型の値の署名を検証
Event型の値をデータベースに書き込む
Eventの構読要求が来たとき、めんどくさいのがfilterの組み立てなのだけど、とりあえずJSONをSQL文に変換する関数を書いておけばいいかな。これは、まあまあめんどくさい気がする。
JSONとSQL文のあいだにFilter型の値をはさんだほうが良さそうだ。
で、Filter型の値を簡単に作成できるような関数とテスト用のデータを用意して、対話環境で試しながら書くのがいいかと。
でFilterを表すSQL文ができれば、あとはデータベースから取り出したEventをEvent型の値に変換して、それをJSONに変換してクライアントに送ればいい。
とりあえずそこまでやるか。
リレーは投稿の署名を検証しなくちゃいけないのかな。原理的に言えば「しなくてもいい」となりそうだけど、もちろん「したほうがいい」のは「それはそう」なんだけど仕様としてはどうなってるのかな。
Nip-11を実装しようとしたらwebsocketパッケージは使えないな。HTTPで接続してからWebSocketsにUpgradeするまでのあいだにHTTPでサーバの情報を送らなくちゃならないってことだと思うので。多分そういうことだと思う。
あと、よく考えたらWebSocketsじゃないHTTPクライアントから接続されたときに、何かしらの「まあまあちゃんとしたもの」を返すようにしておいたほうがいいのかもしれない。
となるとWebSocketを実装する他のパッケージを探すか、あるいは自分で書かなくちゃならない。