@kyanny's blog

My life. Opinions are my own.

Riece で keyword があった場合は IM に通知させたい

こんな風にしてみたけど、残念ながらダメでした。キーワードを含む発言が Riece から見えなくなってしまう。

lambda の引数の扱いとかわかってなくて適当に書いたらやっぱりダメだった。やりたいことは、キーワードを含む発言があったらその発言内容を IM に通知したい。 im-notify.pl というのは im.kayac.com 経由で自分の IM へメッセージを投げるだけのスクリプトです。

(setq riece-keywords '("kyanny" "kaneko" "金子" "刺身"))
(add-hook 'riece-keyword-notify-functions
          (lambda (keyword message) (start-process "riece-keyword-notify" nil "im-notify.pl" (symbol-value 'message))))

(symbol-value 'message) のところを "somebody calls you!" とか単なる文字列にしたらうまくいくので、ここのあたりが変なんだろうな。まぁ、ターミナルを見てなくても通知に気づきたい、というのはこれでできるのでいいか。

あと、 Riece でトークをやるには何かかいてから C-c p で送れる、というのを 2ch で見つけたけど、トークを受けるほうはちゃんとできるんだろうか。受けられてるかどうかちょっと不安。

通知ボットはごくごく適当に

#!/usr/bin/env perl
# $Id$
use strict;
use LWP::UserAgent;
use IO::All;

my $api_url = "http://im.kayac.com/api/post/******";

my $message;

if (!scalar @ARGV) {
    $message < io('-');    
}
else {
    for my $file (@ARGV) {
        $message .= eval { io($file)->slurp; };
        $message .= $file if $@;
    }
}

my $ua = LWP::UserAgent->new;
my $res = $ua->post($api_url, {message => $message});

echo hoge | im-notify.pl も im-notify.pl < hoge も im-notify.pl hoge.txt とかもなるべくうまいことやれるように、と思ってこんな風にしてみた。 Perl で標準入力のあるなしを判断するにはどうするのが良いのだろう。標準入力が空のときも入力を待たずに引数があれば適当に open したりしなかったりして、 STDIN も @ARGV も何もなければ何もしない、みたいな挙動が自然な感じがしていいかな、と思った。