YAPC::Asia 2012で「Skype効率化」というトークをした話

Skype効率化 // Speaker Deck
Skype::Anyというモジュールを書いたので、そのモジュールを使ってbotを書く例を紹介しました。実際にSkype::AnyはCPANにアップされているので、使うことができます。まだまだやりたいことがあるので、開発を続けたいと思ってます。
去年のYAPCから1年が立ち、その頃は簡単なスクリプトしか書けなくて、さらにはモジュールなんて書けるわけがないと思っていたら、今年はCPANにモジュールをアップしてたりしていて、いろいろあったなとしみじみ思います。ま、こんな裏話はまたの機会に書きます。
YAPCに行くとモチベーションがあがるので、この熱が冷めないうちにやりたいことをやろうと思います。
今年中にやろうと思っていること

  • XS
    • SvIV、SvPVとか、わかりにくいものが多いので、そういったものを無くすようなものがあるといいな
    • もしくはXSにおけるベストプラクティスのようなものがあるといいな
  • Perlの内部構造
  • tokuhiromさんのトークでも言っていたように静的なファイルをパッケージに同梱しようとすると面倒くさいことになる。そういった問題を解決したい。
    • File::ShareDirを使うと解決?でもバージョンの問題がある。
  • Cocoa系モジュール
    • 去年からCocoaのモジュールは結構気になっていて、typesterさんに聞いたらいろいろ作っているといった話を聞いた。Cocoaモジュールは書くのが非常に面倒で、生のXSを書く場面が多い。
    • 簡単にCocoaモジュールが書けるようなものがあったらいいな
    • 例えば、RubyCocoaのようなもの
  • Mojolicious
    • 最近は活発に開発されているし、使う人も増えてきている
    • 個人的にAmon2でWebアプリは書いていたけど、Mojoliciousもいいかもしれない

次回予告: SkypeKit (Skypeクライアントの起動なしでbot書く。環境構築が楽に!)

tacochan

akiym/p5-App-Tacochan · GitHub
ikachanの絶大な人気を見て、Skype版もあると便利だと思って書きました。
課題としては、Skypeのチャットidがわかりにくいので、tacochanのほうでチャットidに名前をつけて登録できるようにしておくと便利じゃないかなと思っています。時間があるときに対応します。
tacochanを作ったあとにYappoLogs: Ikachan の名前の由来を見て、ikachanってイカ関係ないことを知りました。

Redmine::Chan::Chan

akiym/Redmine-Chan-Chan · GitHub
IRCで言うpublicmsgとprivatemsgでbotの動作を変えるような処理がRedmine::Chanではあるのだけれども、同じようなことをRedmine::Chan::Chanで実現したい。そういった場合にはbotに直接メッセージを受信するような1対1のチャットと、グループチャットの中でメッセージを受信するようにそれぞれを分けることで解決した。

$skype->message_received(sub {
    my ($msg) = @_;
    my $status = $chat->status;
    if ($status eq 'DIALOG') {
        # 1対1のチャット
    } elsif ($status eq 'MULTI_SUBSCRIBED') {
        # グループチャット
    }
});

IRC botSkype botに移植する手順

`git log -p`を見つつ、やっていることをまとめると

  • チャンネル名をチャットid*1に置き換える
  • メッセージを送信するところは$skype->chat($chat_id)->send_message();に置き換える

といった感じ。nickはbotのほうで決められなかったり、channelはchatだったりするのでそこらへんを注意しておくとうまくいきます。

*1:例えば: #t.akiym/$akiym_bot;f8efe7736e507088