summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wu <lekensteyn@gmail.com>2013-07-12 23:37:31 +0200
committerPeter Wu <lekensteyn@gmail.com>2013-07-12 23:37:31 +0200
commita4471f71aad10433725161dff9ac39b8f23c4d77 (patch)
treeef58e0cf67358ceb840077b913b30b7cfb060334
parentbada02eb0781180a75ca02ee6d30bf161dd7e717 (diff)
downloadscripts-a4471f71aad10433725161dff9ac39b8f23c4d77.tar.gz
notifyudp: initial checkin of 0.2.20130614
Originally posted on http://askubuntu.com/a/61656/6969 by me. Description: This version does not react on all messages (like parted/joined). If you want to get such spam notifications, remove the leading `#` in the `#'print text'` line. Some rate-limiting is implemented, there will be at least 1.3 seconds delay between notifications.
-rw-r--r--notifyudp.pl120
1 files changed, 120 insertions, 0 deletions
diff --git a/notifyudp.pl b/notifyudp.pl
new file mode 100644
index 0000000..9f878aa
--- /dev/null
+++ b/notifyudp.pl
@@ -0,0 +1,120 @@
+##
+## Put me in ~/.irssi/scripts, and then execute the following in irssi:
+##
+## /load perl
+## /script load notifyudp
+##
+
+use strict;
+use Irssi;
+use IO::Socket;
+use vars qw($VERSION %IRSSI);
+use Time::HiRes qw(time);
+
+$VERSION = "0.2.20130614";
+%IRSSI = (
+ authors => 'Lekensteyn',
+ contact => 'lekensteyn@gmail.com',
+ name => 'notifyudp.pl',
+ description => 'Send a UDP signal to a remote machine',
+ license => 'GPLv3+'
+);
+
+Irssi::settings_add_str('notifyudp', 'notifyudp_ip_addr', '');
+# port 0 = disabled
+Irssi::settings_add_int('notifyudp', 'notifyudp_port', 0);
+Irssi::settings_add_bool('notifyudp', 'notifyudp_auto_start', 0);
+
+my $sock;
+
+sub notify_load {
+ if ($sock) {
+ Irssi::print('NotifyUDP: Already connected.');
+ return;
+ }
+ my $ip = Irssi::settings_get_str('notifyudp_ip_addr');
+ my $port = Irssi::settings_get_int('notifyudp_port');
+ if (!$port || !$ip) {
+ Irssi::print('NotifyUDP: No port or host set, /set notifyudp for more information..');
+ return;
+ }
+ if ($port < 1024 || $port > 65535) {
+ Irssi::print('NotifyUDP: Invalid port, must be 1024 <= port <= 65535, resetting and ignoring.');
+ Irssi::settings_set_int('notifyudp_port', 0);
+ return;
+ }
+ $sock = new IO::Socket::INET(
+ PeerAddr => $ip,
+ PeerPort => $port,
+ Proto => 'udp',
+ Timeout => 1
+ );
+ Irssi::print("NotifyUDP: IP $ip will be notified on port $port.");
+}
+
+my $last_time = 0;
+sub notify {
+ if ($sock) {
+ my $now = time;
+ my $notify_delay = 1.3;
+ if (abs($now - $last_time) > $notify_delay) {
+ $last_time = $now;
+ $sock->send("M");
+ }
+ }
+}
+
+sub notify_stop {
+ if ($sock) {
+ Irssi::print("NotifyUDP: Stopping.");
+ $sock->send("S");
+ $sock = undef;
+ } else {
+ Irssi::print("NotifyUDP: not active.");
+ }
+}
+
+sub cmd_notifyudp {
+ my ($cmd) = @_;
+ if ($cmd eq 'start') {
+ notify_load();
+ } elsif ($cmd eq 'stop') {
+ notify_stop();
+ } elsif ($cmd eq 'ping') {
+ notify();
+ } else {
+ Irssi::print('NotifyUDP: Usage: /notifyudp [start|stop|ping]');
+ }
+}
+
+Irssi::command_bind('notifyudp', 'cmd_notifyudp');
+
+my @signals = (
+#'print text', # too verbose?
+'message public',
+'message private',
+'dcc request',
+
+'message irc notice', # NickServ responses and such
+
+# whenever the server dies
+'server connected',
+'server connect failed',
+'server disconnected',
+
+'message invite',
+'message topic',
+'message dcc',
+'ctcp msg',
+'ctcp reply',
+);
+foreach (@signals) {
+ Irssi::signal_add($_, 'notify');
+}
+
+if (Irssi::settings_get_bool('notifyudp_auto_start')) {
+ Irssi::print('NotifyUDP: automatic connection with the sound server is enabled.');
+ notify_load();
+} else {
+ Irssi::print('NotifyUDP: automatic connection with the sound server is disabled.');
+}