BitChat Nostr Bot - マルチリレー対応の非同期メッセージストリーミングライブラリ

Library

概要

BitChat Nostr Botは、Nostrプロトコルに基づくメッセージングのための非同期ボットおよびライブラリです。Pythonで書かれており、複数のリレーサーバーに同時接続してBitChatメッセージをストリーミングおよび公開可能です。自動的に重複イベントを排除し、一時的な秘密鍵で署名する機能を備えています。標準的なNostrのフィルタリング機構を活用し、kinds(種類)、authors(作者)、tags(タグ)、期間指定など柔軟な条件でメッセージを取得できます。非同期処理により効率的かつスケーラブルな運用が可能で、Nostrベースのチャット環境やアプリケーション構築に最適です。

GitHub

リポジトリの統計情報

  • スター数: 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メッセージングを実現。

リポジトリ情報:

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)