scriptterも少し賢くなりました(ついでにrecipetterも)

以前もご紹介した、Hello, twitter!なボットであるところのscriptterですが、少し修正を行いました。

修正点は4つです。

出力結果が長すぎた場合に文字化けしていたのを修正

twitterでやりとりする必要があるため、ある程度以上の長さの出力が返ってきた場合は途中で省略をしています。が、その際、またもやエンコードまわりでミスってしまっていて、encodeされた文字列に対して処理を行っていたため、UTF-8の文字列が途中で切れていたのでした。

最後に使われた言語をデフォルトとして使用することにしました

scriptterは、

@scriptter 言語コード ソース

のような使い方をすることになっているのですが、ついつい言語コードを書くのを忘れがちです。というわけで、言語コードを書き忘れた場合、最後に使った言語が使用されたものと仮定することにしました。

これで、一度、

@scriptter rb puts 'Hello!'

としたあとは、

@scriptter puts 'Hello, again!'

のように言語コードを書かなくても、さきほど入力したrbが言語コードとして使用されます。

言語名自体も言語コードとして使えるようにしました

というわけで、つい、

@scriptter perl print "Who am I?"

などと書いても大丈夫になりました。いままでは、

@scriptter pl print "Who am I?"

でないと、scriptterくんが混乱してしまっていました。

どの発言に対するリプライかをきちんと設定するようにしました

ボットに対しての発言にリプライする際、いままでは単純にNet::Twitterで、

$scriptter->update({status => $status});

のようにしていたのですが、元発言のIDも、

$scriptter->update({status => $status, in_reply_to_status_id => $status_id});

のように渡すようにしました。そのため、どの発言に対するリプライかわかるようにしました。

この修正で、たとえばiPhoneTwitter用クライアントであるTwitterFonでボットとの会話が見れるようになったり、

Twitterの発言を元発言付きで表示できるtweetreeで会話が見れるようになったりしました。

ちなみにこの最後の修正はrecipetterにも適用してありますので、「あんこ入り☆パスタライスって何と何をつぶやけば出てくるんだろう」などと食材について知りたくなったときも安心です。

もう少しやり残したことがあるので引き続き直していったりしようかと思います。どうぞよろしくお願いします。