diff options
| author | Thomas B. Ruecker | 2015-06-30 06:48:00 +0000 | 
|---|---|---|
| committer | Thomas B. Ruecker | 2015-06-30 06:48:00 +0000 | 
| commit | de7a0326d0381bb793453e5f3c1d55c00c41c689 (patch) | |
| tree | 466a92ef87f1fad74332b10544dde2d3541d9972 /scripts/xmpp-notify.pl | |
| parent | 7ed59bdd52d40414e49094c1f0bd0eba412a4451 (diff) | |
| download | scripts.irssi.org-de7a0326d0381bb793453e5f3c1d55c00c41c689.tar.bz2 | |
Importing XMPP-notify 1.0 from upstream
https://github.com/dm8tbr/irssi-xmpp-notify/commit/48534a98490713834e2c87c5ca4b0a713f8e4f1e
Diffstat (limited to 'scripts/xmpp-notify.pl')
| -rw-r--r-- | scripts/xmpp-notify.pl | 263 | 
1 files changed, 263 insertions, 0 deletions
| diff --git a/scripts/xmpp-notify.pl b/scripts/xmpp-notify.pl new file mode 100644 index 0000000..bd0ecc7 --- /dev/null +++ b/scripts/xmpp-notify.pl @@ -0,0 +1,263 @@ +#!/usr/bin/env perl -w +# +# This is a simple irssi script to send out notifications over the network using +# Net::Jabber. Currently, it sends notifications when e.g. your name/nick is +# highlighted, and when you receive private messages. +# Based on growl-net.pl script by Alex Mason, Jason Adams. +# +# You can find the script on GitHub: https://github.com/dm8tbr/irssi-xmpp-notify/ +# Please report bugs to https://github.com/dm8tbr/irssi-xmpp-notify/issues +# +# Copyright (c) 2015, Thomas B. Ruecker +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from this +# software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +use strict; +use vars qw($VERSION %IRSSI $AppName $XMPPUser $XMPPPass $XMPPDomain $XMPPServ $XMPPRes $XMPPRecv $XMPPTLS $XMPPCAPath $XMPPPort $XMPPDebugFile $testing $Connection $j); + +use Irssi; +use Net::Jabber qw( Client ); +use utf8; +  +$VERSION = '1.0'; +%IRSSI = ( +  authors      =>   'Thomas B. Ruecker', +  contact      =>   'thomas@ruecker.fi, tbr on irc.freenode.net', +  name         =>   'XMPP-notify', +  description  =>   'Sends out notifications via XMPP. Based on a script by Peter Krenesky.', +  license      =>   'BSD-3-Clause', +  url          =>   'http://github.com/dm8tbr/irssi-xmpp-notify/', + +); + +sub cmd_xmpp_notify { +  Irssi::print('%G>>%n XMPP-notify can be configured with these settings:'); +  Irssi::print('%G>>%n xmpp_show_privmsg : Notify about private messages.'); +  Irssi::print('%G>>%n xmpp_reveal_privmsg : Include content of private messages in notifications.'); +  Irssi::print('%G>>%n xmpp_show_hilight : Notify when your name is hilighted.'); +  Irssi::print('%G>>%n xmpp_show_notify : Notify when someone on your away list joins or leaves.'); +  Irssi::print('%G>>%n xmpp_show_topic : Notify about topic changes.'); +  Irssi::print('%G>>%n xmpp_notify_user : Set to xmpp account user name to send notifications from.'); +  Irssi::print('%G>>%n xmpp_notify_recv : Set to xmpp JID to receive notification messages.');; +  Irssi::print('%G>>%n xmpp_notify_server : Set to the xmpp server host name'); +  Irssi::print('%G>>%n xmpp_notify_pass : Set to the sending xmpp account password'); +  Irssi::print('%G>>%n xmpp_notify_tls : Set to enable TLS connection to xmpp server'); +  Irssi::print('%G>>%n xmpp_notify_ca_path : Set if you need a custom CA search path for TLS'); +  Irssi::print('%G>>%n xmpp_notify_port : Set to the xmpp server port number'); +  Irssi::print('%G>>%n xmpp_notify_domain : Set to the xmpp domain name if different from server name'); +  Irssi::print('%G>>%n xmpp_notify_debug_file : If set, debug output from Net::Jabber will be written to this file. Needs reload.'); +} + +sub cmd_xmpp_notify_test { +  my $message = new Net::Jabber::Message(); +  my $body = 'moo!'; +  $message->SetMessage(to=>$XMPPRecv); +  $message->SetMessage( +    type=>"chat", +    body=> $body ); +  $Connection->Send($message); + +} + +Irssi::settings_add_bool($IRSSI{'name'}, 'xmpp_show_privmsg',      1); +Irssi::settings_add_bool($IRSSI{'name'}, 'xmpp_reveal_privmsg',    1); +Irssi::settings_add_bool($IRSSI{'name'}, 'xmpp_show_hilight',      1); +Irssi::settings_add_bool($IRSSI{'name'}, 'xmpp_show_notify',       1); +Irssi::settings_add_bool($IRSSI{'name'}, 'xmpp_show_topic',        1); +Irssi::settings_add_str($IRSSI{'name'},  'xmpp_notify_pass',       'password'); +Irssi::settings_add_str($IRSSI{'name'},  'xmpp_notify_server',     'localhost'); +Irssi::settings_add_str($IRSSI{'name'},  'xmpp_notify_user',       'irssi'); +Irssi::settings_add_str($IRSSI{'name'},  'xmpp_notify_domain',     undef); +Irssi::settings_add_str($IRSSI{'name'},  'xmpp_notify_recv',       'noone'); +Irssi::settings_add_str($IRSSI{'name'},  'xmpp_notify_res',        ''); +Irssi::settings_add_bool($IRSSI{'name'}, 'xmpp_notify_tls',        1); +Irssi::settings_add_str($IRSSI{'name'},  'xmpp_notify_ca_path',    '/etc/ssl/certs'); +Irssi::settings_add_int($IRSSI{'name'},  'xmpp_notify_port',       5222); +Irssi::settings_add_str($IRSSI{'name'},  'xmpp_notify_debug_file', undef); + +$XMPPUser       = Irssi::settings_get_str('xmpp_notify_user'); +$XMPPPass       = Irssi::settings_get_str('xmpp_notify_pass'); +$XMPPDomain     = Irssi::settings_get_str('xmpp_notify_domain'); +$XMPPServ       = Irssi::settings_get_str('xmpp_notify_server'); +$XMPPRecv       = Irssi::settings_get_str('xmpp_notify_recv'); +$XMPPRes        = Irssi::settings_get_str('xmpp_notify_res'); +$XMPPTLS        = Irssi::settings_get_bool('xmpp_notify_tls'); +$XMPPCAPath     = Irssi::settings_get_str('xmpp_notify_ca_path'); +$XMPPPort       = Irssi::settings_get_int('xmpp_notify_port'); +$XMPPDebugFile  = Irssi::settings_get_str('xmpp_notify_debug_file'); +$AppName        = "irssi $XMPPServ"; + +if (!$XMPPDomain) +{ +  $XMPPDomain = $XMPPServ; +} + +if (!$XMPPRecv) +{ +  $XMPPRecv = $XMPPUser.'@'.$XMPPDomain; +} + +if ($XMPPDebugFile) +{ +  $Connection = Net::Jabber::Client->new( +    "debuglevel" => 2, +    "debugfile"  => $XMPPDebugFile, +    "debugtime"  => 1); +} +else +{ +  $Connection = Net::Jabber::Client->new(); +} + +my $status = $Connection->Connect( +  "hostname" => $XMPPServ, +  "port" => $XMPPPort, +  "componentname" => $XMPPDomain, +  "tls" => $XMPPTLS, +  "ssl_ca_path" => $XMPPCAPath ); + + + +if (!(defined($status))) +{ +  Irssi::print("ERROR:  XMPP server is down or connection was not allowed."); +  Irssi::print ("        ($!)"); +  return; +} + + +my @result = $Connection->AuthSend( +  "username" => $XMPPUser, +  "password" => $XMPPPass, +  "resource" => $XMPPRes ); + + + +if ($result[0] ne "ok") +{ +  Irssi::print("ERROR: Authorization failed ($XMPPUser".'@'."$XMPPDomain on server $XMPPServ) : $result[0] - $result[1]"); +  return; +} +Irssi::print ("Logged into server $XMPPServ as $XMPPUser".'@'."$XMPPDomain. Sending notifications to $XMPPRecv."); + +sub sig_message_private ($$$$) { +  return unless Irssi::settings_get_bool('xmpp_show_privmsg'); + +  my ($server, $data, $nick, $address) = @_; + +  my $message = new Net::Jabber::Message(); +  my $body = '(Private message from: '.$nick.')'; +  if ((Irssi::settings_get_bool('xmpp_reveal_privmsg'))) { +    $body = '(PM: '.$nick.') '.$data; +  } +  utf8::decode($body); +  $body = Irssi::strip_codes($body); +  $message->SetMessage(to=>$XMPPRecv); +  $message->SetMessage( +    type=>"chat", +    body=> $body ); +  $Connection->Send($message); + +} + +sub sig_print_text ($$$) { +  return unless Irssi::settings_get_bool('xmpp_show_hilight'); + +  my ($dest, $text, $stripped) = @_; + +  if ($dest->{level} & MSGLEVEL_HILIGHT) { +    my $message = new Net::Jabber::Message(); +    my $body = '['.$dest->{target}.'] '.$stripped; +    utf8::decode($body); +    $body = Irssi::strip_codes($body); +    $message->SetMessage(to=>$XMPPRecv); +    $message->SetMessage( +      type=>"chat", +      body=> $body ); +    $Connection->Send($message); +  } +} + +sub sig_notify_joined ($$$$$$) { +  return unless Irssi::settings_get_bool('xmpp_show_notify'); + +  my ($server, $nick, $user, $host, $realname, $away) = @_; + +  my $message = new Net::Jabber::Message(); +  my $body = "<$nick!$user\@$host>\nHas joined $server->{chatnet}"; +  $message->SetMessage(to=>$XMPPRecv); +  $message->SetMessage( +    type=>"chat", +    body=> $body ); +  $Connection->Send($message); + +} + +sub sig_notify_left ($$$$$$) { +  return unless Irssi::settings_get_bool('xmpp_show_notify'); + +  my ($server, $nick, $user, $host, $realname, $away) = @_; + +  my $message = new Net::Jabber::Message(); +  my $body = "<$nick!$user\@$host>\nHas left $server->{chatnet}"; +  $message->SetMessage(to=>$XMPPRecv); +  $message->SetMessage( +    type=>"chat", +    body=> $body ); +  $Connection->Send($message); +} + +sub sig_message_topic { +  return unless Irssi::settings_get_bool('xmpp_show_topic'); +  my($server, $channel, $topic, $nick, $address) = @_; + +  my $message = new Net::Jabber::Message(); +  my $body = 'Topic for '.$channel.': '.$topic; +  utf8::decode($body); +  $body = Irssi::strip_codes($body); +  $message->SetMessage(to=>$XMPPRecv); +  $message->SetMessage( +    type=>"chat", +    body=> $body ); +  $Connection->Send($message); +} + + +Irssi::command_bind('xmpp-notify', 'cmd_xmpp_notify'); +Irssi::command_bind('xmpp-test', 'cmd_xmpp_notify_test'); + +Irssi::signal_add_last('message private', \&sig_message_private); +Irssi::signal_add_last('print text', \&sig_print_text); +Irssi::signal_add_last('notifylist joined', \&sig_notify_joined); +Irssi::signal_add_last('notifylist left', \&sig_notify_left); +Irssi::signal_add_last('message topic', \&sig_message_topic); + + +Irssi::print('%G>>%n '.$IRSSI{name}.' '.$VERSION.' loaded (/xmpp-notify for help. /xmpp-test to test.)'); + | 
