HN 日本語サマリー

← 一覧へ戻る
オープンソース

Parley: プレーンIRCを話す、連合型・分散型チャット

Parley: Federated, decentralised chat that speaks plain IRC (git.mills.io)

327 pointsby davidcollantes190 コメント

要約

Parleyは、中央集権的な管理者を必要としない、連合型・分散型のチャットネットワークです。各ユーザーまたはチームは自身のドメインで小規模なインスタンスを実行し、DNSと公開されているIDドキュメントを通じて他のインスタンスと接続します。HTTPS経由で署名付きメッセージを交換し、通常のIRCクライアント(irssi、WeeChat、Textualなど)でプラグインなしに利用できます。このプロジェクトは現在、概念実証が機能しており、エンドツーエンドで設計を示していますが、まだ強化されていません。

全文翻訳

prologic/parley ウォッチ 1 スター 1 フォーク あなたはすでにparleyをフォークしています コード イシュー 3 プルリクエスト アクション リリース 5 ウィキ アクティビティ 198 コミット 1 ブランチ 5 タグ main ファイルに移動 ファイルを追加 新規ファイル アップロードファイル パッチを適用 コード クローン HTTPS Tea CLI VS Codeで開く VSCodiumで開く IntelliJ IDEAで開く ZIPをダウンロード TAR.GZをダウンロード バンドルをダウンロード fastidious 7198c5c2ee すべてのチェックが成功しました 🚀 公開 / 🧪 テストと検証 (プッシュ) 7m13sで成功 詳細 🚀 公開 / 公開 (プッシュ) 13m10sで成功 詳細 🚀 公開 / 🚢 デプロイ (プッシュ) 2sで成功 詳細 アップロード: クライアントが呼んだ名前ではなく、ランダムな名前を付ける (#46) ... #45のフォローアップ。アップロードはクライアントが送信したファイル名を保持し、それを公開していました。リンク、ダウンロード保存名、管理リストで。写真の共有も、所有者が呼んだ名前、例えば「Jane Doe passport.JPEG」を共有していました。 ## 変更 - ランダムに命名。ファイルは現在、既に持っていたランダムな128ビットIDを使用した「<id>.<ext>」です。クライアントのファイル名は、クライアントが指定しない場合にタイプを推測するためだけに読み取られ、その後破棄されます。 - 拡張子は提供されるタイプに従います。「image/jpeg」は、名前が何であっても「.jpg」となり、「text/plain」は「.txt」となります。クライアントは拡張子でプレビューを選択するため、リンクはそのファイルが何であるかを示します。不明なタイプは、クライアントの名前からクリーンな拡張子(文字と数字、最大8文字、例: `.zip`または`.docx`)を保持するか、拡張子なしで保持します。 - リンクは「<endpoint>/files/<id>.<ext>」となり、ダウンロードも同じ名前で保存されます。 - 前回のアップロード。「main」はマージ時にデプロイされるため、#45でアップロードされたファイルには元の名前が含まれている場合があります。 - これらのレコードは、ストアが開かれるときに「<id>.<ext>」にリネームされます。 - `/files/<id>/<original-name>`形式のリンクは、ファイルがIDのみで検索されるため、引き続き機能します。 `image/jpeg`として送信された「Jane Doe passport.JPEG」の、変更前と変更後: ``` 変更前: https://example.com/files/<id>/Jane%20Doe%20passport.JPEG (保存名: "Jane Doe passport.JPEG") 変更後: https://example.com/files/<id>.jpg (保存名: "<id>.jpg") ``` ## 仕様とドキュメント - `parley.bt`: 新しいR200、命名と起動時のリネームのためのノード、およびトレーサビリティ行が含まれます。R197はクライアントのファイル名に関する条項を削除します。`bte check`は0エラーを報告し、7つの警告は既に存在していました。 - `docs/API.md`, `docs/PROTOCOL.md`: 新しいリンク形式と、ファイル名が保持されないという事実。 ## テスト - `make test`は`-race`オプション付きでパスします。 - 新しいテスト: - `TestAnUploadIsRenamedAtRandom`: 名前はリンク、ダウンロード名、管理リストにありません。同じファイルが2回アップロードされると、2つの異なるリンクが生成されます。 - `TestAnUploadKeepsOnlyWhatKindOfFileItIs`: 拡張子のルール。 - `TestAClientsFilenameIsNeverStored`: `Put`は名前を受け付けず、既存のレコードはリネームされます。 - `TestAnUploadedFileIsServedLikeAFile`は、古い`/files/<id>/<name>`形式と不明な拡張子もチェックするようになりました。 - 実行中の`parleyd`に対してチェックしました。`Jane Doe passport.JPEG`という名前でアップロードされたファイルは、`/files/dax4pmbwpzdxzhuvo6zllpmgta.jpg`として返され、同じ名前で保存されました。 🤖 Claude Codeで生成 共著: David Collantes <david@collantes.us> レビュー済み: #46 2026-09-30 22:38:13 +00:00 .gitea/workflows チャット: 1アカウントが発言できる量と、真実を保つ仕様 2026-09-19 07:06:01 +10:00 cmd アップロード: IRCクライアントからファイルを添付 (soju.im/FILEHOST) (#45) 2026-09-30 22:10:21 +00:00 demo チャット: 承認された+replyタグを読み取り、両方の名前を送信 (#36) 2026-09-22 22:03:08 +00:00 docs アップロード: クライアントが呼んだ名前ではなく、ランダムな名前を付ける (#46) 2026-09-30 22:38:13 +00:00 hack web: チャットクライアントを元に戻す 2026-09-16 22:36:37 +10:00 help チャット: 誰でも自分の発言を、すべてのインスタンスで編集できる (#35) 2026-09-22 21:39:27 +00:00 homecloud homecloud: 家計の人物をアカウントに同期; マニフェストをカタログ化 2026-09-11 16:19:20 +10:00 internal アップロード: クライアントが呼んだ名前ではなく、ランダムな名前を付ける (#46) 2026-09-30 22:38:13 +00:00 tools ビルド: CSSツールチェーンをピン留めし、パスできなかったデモを修正 2026-09-15 02:22:32 +10:00 .dockerignore Parley: 連合型、分散型チャット、プレーンIRCを話す 2026-09-11 13:23:33 +10:00 .gitignore squint: このインスタンスを撮影するための設定 2026-09-15 14:43:49 +10:00 AGENTS.md チャット: ラベル付き応答とキャップ通知 (#28) 2026-09-19 21:45:45 +00:00 docker-compose.example.yml docs: README、デモ、コンポーズ例におけるアカウント、トークン、SSO 2026-09-11 15:32:44 +10:00 Dockerfile ビルド: GoビルドはCSSコンパイラを必要とせず、CLIはglibcです 2026-09-14 12:06:47 +10:00 go.mod web: インターフェース全体をテンプレートコンポーネントとして再構築 2026-09-17 03:17:23 +10:00 go.sum web: インターフェース全体をテンプレートコンポーネントとして再構築 2026-09-17 03:17:23 +10:00 LICENSE Parley: 連合型、分散型チャット、プレーンIRCを話す 2026-09-11 13:23:33 +10:00 Makefile web: インターフェース全体をテンプレートコンポーネントとして再構築 2026-09-17 03:17:23 +10:00 parley.bt アップロード: クライアントが呼んだ名前ではなく、ランダムな名前を付ける (#46) 2026-09-30 22:38:13 +00:00 README.md アップロード: IRCクライアントからファイルを添付 (soju.im/FILEHOST) (#45) 2026-09-30 22:10:21 +00:00 SECURITY.md docs: セキュリティレポートを送信する場所 2026-09-12 16:23:01 +10:00 squint.yaml アップロード: IRCクライアントからファイルを添付 (soju.im/FILEHOST) (#45) 2026-09-30 22:10:21 +00:00 README.md Parley 連合型、分散型チャット、プレーンIRCを話す。Parleyは、中心を持たないチャットネットワークです。各個人(またはチーム)は自身のドメインで小規模なインスタンスを実行します。インスタンスはDNSとよく知られたIDドキュメントを通じて互いを見つけ、HTTPS overで署名付きメッセージを交換し、irssi、WeeChat、Textualなどの通常のIRCクライアントに、プラグインなしで連合ネットワーク全体を提供します。IDはメールのような形式です: alice@foo.comはfoo.comで実行され、bob@bar.comはbar.comで実行されます。Bobが`/msg alice@foo.com hi`と入力すると、2つのインスタンスが以前に互いを認識していなくても、機能します。ステータス: 動作中の概念実証。設計をエンドツーエンドで実証し、実際のインスタンスを実行しますが、まだ強化されていません。制限事項を参照してください。既存のクライアントで動作します。2つのインスタンス(foo.comとbar.com)、2つの標準irssiセッション。Aliceは自身のインスタンスに接続し、Bobは自身のインスタンスに接続します。Bobが`/msg alice@foo.com`でクエリを開くと、2つのインスタンスは即座に連合します。AliceはBobをbar.comのbobとして認識し、BobはAliceをfoo.comのアリスとして認識します。両方が#lobbyに参加します。これは、両方のインスタンス間で複製されるグローバルチャンネルです。何をするか: 通常のIRCが前面に。任意のIRCクライアントで接続します。パスワードまたはIRCトークンを使用してPASSまたはSASL PLAINでログインします。IRCv3サーバータイム、メッセージタグ、メッセージエコー、マルチプレフィックス、セットネームは、それらを要求するクライアントに提供され、TAGMSGは、連合全体およびローカルクライアント間で、タイピングインジケーターなどのクライアント専用タグを中継します。メッセージ自体のタグは保持されるため、+replyは履歴から戻ってきたときも返信であり、draft/multilineは貼り付けられた段落を8つのメッセージではなく1つのメッセージにします。クライアントに追従するスクロールバック。CHATHISTORYはチャンネルとプライベートメッセージの両方をページングし、参加すると表示されていないものを再生し、draft/read-markerは読み取り位置をアカウントに記録するため、電話でチャンネルを既読にするとデスクトップでも既読になり、クライアントは参加時にどこで線を引くかを知らされます。クライアントからファイルを添付します。soju.im/FILEHOST(Goguma、gamja、senpai)を話すクライアントは、既存のログインを使用してアップロードし、リンクを貼り付けます。インスタンス自身のエンドポイントから提供されるため、プロキシする追加のものはなく、リンクを持つ誰でも開くことができます。実行中に管理できるアカウント。アカウントは設定ファイルではなく、インスタンスのデータディレクトリに保存されます。parleyctl、管理者ページ、HTTP APIで作成するか、シングルサインオン(任意のOpenID Connectプロバイダー、またはリバースプロキシからのIDヘッダー)を通じてユーザーが到着できるようにします。ユーザーは設定ページでクライアント用のIRCトークンを発行します。ボットはアカウントです。