Show
Ignore:
Timestamp:
06/23/10 00:04:01 (4 years ago)
Author:
topia
Message:

support boxcar growl/provider (but not tested yet)

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/tiarra/trunk/module/Auto/Notify.pm

    r36552 r37855  
    198198} 
    199199 
     200sub config_boxcar { 
     201    my ($this, $config) = @_; 
     202 
     203    my $runloop = $this->_runloop; 
     204    if (!$config->provider_key) { 
     205        # growl mode 
     206        require Crypt::SSLeay; # https support 
     207        if (!$config->user || !$config->password) { 
     208            $runloop->notify_warn(__PACKAGE__." boxcar (Growl): please set user and/or password"); 
     209        } 
     210    } elsif ($config->email_hash) { 
     211        # ok 
     212    } elsif ($config->email) { 
     213        # needs to hash email 
     214        require Digest::MD5; 
     215    } elsif ($config->token && $config->secret) { 
     216        # ok 
     217    } else { 
     218        $runloop->notify_warn(__PACKAGE__." boxcar (Provider): please set email-hash, email or token and secret"); 
     219    } 
     220 
     221} 
     222 
     223sub send_boxcar { 
     224    my ($this, $config, $text, $msg, $sender, $full_ch_name) = @_; 
     225 
     226    $text = $this->strip_mirc_formatting($text); 
     227    my $screen_name = Auto::AliasDB->stdreplace( 
     228        $msg->prefix, 
     229        $config->screenname_format || '[tiarra][#(channel):#(nick.now)]', 
     230        $msg, $sender, 
     231        channel => $full_ch_name, 
     232        raw_channel => Auto::Utils::get_raw_ch_name($msg, 0), 
     233        text => $text, 
     234       ); 
     235    $text = Auto::AliasDB->stdreplace( 
     236        $msg->prefix, 
     237        $config->format || $this->config->format || '#(text)', 
     238        $msg, $sender, 
     239        channel => $full_ch_name, 
     240        raw_channel => Auto::Utils::get_raw_ch_name($msg, 0), 
     241        text => $text, 
     242       ); 
     243    my @data = ('notification[from_screen_name]' => $screen_name, 
     244                'notification[message]' => $text); 
     245 
     246    my $runloop = $this->_runloop; 
     247    if (!$config->provider_key) { 
     248        # Growl mode 
     249        Tools::HTTPClient->new( 
     250            Request => POST("https://boxcar.io/notifications", \@data), 
     251           )->start( 
     252               Callback => sub { 
     253                   my $stat = shift; 
     254                   if (!ref($stat)) { 
     255                       $runloop->notify_warn(__PACKAGE__." boxcar: post failed: $stat"); 
     256                   } elsif ($stat->{Content} !~ /^\s*$/) { 
     257                       (my $content = $stat->{Content}) =~ s/\s+/ /; 
     258                       $runloop->notify_warn(__PACKAGE__." boxcar: post failed: $content"); 
     259                   } 
     260               }, 
     261              ); 
     262    } else { 
     263        if ($config->email_hash) { 
     264            push(@data, email=>$config->email_hash); 
     265        } elsif ($config->email) { 
     266            push(@data, email=>Digest::MD5->new->add($config->email)->hexdigest); 
     267        } else { 
     268            push(@data, 
     269                 token => $config->token, 
     270                 secret => $config->secret); 
     271        } 
     272        Tools::HTTPClient->new( 
     273            Request => POST("http://boxcar.io/devices/providers/". 
     274                                $config->provider_key."/notifications", \@data), 
     275           )->start( 
     276               Callback => sub { 
     277                   my $stat = shift; 
     278                   if (!ref($stat)) { 
     279                       $runloop->notify_warn(__PACKAGE__." boxcar: post failed: $stat"); 
     280                   } elsif ($stat->{Content} !~ /^\s*$/) { 
     281                       (my $content = $stat->{Content}) =~ s/\s+/ /; 
     282                       $runloop->notify_warn(__PACKAGE__." boxcar: post failed: $content"); 
     283                   } 
     284               }, 
     285              ); 
     286 
     287    } 
     288 
     289} 
     290 
    2002911; 
    201292 
     
    222313 
    223314# 使用するブロックを指定します 
    224 -blocks: im prowl 
     315-blocks: im prowl boxcar-growl boxcar-provider 
    225316 
    226317im { 
     
    264355} 
    265356 
     357boxcar-growl { 
     358# 利用する前にサービスリストに Growl を追加しておいてください。 
     359 
     360type: boxcar 
     361 
     362# Boxcar のユーザー名を指定します。必須です。 
     363user: 
     364 
     365# Boxcar のパスワードを指定します。必須です。 
     366password: 
     367 
     368# スクリーンネームのフォーマットを指定できます。 
     369# デフォルト値: [tiarra][#(channel):#(nick.now)] 
     370screenname-format: #(date:%H:%M:%S) [#(channel):#(nick.now)] #(text) 
     371 
     372# 通知先ごとにフォーマットを指定できます。 
     373# この例では先頭に時刻を追加しています。 
     374# Boxcar ではスクリーンネームが別になるので、個別指定をお勧めします。 
     375format: #(date:%H:%M:%S) [#(channel):#(nick.now)] #(text) 
     376 
     377} 
     378 
     379boxcar-provider { 
     380# 自分用 provider を立てて利用するタイプです。 
     381# http://boxcar.io/site/providers からサインアップしてください。 
     382# このとき、 curl のコマンドライン中にある token と secret は 
     383# サインアップ直後にしか表示されないので、忘れずメモしてください。 
     384# (もちろんwebhookを立てればいつでも取得できますが……) 
     385type: boxcar 
     386 
     387# provider の API key を指定します。これがないと Growl モードになります。 
     388provider-key: XXXXXX 
     389 
     390# 通知先の指定をします。 
     391# token と secret, email, email-hash のいずれかを指定するようにしてください。 
     392 
     393# トークン。サインアップ直後の curl のコマンドライン中にあります。 
     394-token: XXXXXX 
     395 
     396# シークレット。サインアップ直後の curl のコマンドライン中にあります。 
     397-secret: XXXXXXXX 
     398 
     399# メールアドレス。 Digest::MD5 が必要です。 
     400-email: XXXX@XXXX 
     401 
     402# メールアドレスのMD5ハッシュ。 Digest::MD5 は必要ありません。 
     403-email-hash: xxxxxx 
     404 
     405# スクリーンネームのフォーマットを指定できます。 
     406# デフォルト値: [tiarra][#(channel):#(nick.now)] 
     407screenname-format: #(date:%H:%M:%S) [#(channel):#(nick.now)] #(text) 
     408 
     409# 通知先ごとにフォーマットを指定できます。 
     410# この例では先頭に時刻を追加しています。 
     411# Boxcar ではスクリーンネームが別になるので、個別指定をお勧めします。 
     412format: #(date:%H:%M:%S) [#(channel):#(nick.now)] #(text) 
     413 
     414} 
     415 
    266416 
    267417=cut