From: zonidjan Date: Mon, 12 Feb 2018 09:04:29 +0000 (-0600) Subject: smshilight X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=ef878f311d305741363c856b5b111513c2b4eac4;p=irssi-scripts.irssi.org.git smshilight --- diff --git a/smshilight.pl b/smshilight.pl new file mode 100644 index 0000000..728bd89 --- /dev/null +++ b/smshilight.pl @@ -0,0 +1,84 @@ +# smshi - sends highlights via SMS, using Twilio +# CC0 https://creativecommons.org/publicdomain/zero/1.0/ + +use Irssi; +use vars qw($VERSION %IRSSI); + +use LWP::UserAgent; +my $ua = LWP::UserAgent->new; + +$VERSION = "1.0"; +$ua->agent("irssi+SMSHi/$VERSION "); +%IRSSI = ( + authors => "John Runyon", + name => "smshi", + description => "send highlights via Twilio sms", + license => 'CC0', + url => 'https://github.com/zonidjan/irssi-scripts', + contact => 'https://github.com/zonidjan/irssi-scripts/issues' +); + +sub got_print { + return unless Irssi::settings_get_bool('smshi_active'); + + my ($dest, $text, $stripped) = @_; + my $server = $dest->{server}; + my $mynick = $server->{nick}; + return unless ($dest->{level} & MSGLEVEL_HILIGHT) # continue if hilight... + or ($dest->{level} & MSGLEVEL_MSGS && index($stripped, $mynick) != -1); # or if it's a PM containing my nick + return if $stripped =~ /<.?\Q$mynick\E>/; # avoid people quoting me + return if (!$server->{usermode_away} && Irssi::settings_get_bool('smshi_away_only')); # and obey away_only + + my $msg = ''; + for my $c (split //, $stripped) { + if (ord($c) > 31 && ord($c) < 127) { + $msg .= $c; + } else { + $msg .= '\\x'.sprintf("%02x", ord($c)); + } + } + + my $chname = $dest->{window}->get_active_name(); + my $sms = $server->{tag}."/".$chname.$msg; + _send_sms($sms); +} +sub test_sms { + _send_sms("This is an SMS test."); +} +sub _send_sms { + my $sms = shift; + + my $sid = Irssi::settings_get_str('smshi_sid'); + my $token = Irssi::settings_get_str('smshi_token'); + my $from = Irssi::settings_get_str('smshi_from'); + my $to = Irssi::settings_get_str('smshi_to'); + + my $url = "https://$sid:$token\@api.twilio.com/2010-04-01/Accounts/$sid/Messages.json"; + my $req = HTTP::Request->new('POST', $url); + $req->content_type('application/x-www-form-urlencoded'); + $req->content("To=$to&From=$from&Body=$sms"); + + my $res = $ua->request($req); + return unless Irssi::settings_get_bool('smshi_debug'); + if ($res->is_success) { + print "Good. Sent to $to from $from: $sms"; + } else { + print "Bad!"; + print $req->url; + print $req->content; + print $res->status_line; + print $res->content; + } +} + +Irssi::settings_add_bool('smshi', 'smshi_active', 0); # master switch +Irssi::settings_add_bool('smshi', 'smshi_away_only', 1); # send only when away? +Irssi::settings_add_bool('smshi', 'smshi_debug', 0); # show debugging info +Irssi::settings_add_str('smshi', 'smshi_sid', ''); # Twilio SID +Irssi::settings_add_str('smshi', 'smshi_token', ''); # Twilio token +Irssi::settings_add_str('smshi', 'smshi_from', ''); # From number (+12022345678) +Irssi::settings_add_str('smshi', 'smshi_to', ''); # To number (+12022345678) + +Irssi::signal_add('print text', 'got_print'); +Irssi::command_bind('testsms', 'test_sms'); +Irssi::print('%G>>%n '.$IRSSI{name}.' '.$VERSION.' loaded');