BitChat Nostr Bot - マルチリレー対応の非同期メッセージストリーミングライブラリ
概要
BitChat Nostr Botは、Nostrプロトコルに基づくメッセージングのための非同期ボットおよびライブラリです。Pythonで書かれており、複数のリレーサーバーに同時接続してBitChatメッセージをストリーミングおよび公開可能です。自動的に重複イベントを排除し、一時的な秘密鍵で署名する機能を備えています。標準的なNostrのフィルタリング機構を活用し、kinds(種類)、authors(作者)、tags(タグ)、期間指定など柔軟な条件でメッセージを取得できます。非同期処理により効率的かつスケーラブルな運用が可能で、Nostrベースのチャット環境やアプリケーション構築に最適です。
リポジトリの統計情報
- スター数: 2
- フォーク数: 0
- ウォッチャー数: 2
- コミット数: 14
- ファイル数: 8
- メインの言語: Python
主な特徴
- 複数のNostrリレーに同時接続し、効率的な非同期メッセージストリーミングを実現
- 自動重複排除機能により、複数リレーからの同一イベントの重複処理を防止
- 一時的な秘密鍵による署名をサポートし、セキュアなメッセージ公開が可能
- 標準的なNostrフィルタ(種類、作者、タグ、期間など)による柔軟なメッセージ取得
技術的なポイント
BitChat Nostr Botは、Pythonのasyncioフレームワークを活用した非同期プログラミングモデルに基づいています。これにより、複数のNostrリレーサーバーへ同時に接続し、リアルタイムでのメッセージ受信・送信が可能です。非同期処理はI/O待ち時間を効率化し、大規模なネットワーク通信においてもボトルネックを回避します。
複数のリレーから同じイベントが送信されることがNostr環境では一般的ですが、本プロジェクトは自動重複排除機能を実装。これにより、同一のイベントIDを検知し、重複して処理することを防止。結果として、リソースの無駄遣いや二重投稿を避け、一貫性のあるデータ処理を実現します。
また、本ライブラリは一時的な秘密鍵(エフェメラルキー)を用いた署名機能を備えています。これにより、ユーザーは永続的な秘密鍵を公開せずに、短期間だけ有効な署名を行うことが可能。セキュリティ面でのリスクを低減しつつ、柔軟な運用が可能です。
メッセージ取得においては、Nostrの標準フィルタリング仕様をサポート。イベントの種類(kind)、作者(author)、タグ(tag)、および時刻範囲(since、until)などの条件を自由に組み合わせ、必要なデータのみを効率よくストリーミングできます。これにより、ユーザーのニーズに合わせたカスタマイズが容易です。
設計面では、Pythonのモジュラリティを活かし、ボット機能とライブラリ機能が分離されているため、用途に応じて柔軟に利用可能。CLIツールや他アプリケーションへの組み込みも想定されています。コードは比較的シンプルでメンテナンス性も高く、拡張もしやすい構成です。
プロジェクトの構成
主要なファイルとディレクトリ:
.gitignore
: Git管理除外設定ファイル.python-version
: 使用Pythonバージョン指定ファイルREADME.md
: プロジェクトの説明ドキュメントbitchatbot/
: ボット本体やライブラリのソースコードを格納するディレクトリdeamon.py
: ボットのデーモン起動スクリプト- 他に設定ファイルやユーティリティスクリプトが含まれる計8ファイル
まとめ
非同期処理とマルチリレー対応で効率的なNostrメッセージングを実現。
リポジトリ情報:
- 名前: bitchat-routstr-bot
- 説明: 説明なし
- スター数: 2
- 言語: Python
- URL: https://github.com/shroominic/bitchat-routstr-bot
- オーナー: shroominic
- アバター: https://avatars.githubusercontent.com/u/34897716?v=4
READMEの抜粋:
BitChat Nostr Bot
An async Nostr bot and library for streaming and publishing BitChat messages with support for multiple relays, automatic deduplication, and ephemeral key signing.
Features
Streaming
- Async streaming: Efficiently stream messages using async/await
- Multiple relays: Connect to one or many relays simultaneously
- Automatic deduplication: Avoid duplicate events across relays
- Flexible filtering: Standard Nostr filters (kinds, authors, tags, since, until)