Macでは使えませんが、Linuxでは使えます(手元で動きました)。
MacのSkypeはバージョンアップして、レスポンスが非同期で返ってくるようになったので(仕様らしいです。うえー)、Mac環境では思ったように動きません。メッセージを送信だけするといったことは可能ですが。
ってことで現状でした。
Skype::Anyのよくないところ
Skype::Anyのよくないところは、ドキュメントを書いてないところだと思うので、いまさらですが、解説不足だったところを解説します。
基本的にSkype APIではメッセージを送るときにはチャットのidが必要です。
Skype::Any::Chat->new($id);
しかし、チャットのidは普段見ることができません。このidは内部的なものだからです。Skype APIを使って見ることができますが、とりあえず、idを作る方法を説明します。
例えば、echo123とのチャットのidはこのようにして見ることができます。$user->chat()で、チャットを*作る*ことができます。
$chatは、Skype::Any::Chatオブジェクトなので$chat->send_message()でメッセージを送信することができます。
my $user = Skype::Any::User->new('echo123'); my $chat = $user->chat; $chat->{id}; $chat->send_message('hello!');
$user->chat()をいくら呼んでもecho123とのチャットのidは変わりません。
それでは、グループチャットの場合はどうなるでしょうか。先ほどの例は、1対1のチャットでした。複数の人とのチャットの場合はこのようになります。
ユーザー名をカンマで区切るだけです。あとは同じです。
my $user = Skype::Any::User->new('echo123,t.akiym'); my $chat1 = $user->chat; $chat1->{id}; $chat1->send_message('hello!'); my $chat2 = $user->chat; $chat2->{id}; $chat2->send_message('good bye!');
グループチャットの場合は$user->chat()のたびにチャットのidが変わります。つまり、新しいチャットが作成されてしまうということです。注意してください。
以上がチャットを新しく作成する方法です。でも、Botが発言するたびに新しいチャットが作成されるの嫌ですよね。
そんなときは、チャットのidからSkype::Any::Chatオブジェクトを作成します。そうすることですでに存在するチャットにに対して$chat->send_message()でメッセージを送信することができます。
my $chat = Skype::Any::Chat->new('#t.akiym/$d0656290604bd99b'); $chat->send_message('XD');
しかし、チャットのidは内部的なものです。普段見ることはできません。
ここでtipsを紹介します。このようにすることで最近のチャット履歴からチャットのidを見ることができます。@chatsにSkype::Any::Chatのオブジェクト(すでに存在するチャット)が入っています。
ちなみに、$skype->send_command()はSkype APIを直で叩くことができるメソッドです。
my $skype = Skype::Any->new; my $res = $skype->send_command('SEARCH RECENTCHATS'); $res =~ s/^CHATS\s+//; my @chats = map { Skype::Any::Chat->new($_) } split /,\s+/, $res;
ほかの方法としては、$skype->message_received()はコールバックにSkype::Any::ChatMessageのオブジェクトを渡してくれるのでそこから$msg->chat()でSkype::Any::Chatのオブジェクトを取ってくるのもありでしょう。$msg->chat()はいくら呼んでも新しいチャットが作られることはありません(1対1でもグループチャットでも)。
my $skype = Skype::Any->new; $skype->message_received(sub { my ($msg) = @_; $msg->chat; $msg->chat->send_message(); });
最後に
せっかくなので、Skype::Anyを使ったSkype botのサンプルをGithubにあげました。適当に書いたものなので勘弁してください。
akiym/p5-skypebot · GitHub