AnyEventでirssiプラグインを書く

AnyEvent はその名の通りさまざまなイベントインタフェースに対応していて、その中に irssi が使用している Glib も含まれているため、irssiのプラグインの中で普通に AnyEvent を使用することができます。

キーワード反応を im.kayac.com で自分の IM に通知する higlith2im.pl プラグインを AnyEvent を使用するように書き換えたのが以下です。

use strict;
use warnings;

use Glib;

use Irssi;
use AnyEvent::HTTP;

use HTTP::Request::Common;

our $VERSION = '0.1';

our %IRSSI = (
    name        => 'hilight2im',
    description => 'notify hilight message to IM via im.kayac.com api',
    authors     => 'Daisuke Murase',
);

sub sig_printtext {
    my ($dest, $text, $stripped) = @_;

    if ( $dest->{level} & MSGLEVEL_HILIGHT ) {
        my $user = Irssi::settings_get_str('im_kayac_com_username') or return;
        my $msg  = sprintf('[irssi] %s', $stripped);

        my $req = POST "http://im.kayac.com/api/post/$user", [ message => $msg ];
        my %headers = map { $_ => $req->header($_), } $req->headers->header_field_names;

        my $r;
        $r = http_post $req->uri, $req->content, headers => \%headers, sub { undef $r };
    }
}

Irssi::signal_add('print text' => \&sig_printtext);
Irssi::settings_add_str('im_kayac_com', 'im_kayac_com_username', '');

fork する必要がなくなってシンプルですね!

...とおもいきや現状の AnyEvent::HTTP はなんと HTTP::Request オブジェクトからのリクエスト送信に対応していないため、自分ですべてのリクエストを組み立てる必要があるようです。これは不便。。

ですが、irssi の中で普通に AnyEvent を使うことができるのはなかなか便利です。お試しあれ!

AnyEvent 版は github にあげた。

by typester / at 2009-07-13T23:30:00 / perl · irssi / Comment

irssiからOutputzに文字数を投げる

EmacsからOutputzに文字数を投げる - antipop

を見て、早速インストールして使ってみたら激しくおもしろい!

irssiでもやりたくなったので、irssiで発言した文字数をOutputzに投げるプラグインを書いた。

http://github.com/typester/irssi-plugins/tree/master/outputz.pl

~/.irssi/scripts にファイルをおいて、irssi内で

/run outputz.pl

して

/set outputz_key あなたの復活の呪文
/set outputz_uri 適当なURI

すると設定完了で、あとは自動で発言数が投稿されます。

`outputz_uri` に `%s` をいれるとその部分はIRCのチャンネル名に置換されます。

outputz_uriURI::Template 形式で指定できるようにしました。

デフォルトは irc://{server}:{port}/{channel} です。

つかえる変数は

  • server: サーバーアドレス
  • port: サーバーポート番号
  • channel: 発言したチャンネル名
  • server_tag: irssiでのサーバーのユニークタグ
  • nick: そのサーバーでのあなたのニックネーム

となっております。

こないだ作った PoCo::Client::HTTPDeferred つかってるのでそのサンプルとしてもいいとおもいます。

しかし、emacsよりirssiの方が文字数いってそうで集計を見るのが怖いです。。。

by typester / at 2008-11-21T16:00:00 / web · irssi / Comment

irssi-proxy++

通常 IRC は自宅サーバー上の irssi でやってるのだが、イタリアの回線が細いため ssh が重くてイライラする。

tiarra はずさなければよかったなぁと思ったが、irssi にも proxy 機能あった気がするなぁと思い直してそれを使ってみた。

まず、

/load proxy

して proxy モジュールをロード。

するとパスワード設定されてないYO! とかいう警告が出るので

/set irssiproxy_password hogehoge

などとしてパスワードを設定する。

最後に

/set irssiproxy_ports freenode=16667 ircnet-ja=16668 skype=16669 local=16670

とかすれば指定したポートで proxy が立ち上がる。

あとはローカルのIRCクライアントからそこにつなぐだけ! 快適快適。

by typester / at 2008-06-19T19:30:00 / irssi / Comment

dopplrのnickからその人のローカル時間を表示するirssiプラグインを書いた

IRCで話していると、相手は今何時なんだろうと思うことがよくあります。

今日とあるチャンネルでそのことについて話していて、dopplrの情報使ったらいいんじゃないかとひらめいたので早速irssiプラグインを作ってみました。

http://coderepos.org/share/browser/lang/perl/irssi/scripts/dopplr.pl

これを入れた状態で

/clock miyagawa

とか打つとmiyagawaさんがいまどこにいて、そこはいま何時かというのを出してくれます。便利!

23:40 -!- Irssi: typester is at home in Kamakura (03/21 23:40)

という感じの出力です。(これは /clock typester した結果)

使い方は ~/.irssi/scripts 以下にスクリプトをおいて /run dopplr でロード。その後

/set dopplr_token 認証用token

としてtokenを登録したら/clockコマンドが動くようになります。

tokenはまじめに取得するのは面倒なのですが、

http://www.dopplr.com/account/api_session_token

ここからテスト用のtokenを作成できるのでここのを使うと楽です。

もちろんdopplrのAPIを使ってるので、dopplr上で自分がみることができる人の情報しかとってこれませんのであしからず。

by typester / at 2008-03-21T23:38:00 / irssi · dopplr / Comment

mobirc-irssi が実用に耐えうるようになりましたのでお知らせします

この間ちょっと紹介したirssiのプラグインスクリプトとしてmobircをつかうmobirc.plスクリプトですが、実用に耐えうる段階まできましたので再度紹介しておきます。

画面サンプルはこんな感じ。(スクリーンショットが取れるPSPでの画面です)

psp x mobirc x twirc

素のmobircはIRCクライアント機能と、HTTPD機能を両方持ち、tiarraなどのIRCプロクシにつなぐことで使用するものになっていますが、こちらのirssiプラグインではmobircのIRCクライアント機能はirssiプラグインとして実装していますので、irssiさえあれは利用することができます。

イメージ的にはirssiがHTTPDを立てている感じになってます。

またキーワード設定などもirssiのハイライト設定を使用していますので、別途mobirc側でキーワード設定をする必要がないのもちょっとうれしいところです。

実際の使い方(インストールの仕方)としては

  • mobirc.plをirssiのスクリプトディレクトリ (~/.irssi/scripts) にコピーor symlink

  • irssi起動時にmobircのlibパスを環境変数に入れとく

    PERL5LIB=/path/to/mobirc/lib irssi

    とか。同じ意味なら何でも。

  • irssi起動したらmobirc.plをロードする ( /script load mobirc )

    ここで Can't locate XXX.pm in @INC とか言われる場合モジュール足りないのでそれいれる。

  • ロードしたら config.yaml 自分用にいじって、そのパスをirssiで設定する

    /set mobirc_config_path /path/to/config.yaml

  • 設定完了したら /mobirc start すると HTTPD がたちあがる

  • mobirc started ってirssiコンソールに出てればOK。httpでつないで確認する。

とかでOK。

ほか機能としては、

  • /mobirc stop でhttpd停止。
  • /mobirc stop -> /mobirc start でyaml読み直してHTTPD再起
  • /set mobirc_auto_start on しておけば次回から /script load mobirc するだけでHTTPDたちあがる
  • /script load するのさえめんどいというひとはスクリプトを ~/.irssi/scripts におくかわりに ~/.irssi/scripts/autorun におけば irssi 起動時に自動起動する

という感じ。irssi使いには必須のスクリプトかと思います!

Enjoy!

by typester / at 2007-11-01T12:13:00 / perl · irssi / Comment

mobirc クールすぎる

mobirc 0.01 released - TokuLog 改め だまってコードを書けよハゲ

すばらしすぎる!

ソース見ると、IRCクライアント部分とHTTPD部分わかれてるから、IRCクライアント部分を丸々irssiプラグインで置き換えるのも簡単にできそう。

irssi使うようになってからtiarraみたいなプロクシを使わなくなったので、irssiプラグインだけでkeitairc見たいの作りたかったんだよなー。tokuhirom++

てわけで日本シリーズ見ながら作ってみた。

mobirc.pl

こんなんで一応動く。

irssiプラグイン内でPOEセッション(POE::Session::Irssi)作って、その中で Mobirc::HTTPD 動かしてる。

動くことは動くけど、設定決め打ちだし、unloadもできないのでプラグイン再起動イコールirssi再起動で、まだ実用には耐えない。

とりあえず動くことはわかったのであとは暇なときにでも。

by typester / at 2007-10-29T01:49:00 / perl · irssi / Comment

IRCで呼ばれたらIMで通知するirssiスクリプト

僕は以前からIRCでキーワード反応した時に GNU screen のステータスコードに通知を出すようにしている のだけど、ターミナル見てないときがつかないので、またまた im.kayac.com をつかって、IMに通知する irssi のスクリプトを書いてみた。

http://coderepos.org/share/browser/lang/perl/irssi/scripts/hilight2im.pl

使い方は

/set im_kayac_com_username ユーザー名

で自分のim.kayac.comユーザー名をセットするだけ!

あとはirssiで設定したキーワード(irssiではhilightという)を含んだメッセージを受信するとIMに通知される。

by typester / at 2007-10-20T15:30:00 / perl · irssi / Comment

昨日のゲートウェイつかったスクリーンショット

Twitter on irssi

こんな感じ。普通にIRCっぽくなる。

安定してるから nick に @ つけるのはオプションにしてほかのクライアントでもつかえるようにしようかなぁ。

by typester / at 2007-04-16T05:07:00 / perl · twitter · irssi / Comment

全チャンネルで文字コード変っちゃって良いなら、send text と print text のシグナルフックしてそこで文字コード変換するだけでいい気がした。

僕はutf-8でしゃべりたいチャンネルがあるのであのような実装になってるのだけど。

思いついただけで試してない。

by typester / at 2006-09-21T11:16:00 / irssi / Comment

Can't locate package Irssi::Nick for @Irssi::Irc::Nick::ISA at (eval 18) line 73.

っていうのがでまくってしまう。

うーむ、charsetの問題。よくわからないわぁ。

眠くないときに調べる。

by typester / at 2006-09-21T01:26:00 / irssi / Comment

« Prev 1 2

(Page 1 of 2)