net-irc-mala
· 🪦 retired
mala のタイムラインを IRC で読むためのゲートウェイです。手元で小さな IRC サーバーとして動き、IRC クライアントで接続すると #malastream チャンネルに発言がリアルタイムで流れてきます。
コードから読み取れる範囲では、接続先は http://api.ma.la/home_timeline/stream というストリーミング API で、本文(text)と発言者(user.screen_name)を持つ JSON が届く、マイクロブログ的なタイムラインです。
内部設計
IRC クライアントとストリーミング API の間の流れです。
- mig.rb(
bin/mig.rb)— 同梱の実行コマンド。Net::IRC::CLI.run(Net::IRC::Mala, ARGV)の 1 行だけで、起動処理はすべて CLI 側に任せています - Net::IRC::CLI(
lib/net/irc/cli.rb)— OptionParser でオプション(-pポート、-hホスト、-lログファイル、--debug、-fフォアグラウンド)を解釈し、net-irc gem のNet::IRC::Serverを起動します。デフォルトはlocalhost:16701で待ち受け、fork +setsidでデーモン化します(--debug/-f時はフォアグラウンド)。ログは Logger の日次ローテーションです - Net::IRC::Mala(
lib/net/irc/mala.rb)— net-irc のNet::IRC::Server::Sessionを継承したセッション本体。クライアントが USER 登録すると、#malastreamに JOIN させてチャンネルモード(+mtoと自分への+o/+q)を設定し、ストリーミング用のスレッドを起動します - ストリーミングスレッドは EventMachine + em-eventsource で API に Server-Sent Events 接続し、届いたメッセージを JSON としてパースして、
screen_nameを送信元にした PRIVMSG として#malastreamに流します。パースに失敗したメッセージは STDERR にエラーを出して読み飛ばします - クライアントが切断するとストリーミングスレッドを kill します
サーバー名・チャンネル名などは Net::IRC::Mala にべた書きで、設定ファイルはありません。gem のバージョンは 0.0.1 です。