システムメッセージの利用
システムメッセージの利用
mikutterを使っていると、mikutter_botというアカウントのツイートとしてシステムメッセージがホームTLに入ることがあります。 このセクションでは、このメッセージを使って、ユーザに情報を提示する方法について学習します。
コード
# -*- coding: utf-8 -*-
Plugin.create(:time_signal) do
defactivity "hour_signal", "時報"
now = Time.new
time = Time.mktime now.year, now.mon, now.day, now.hour
def next_hour(time)
time += 3600
notice "next hour #{time}"
Reserver.new(time) {
activity :hour_signal, "#{time.hour} 時です"
next_hour(time)
}
end
next_hour(time)
end
解説
アクティビティとは
アクティビティは、mikutter 0.2から追加された仕組みで、mikutter上やTwitter上で起こった通知情報を統合管理する仕組みです。
まず、何らかのプラグインがactivityメソッドを使って通知を発生させます。その通知はactivityプラグインが受け取り、 :modify_activity というイベントを発生させます。このイベントを受け取って、ホームTLやアクティビティタブに通知が表示されるのです。 アクティビティとアクティビティタブは異なります。アクティビティは通知の仕組みのことで、アクティビティタブは表示手段の一つです(上の図を参照してください)。
通知の種類
通知には、お気に入り、DM、エラー通知といった種類があります。今回は時報のための hour_signal という種類を新しく定義しています。
defactivity "hour_signal", "時報"
とはいっても、普通は最初から用意されている system という種類の通知を使うので、その場合は defactivity を使う必要はないです。
実際に通知を発生させる
通知を発生させるのはごく簡単です。例のコードでは、以下の部分です。
activity :hour_signal, "#{time.hour} 時です"
これで、「x 時です」と、毎時0分に通知されるようになります。しかしこのプラグインを実際に使うと、タイムラインには表示されず、アクティビティタブにしか表示されません。理由は簡単で、「設定」の「アクティビティ」で、時報をTLに表示する設定がデフォルトで無効になっているからです。設定でこのチェックを入れるとTLに表示されるようになります。
どうしてもホームTLに表示したい場合があるでしょう。その場合、Plugin.callで無理やりシステムメッセージを挿入する古い方法の代わりに、 system 通知を使いましょう。これは、種類を分けるまでもない一般的なシステムメッセージのために予約されており、デフォルトでTLに表示されるようになっています。もちろんユーザがTLに表示しないように設定できるので、プラグインがアクティビティの仕組みを使えば、ユーザは通知をミュートすることができます。