diff options
| -rw-r--r-- | _data/scripts.yaml | 91 | ||||
| -rw-r--r-- | _testing/config.yml | 15 | ||||
| -rw-r--r-- | scripts/adv_windowlist.pl | 109 | ||||
| -rw-r--r-- | scripts/connectcmd.pl | 40 | ||||
| -rw-r--r-- | scripts/dau.pl | 10 | ||||
| -rw-r--r-- | scripts/fullrain.pl | 98 | ||||
| -rw-r--r-- | scripts/kicks.pl | 235 | ||||
| -rw-r--r-- | scripts/localize.pl | 8 | ||||
| -rw-r--r-- | scripts/mangle.pl | 26 | ||||
| -rw-r--r-- | scripts/newsline.pl | 12 | ||||
| -rwxr-xr-x | scripts/nicklist.pl | 6 | ||||
| -rw-r--r-- | scripts/ogg123.pl | 2 | ||||
| -rw-r--r-- | scripts/pushsafer.pl | 312 | ||||
| -rw-r--r-- | scripts/query.pl | 6 | ||||
| -rw-r--r-- | scripts/quiz.pl | 6 | ||||
| -rw-r--r-- | scripts/quizmaster-fr.pl | 8 | ||||
| -rw-r--r-- | scripts/quizmaster.pl | 8 | ||||
| -rw-r--r-- | scripts/scroller.pl | 5 | ||||
| -rw-r--r-- | scripts/signal_hilight.pl | 140 | ||||
| -rw-r--r-- | scripts/sysinfoplus.pl | 11 | ||||
| -rw-r--r-- | scripts/topicsed.pl | 9 |
21 files changed, 898 insertions, 259 deletions
diff --git a/_data/scripts.yaml b/_data/scripts.yaml index 99ecb44..cf2f2fb 100644 --- a/_data/scripts.yaml +++ b/_data/scripts.yaml @@ -103,11 +103,11 @@ description: 'Adds a permanent advanced window list on the right or in a status bar.' filename: adv_windowlist.pl license: 'GNU GPLv2 or later' - modified: '2016-11-01 17:15:32' + modified: '2017-04-03 21:21:55' modules: Text::CharWidth name: adv_windowlist url: http://anti.teamidiot.de/ - version: '1.3' + version: '1.4' - authors: BC-bd commands: ai @@ -1145,14 +1145,15 @@ version: '2.1' - authors: 'Ian Peters' + commands: connectcmd contact: itp@ximian.com description: 'run arbitrary shell commands while [dis]connecting to a server' filename: connectcmd.pl license: 'Public Domain' - modified: '2014-10-17 20:34:00' + modified: '2017-03-18 12:17:25' name: 'Connect Command' url: http://irssi.org/ - version: '0.1' + version: '0.2' - authors: "Mikko 'Quidz' Salmi" contact: mikko@quidz.net @@ -1259,7 +1260,7 @@ description: 'write like an idiot' filename: dau.pl license: BSD - modified: '2015-02-02 14:02:20' + modified: '2017-03-19 21:19:42' name: DAU url: http://dau.pl/ version: 2.4.3 @@ -1805,6 +1806,17 @@ url: http://irssi.hauwaerts.be/fuckem.pl version: '0.05' - + authors: kjensenxz + commands: 'rfaway rfme rfsay rftopic' + contact: kenneth@jensen.cf + description: 'Prints colorized fullwidth text' + filename: fullrain.pl + license: 'GNU GPLv3' + modified: '2017-03-28 23:10:37' + name: fullrain + url: http://github.com/kjensenxz + version: 1.0.0 +- authors: prussian commands: fullwidth contact: genunrest@gmail.com @@ -2548,10 +2560,10 @@ description: 'Enhances /k /kb and /kn with some nice options.' filename: kicks.pl license: 'Public Domain' - modified: '2006-11-14 23:19:19' + modified: '2017-04-01 17:30:41' name: 'Various kick and ban commands' url: http://www.penguin-breeder.org/irssi/ - version: '0.26' + version: '0.27' - authors: "Piotr 'Cvbge' Krukowiecki" description: 'When new send arrives checks if there are old identical sends (ie from the same nick on the same server and with the same filename) and closes them' @@ -2710,11 +2722,11 @@ description: 'Localizes users using traceroute, the localizer database or IP-Atlas' filename: localize.pl license: GPLv2 - modified: '2014-12-06 11:57:45' + modified: '2017-04-01 17:22:26' modules: 'HTML::Entities LWP::UserAgent' name: localize url: '' - version: '2014112501' + version: '2017040101' - authors: 'Peder Stray' contact: peder@ninja.no @@ -2833,14 +2845,15 @@ version: 1.4.5 - authors: 'Szymon Sokol' + commands: mangle contact: szymon@hell.pl description: 'translates your messages into Morse code, rot13 and other sillinesses.' filename: mangle.pl license: GPLv2 - modified: '2008-05-17 17:39:11' + modified: '2017-03-17 23:41:44' name: mangle url: http://irssi.org/scripts/ - version: '2004031701' + version: '2017031701' - authors: 'Petr Baudis' contact: pasky@ji.cz @@ -3243,10 +3256,10 @@ description: 'brings various newstickers to Irssi (Slashdot, Freshmeat, Heise etc.)' filename: newsline.pl license: GPLv2 - modified: '2008-05-17 17:39:09' + modified: '2017-04-04 23:08:20' modules: 'LWP::UserAgent Unicode::String XML::RSS' name: Newsline - version: '2003021101' + version: '2017040101' - authors: "Roeland 'Trancer' Nieuwenhuis" contact: irssi@trancer.nl @@ -3300,10 +3313,10 @@ description: 'draws a nicklist to another terminal, or at the right of your irssi in the same terminal' filename: nicklist.pl license: GPLv2 - modified: '2014-06-10 12:58:13' + modified: '2017-03-20 19:38:25' name: nicklist url: http://wouter.coekaerts.be/irssi - version: 0.4.6 + version: 0.4.7 - authors: c0ffee commands: 'nickmix stopmix' @@ -3496,7 +3509,7 @@ description: 'Display current ogg123 track' filename: ogg123.pl license: GPLv2 - modified: '2006-11-27 18:00:00' + modified: '2017-03-20 14:19:18' name: ogg123 url: http://pwp.netcabo.pt/ricardomesquita/irssi version: 0.01+1 @@ -3824,6 +3837,18 @@ url: '' version: '2.02' - + authors: 'Kevin Siml' + commands: 'pushignore pushtest' + contact: kevinsiml@googlemail.com + description: 'Push hilights and private messages when away by the pushsafer.com API' + filename: pushsafer.pl + license: BSD + modified: '2017-03-31 15:30:51' + modules: LWP::UserAgent + name: pushsafer + url: https://www.pushsafer.com + version: 0.0.1 +- authors: 'Doug Freed' contact: dwfreed!#irssi@freenode description: "Authenticates you to QuakeNet's Q immediately on connect using CHALLENGEAUTH" @@ -3838,10 +3863,10 @@ description: 'Give you more control over when to jump to query windows and when to just tell you one has been created. Enhanced autoclose.' filename: query.pl license: GPL - modified: '2009-04-25 11:27:28' + modified: '2017-03-20 20:22:57' name: query url: http://ninja.no/irssi/query.pl - version: '1.24' + version: '1.25' - authors: "Stefan 'tommie' Tomanek" contact: stefan@pico.ruhr.de @@ -3875,10 +3900,10 @@ description: 'Turns irssi into a quiz bot' filename: quiz.pl license: GPLv2 - modified: '2002-04-24 01:12:01' + modified: '2017-04-03 14:51:40' name: Quiz url: http://the.earth.li/~huggie/irssi/ - version: '0.7' + version: '0.8' - authors: 'Athanasius Emilius Arvanitis based on Simon Huggins quiz 0.7' contact: arvan @@ -3896,10 +3921,10 @@ description: 'Un script de quiz pour irssi' filename: quizmaster-fr.pl license: GPLv2 - modified: '2008-06-16 10:15:05' + modified: '2017-04-03 18:52:16' name: quizmaster url: 'http://irssi.org/scripts/ http://pierre.carlot.free.fr/tux/' - version: 20030208+fr + version: 20170403+fr - authors: "Stefan 'tommie' Tomanek" commands: quizmaster @@ -3907,10 +3932,10 @@ description: 'a trivia script for Irssi' filename: quizmaster.pl license: GPLv2 - modified: '2008-06-16 10:14:51' + modified: '2017-04-03 18:05:34' name: quizmaster url: http://irssi.org/scripts/ - version: '20030208' + version: '20170403' - authors: 'Jakub Jankowski' commands: 'rkick rknockout rme rsay rtopic' @@ -4215,9 +4240,9 @@ description: 'Scrolls specified text on the status bar' filename: scroller.pl license: 'Public Domain' - modified: '2008-05-17 17:39:09' + modified: '2017-03-17 18:54:18' name: scroller - version: '0.01' + version: '0.02' - authors: "Jari Matilainen, a lot of code borrowed from whitelist.pl by David O'Rourke and Karl Siegemund" commands: sm @@ -4330,6 +4355,13 @@ name: showmode version: '0.3' - + contact: jwm@horde.net + description: 'Send highlighted messages via Signal' + filename: signal_hilight.pl + modified: '2017-03-20 16:27:59' + name: signal_hilight + version: '1.0' +- authors: 'Morten Lied Johansen, Jonas Berlin' contact: mortenjo@ifi.uio.no description: 'Prefix nicks with @ when completing nicks to match conventions on networks like Slack, Flowdock, Gitter etc' @@ -4532,10 +4564,10 @@ description: 'Linux system information (with vPenis and other stuff)' filename: sysinfoplus.pl license: 'Public Domain' - modified: '2002-11-04 15:17:30' + modified: '2017-04-02 20:30:12' name: SysinfoPlus url: http://juerd.nl/irssi/ - version: '2.20' + version: '2.21' - authors: "Stefan 'tommie' Tomanek" contact: stefan@pico.ruhr.de @@ -4685,8 +4717,9 @@ description: 'editing channel topics by regexps' filename: topicsed.pl license: 'public domain' - modified: '2004-08-13 19:27:38' + modified: '2017-03-18 23:06:54' name: topicsed + version: '0.1' - authors: "Sebastian 'yath' Schmidt" contact: yath+irssiscripts@yath.de diff --git a/_testing/config.yml b/_testing/config.yml index 08be377..26bcec4 100644 --- a/_testing/config.yml +++ b/_testing/config.yml @@ -38,34 +38,19 @@ whitelist: - babelirc - cap_sasl_fail - cap_sasl - - connectcmd - - dau - dnsspam - irc_chess - ircgallery - irssiq - isdn - ixmmsa - - kicks - l33tmusic - - localize - log2ansi - - mangle - mkshorterlink - - newsline - - nicklist - - ogg123 - oidenty - 'on' - osd - - query - - quizmaster-fr - - quizmaster - - quiz - - scroller - stocks - - sysinfoplus - - topicsed - tvmusor - xetra - xmmsinfo diff --git a/scripts/adv_windowlist.pl b/scripts/adv_windowlist.pl index 6285786..d656eef 100644 --- a/scripts/adv_windowlist.pl +++ b/scripts/adv_windowlist.pl @@ -1,7 +1,7 @@ use strict; use warnings; -our $VERSION = '1.3'; # 463402cffae35e5 +our $VERSION = '1.4'; # b46fded611292cb our %IRSSI = ( authors => 'Nei', contact => 'Nei @ anti@conference.jabber.teamidiot.de', @@ -79,6 +79,9 @@ our %IRSSI = ( # * string : Character to use when shortening long names. The second character # will be used if two blocks need to be filled. # +# /format awl_title <string> +# * string : Text to display in the title string or title bar +# # /format awl_viewer_item_bg <string> # * string : Format String specifying the viewer's item background colour # @@ -398,7 +401,19 @@ sub syncLines { my ($item, $get_size_only) = @_; my $text = $actString[0]; - my $pat = defined $text ? '{sb '.ucfirst(setc()).': $*}' : '{sb }'; + my $title = _get_format(set 'title'); + if (length $title) { + $title =~ s{\\(.)|(.)}{ + defined $2 ? quotemeta $2 + : $1 eq 'V' ? '\u' + : $1 eq ':' ? quotemeta ':%n' + : $1 =~ /^[uUFQE]$/ ? "\\$1" + : quotemeta "\\$1" + }sge; + $title = eval qq{"$title"}; + $title .= ' '; + } + my $pat = defined $text ? "{sb $title\$*}" : '{sb }'; $text //= ''; $item->default_handler($get_size_only, $pat, $text, 0); }; @@ -454,6 +469,12 @@ sub awl { } } +sub _add_map { + my ($type, $target, $map) = @_; + ($type->{$target}) = sort { length $a <=> length $b || $a cmp $b } + $map, exists $type->{$target} ? $type->{$target} : (); +} + sub get_keymap { my ($textDest, undef, $cont_stripped) = @_; if ($textDest->{level} == 524288 and $textDest->{target} eq '' and !defined $textDest->{server}) { @@ -472,32 +493,32 @@ sub get_keymap { for ($command) { last unless length $map; if (/^change_window (\d+)/i) { - $nummap{$1} = $map; + _add_map(\%nummap, $1, $map); } - elsif (/^command window goto (\S+)/i) { + elsif (/^(?:command window goto|change_window) (\S+)/i) { my $window = $1; if ($window !~ /\D/) { - $nummap{$window} = $map; + _add_map(\%nummap, $window, $map); } elsif (lc $window eq 'active') { - $specialmap{_active} = $map; + _add_map(\%specialmap, '_active', $map); } else { - $wnmap{$window} = $map; + _add_map(\%wnmap, $window, $map); } } elsif (/^(?:active_window|command (ack))/i) { - $specialmap{_active} = $map; + _add_map(\%specialmap, '_active', $map); $viewer{use_ack} = !!$1; } elsif (/^command window last/i) { - $specialmap{_last} = $map; + _add_map(\%specialmap, '_last', $map); } elsif (/^(?:upper_window|command window up)/i) { - $specialmap{_up} = $map; + _add_map(\%specialmap, '_up', $map); } elsif (/^(?:lower_window|command window down)/i) { - $specialmap{_down} = $map; + _add_map(\%specialmap, '_down', $map); } elsif (/^key\s+(\w+)/i) { $custom_key_map{$1} = $map; @@ -726,12 +747,16 @@ sub _format_display { @ret } +sub _get_format { + Irssi::current_theme->get_format(__PACKAGE__, @_) +} + sub _calculate_items { my ($wins, $abbrevList) = @_; - my $display_header = Irssi::current_theme->get_format(__PACKAGE__, set 'display_header'); - my $name_format = Irssi::current_theme->get_format(__PACKAGE__, set 'name_display'); - my $abbrev_chars = as_uni(Irssi::current_theme->get_format(__PACKAGE__, set 'abbrev_chars')); + my $display_header = _get_format(set 'display_header'); + my $name_format = _get_format(set 'name_display'); + my $abbrev_chars = as_uni(_get_format(set 'abbrev_chars')); my %displays; @@ -767,14 +792,14 @@ sub _calculate_items { $abbrev2 = $abbrev_chars[1]; } for my $win (@$wins) { - my $global_hack_alert_tag_header; + my $global_tag_header_mode; next unless ref $win; my $backup_win = Storable::dclone($win); delete $backup_win->{active} unless ref $backup_win->{active}; - $global_hack_alert_tag_header = + $global_tag_header_mode = $display_header && ($last_net // '') ne ($backup_win->{active}{server}{tag} // ''); if ($win->{data_level} < abs $S{hide_data} @@ -796,7 +821,7 @@ sub _calculate_items { my $number = $win->{refnum}; my ($name, $display, $cdisplay); - if ($global_hack_alert_tag_header) { + if ($global_tag_header_mode) { $display = $display_header; $name = as_uni($backup_win->{active}{server}{tag}) // ''; if ($custom_xform) { @@ -818,7 +843,7 @@ sub _calculate_items { grep { !/_visible$/ } @display; } $display = (grep { length $_ } - map { $displays{$_} //= Irssi::current_theme->get_format(__PACKAGE__, set $_) } + map { $displays{$_} //= _get_format(set $_) } @display)[0]; $cdisplay = $name_format; $name = as_uni($win->get_active_name) // ''; @@ -906,7 +931,7 @@ sub _calculate_items { as_tc($key_ent), $win); - if ($global_hack_alert_tag_header) { + if ($global_tag_header_mode) { $last_net = $backup_win->{active}{server}{tag}; redo; } @@ -917,9 +942,9 @@ sub _calculate_items { sub _spread_items { my $width = [Irssi::windows]->[0]{width} - $sb_base_width - 1; - my @separator = Irssi::current_theme->get_format(__PACKAGE__, set 'separator'); + my @separator = _get_format(set 'separator'); if ($S{block} >= 0) { - my $sep2 = Irssi::current_theme->get_format(__PACKAGE__, set 'separator2'); + my $sep2 = _get_format(set 'separator2'); push @separator, $sep2 if length $sep2 && $sep2 ne $separator[0]; } $separator[0] .= '%n'; @@ -929,7 +954,7 @@ sub _spread_items { my $curLine; my $curLen = 0; if ($S{shared_sbar}) { - $curLen += $S{shared_sbar}[0] + 2 + length setc(); + $curLen += $S{shared_sbar}[0] + 2; $width -= $S{shared_sbar}[2]; } my $mouse_header_check = 0; @@ -1198,13 +1223,25 @@ sub syncViewer { }); $viewer{client_env} = 1; } - my $separator = Irssi::current_theme->get_format(__PACKAGE__, set 'separator'); + my $separator = _get_format(set 'separator'); my $sepLen = sb_length($separator); - my $item_bg = Irssi::current_theme->get_format(__PACKAGE__, set 'viewer_item_bg'); + my $item_bg = _get_format(set 'viewer_item_bg'); + my $title = _get_format(set 'title'); + if (length $title) { + $title =~ s{\\(.)|(.)}{ + defined $2 ? quotemeta $2 + : $1 eq 'V' ? '\U' + : $1 eq ':' ? quotemeta '%N' + : $1 =~ /^[uUFQE]$/ ? "\\$1" + : quotemeta "\\$1" + }sge; + $title = eval qq{"$title"}; + } $str .= _encode_var(redraw => 1) if delete $viewer{fullRedraw}; $str .= _encode_var(separator => $separator, seplen => $sepLen, itembg => $item_bg, + title => $title, mouse => $mouse_coords{refnum}, key2 => \%wnmap_exp, win => \@win_items); @@ -1377,9 +1414,9 @@ return sub { %banned_channels = map { lc1459(to_uni($_)) => undef } split ' ', Irssi::settings_get_str('banned_channels'); - my @sb_base = split /\177/, sb_format_expand("{sb \177}"), 2; + my @sb_base = split /\177/, sb_format_expand("{sbstart}{sb \177}{sbend}"), 2; $sb_base_width_pre = sb_length($sb_base[0]); - $sb_base_width_post = sb_length($sb_base[1]); + $sb_base_width_post = max 0, sb_length($sb_base[1])-1; $sb_base_width = $sb_base_width_pre + $sb_base_width_post; if ($print_text_activity && $S{line_shade}) { @@ -1602,6 +1639,7 @@ Irssi::signal_register({ set 'separator2' => '', set 'abbrev_chars' => "~\x{301c}", set 'viewer_item_bg' => sb_format_expand('{sb_background}'), + set 'title' => '\V'.setc().'\:', ]); } Irssi::settings_add_bool(setc, set 'prefer_name', 0); # @@ -1976,13 +2014,17 @@ UNITCHECK } sub _header { - my $str = uc ::setc(); - my $space = int( ((abs $vars{block}) - length $str) / (1 + length $str)); + my $str = $vars{title} // uc ::setc(); + my $ccs = qr/%(?:X(?:[1-6][0-9A-Z]|7[A-X])|[0-9BCFGIKMNRUWY_])/i; + (my $stripstr = $str) =~ s/($ccs)//g; + my $space = int( ((abs $vars{block}) - length $stripstr) / (1 + length $stripstr)); if ($space > 0) { my $ss = ' ' x $space; - $str = join $ss, '', (split //, $str), ''; + my @x = $str =~ /((?:$ccs)*\X(?:(?:$ccs)*$)?)/g; + $str = join $ss, '', @x, ''; } - my $pad = (abs $vars{block}) - length $str; + ($stripstr = $str) =~ s/($ccs)//g; + my $pad = max 0, (abs $vars{block}) - length $stripstr; $str = ' ' x ($pad/2) . $str . ' ' x ($pad/2 + $pad%2); $str } @@ -2017,7 +2059,7 @@ UNITCHECK my $j = 0; my @new_screen; my @new_mouse; - $new_screen[0][0] = _header() . ' ' x $vars{seplen} + $new_screen[0][0] = _header() #. ' ' x $vars{seplen} if $show_title_bar; unless ($nrows > $ncols) { # line layout ++$j if $show_title_bar; @@ -2393,6 +2435,11 @@ UNITCHECK # Changelog # ========= +# 1.4 +# - fix line wrapping in some themes, reported by justanotherbody +# - fix named window key detection, reported by madduck +# - make title (in viewer and shared_sbar) configurable +# # 1.3 - workaround for irssi issue #572 # 1.2 - new format to choose abbreviation character # 1.1 - infinite loop on shortening certain window names reported by Kalan diff --git a/scripts/connectcmd.pl b/scripts/connectcmd.pl index b2bbdc2..9b5bf38 100644 --- a/scripts/connectcmd.pl +++ b/scripts/connectcmd.pl @@ -1,7 +1,8 @@ use strict; use Irssi 20020101.0250 (); + use vars qw($VERSION %IRSSI); -$VERSION = "0.1"; +$VERSION = "0.2"; %IRSSI = ( authors => "Ian Peters", contact => "itp\@ximian.com", @@ -9,7 +10,7 @@ $VERSION = "0.1"; description => "run arbitrary shell commands while [dis]connecting to a server", license => "Public Domain", url => "http://irssi.org/", - changed => "Sun, 10 Mar 2002 17:08:03 -0500" + changed => "2017-03-18" ); my %preconn_actions; @@ -17,39 +18,42 @@ my %postconn_actions; my %disconn_actions; sub load_actions { - open ACTIONS, q{<}, "$ENV{HOME}/.irssi/connectcmd_actions"; + my $fi; + + open $fi, '<', "$ENV{HOME}/.irssi/connectcmd_actions"; - while (<ACTIONS>) { + while (<$fi>) { my @lines = split "\n"; foreach my $line (@lines) { my ($server, $type, $action) = split ":", $line; if ($type eq "preconn") { - $preconn_actions{$server} = $action; + $preconn_actions{$server} = $action; } elsif ($type eq "postconn") { - $postconn_actions{$server} = $action; + $postconn_actions{$server} = $action; } elsif ($type eq "disconn") { - $disconn_actions{$server} = $action; + $disconn_actions{$server} = $action; } } } - close ACTIONS; + close $fi; } sub save_actions { - open ACTIONS, q{>}, "$ENV{HOME}/.irssi/connectcmd_actions"; + my $fa; + open $fa, q{>}, "$ENV{HOME}/.irssi/connectcmd_actions"; foreach my $server (keys %preconn_actions) { - print ACTIONS "$server:preconn:$preconn_actions{$server}\n"; + print $fa "$server:preconn:$preconn_actions{$server}\n"; } foreach my $server (keys %postconn_actions) { - print ACTIONS "$server:postconn:$postconn_actions{$server}\n"; + print $fa "$server:postconn:$postconn_actions{$server}\n"; } foreach my $server (keys %disconn_actions) { - print ACTIONS "$server:disconn:$disconn_actions{$server}\n"; + print $fa "$server:disconn:$disconn_actions{$server}\n"; } - close ACTIONS; + close $fa; } sub sig_server_looking { @@ -78,7 +82,13 @@ sub sig_server_disconnected { sub cmd_connectcmd { my ($data, $server, $witem) = @_; - my ($op, $type, $server, $action) = split " ", $data; + + #my ($op, $type, $server, $action) = split " ", $data; + $data =~ m/^(\S*)\s+(\S*)\s+(\S*)\s+(.*)$/; + my $op=$1; + my $type=$2; + my $server=$3; + my $action=$4; $op = lc $op; @@ -146,7 +156,7 @@ sub cmd_connectcmd { } } -load_actions; +load_actions(); Irssi::command_bind ('connectcmd', 'cmd_connectcmd'); diff --git a/scripts/dau.pl b/scripts/dau.pl index 89a6623..ac8c051 100644 --- a/scripts/dau.pl +++ b/scripts/dau.pl @@ -1417,7 +1417,7 @@ sub switch_create_files { } else { - if (open(FH1, "> $file1")) { + if (open(FH1, ">", $file1)) { print FH1 &fix(<<' END'); # dau.pl - http://dau.pl/ @@ -1451,7 +1451,7 @@ sub switch_create_files { } else { - if (open(FH1, "> $file2")) { + if (open(FH1, ">", $file2)) { print FH1 &fix(<<' END'); END @@ -1479,7 +1479,7 @@ sub switch_create_files { } else { - if (open(FH1, "> $file3")) { + if (open(FH1, ">", $file3)) { print FH1 &fix(<<' END'); END @@ -5736,7 +5736,7 @@ sub time_parse { ################################################################################ sub debug_message { - open(DEBUG, ">> $ENV{HOME}/.dau/.debug"); + open(DEBUG, ">>", "$ENV{HOME}/.dau/.debug"); print DEBUG $_[0]; @@ -5746,5 +5746,5 @@ sub debug_message { #BEGIN { # use warnings; # -# open(STDERR, ">> $ENV{HOME}/.dau/.STDERR"); +# open(STDERR, ">>", $ENV{HOME}/.dau/.STDERR"); #} diff --git a/scripts/fullrain.pl b/scripts/fullrain.pl new file mode 100644 index 0000000..bac0a62 --- /dev/null +++ b/scripts/fullrain.pl @@ -0,0 +1,98 @@ +# fullrain.pl - Irssi script for colorized fullwidth text +# Copyright (C) 2017 Kenneth B. Jensen <kenneth@jensen.cf> + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 3 as +# published by the Free Software Foundation. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +use strict; +use warnings; +use Encode qw(decode); +use Irssi qw(command_bind active_win); + +our $VERSION = '1.0.0'; +our %IRSSI = ( + authors => 'kjensenxz', + contact => 'kenneth@jensen.cf', + name => 'fullrain', + url => 'http://github.com/kjensenxz', + description => 'Prints colorized fullwidth text', + license => 'GNU GPLv3', + + # code borrowed from scripts: + # 'fullwidth' by prussian <genunrest@gmail.com> + # http://github.com/GeneralUnRest/ || Apache 2.0 License + # 'rainbow' by Jakub Jankowski <shasta@atn.pl> + # http://irssi.atn.pl/ || GNU GPLv2 (or later) License +); +# colors +# 0 white +# 4 light red +# 8 yellow +# 9 light green +# 11 light cyan +# 12 light blue +# 13 light magenta +my @COLORS = (0, 4, 8, 9, 11, 12, 13); + +sub make_fullcolor { + my $str = decode('UTF-8', $_[0]); + my $newstr = q(); + + my $color = 0; + my $prev = $color; + foreach my $char (split //xms, $str) { + if ($char =~ /\s/xms) { + $newstr .= q( ); + } + else { + my $nchar = ord $char; + while (($color = int rand scalar @COLORS) == $prev) {}; + $prev = $color; + $newstr .= "\003" . $COLORS[$prev]; + # check if char is printing nonwhite ascii + if ($nchar > ord ' ' && $nchar <= ord '~') { + $newstr .= chr $nchar + 65_248; + } + else { + $newstr .= $char . ' '; + } + } + } + return $newstr; +} + +command_bind(rfsay => sub { + my $say = make_fullcolor($_[0]); + active_win->command("say $say"); #say what you want + # but don't play games with my affection +}); + +command_bind(rfme => sub { + my $say = make_fullcolor($_[0]); + active_win->command("/me $say"); +}); + +command_bind(rftopic => sub { + my $say = make_fullcolor($_[0]); + active_win->command("/topic $say"); +}); + +command_bind(rfaway => sub { + my $say = make_fullcolor($_[0]); + active_win->command("/away $say"); +}); + +1; + +# changelog: +# 2017/03/28 (1.0.0): initial release diff --git a/scripts/kicks.pl b/scripts/kicks.pl index 9df9314..76e87ea 100644 --- a/scripts/kicks.pl +++ b/scripts/kicks.pl @@ -4,76 +4,77 @@ # - http://www.penguin-breeder.org/irssi/ #<scriptinfo> +use strict; use vars qw($VERSION %IRSSI); use Irssi 20020120; -$VERSION = "0.26"; +$VERSION = "0.27"; %IRSSI = ( - authors => "c0ffee", - contact => "c0ffee\@penguin-breeder.org", - name => "Various kick and ban commands", - description => "Enhances /k /kb and /kn with some nice options.", - license => "Public Domain", - url => "http://www.penguin-breeder.org/irssi/", - changed => "Tue Nov 14 23:19:19 CET 2006", + authors => "c0ffee", + contact => "c0ffee\@penguin-breeder.org", + name => "Various kick and ban commands", + description => "Enhances /k /kb and /kn with some nice options.", + license => "Public Domain", + url => "http://www.penguin-breeder.org/irssi/", + changed => "2017-03-31", ); #</scriptinfo> my %kickreasons = ( - default => ["random kick victim", - "no", - "are you stupid?", - "i don't like you, go away!", - "oh, fsck off", - "waste other ppls time, elsewhere", - "get out and STAY OUT", - "don't come back", - "no thanks", - "on popular demand, you are now leaving the channel", - "\$N", - "*void*", - "/part is the command you're looking for", - "this is the irssi of borg. your mIRC will be assimilated. resistance is futile.", - "Autokick! mwahahahah!" - ], - none => [""], - topic => ["\$topic"], + default => ["random kick victim", + "no", + "are you stupid?", + "i don't like you, go away!", + "oh, fsck off", + "waste other ppls time, elsewhere", + "get out and STAY OUT", + "don't come back", + "no thanks", + "on popular demand, you are now leaving the channel", + "\$N", + "*void*", + "/part is the command you're looking for", + "this is the irssi of borg. your mIRC will be assimilated. resistance is futile.", + "Autokick! mwahahahah!" + ], + none => [""], + topic => ["\$topic"], ); # fine tune the script for different chatnets -# cmdline_k regular expr that matches a correct cmdline for /k -# req_chan 0/1 whether the channel is always part of the cmdline -# num_nicks number of nicks ... (-1 = inf) -# start_with_dash 0/1 whether the normal cmdline may start with a dash -# match_chn matches channels -# match_n match nicks -# match_reason matches reasons -# default_reason reason to give as "no reason" +# cmdline_k regular expr that matches a correct cmdline for /k +# req_chan 0/1 whether the channel is always part of the cmdline +# num_nicks number of nicks ... (-1 = inf) +# start_with_dash 0/1 whether the normal cmdline may start with a dash +# match_chn matches channels +# match_n match nicks +# match_reason matches reasons +# default_reason reason to give as "no reason" my %cfg = ( - IRC => { - cmdline_k => '\s*([!#+&][^\x0\a\n\r ]*)\s+[-\[\]\\\\\`{}\w_|^\'~]+(,[-\[\]\\\\\`{}\w_|^\'~]+)*\s+\S.*', - req_chan => 0, - num_nicks => 3, # actually, /k takes more, but - # normal irc servers only take - # three in a row - start_with_dash => 1, - match_chn => '([!#+&][^\x0\a\n\r ]*)\s', - match_n => '(?:^|\s+)([-\[\]\\\\\`{}\w_|^\'~]+(?:,[-\[\]\\\\\`{}\w_|^\']+)*)', - match_reason => '^\s*[!#+&][^\x0\a\n\r ]*\s+[-\[\]\\\\\`{}\w_|^\'~]+(?:,[-\[\]\\\\\`{}\w_|^\'~]+)*\s+(\S.*)$', - default_reason => '$N' - }, - - SILC => { - cmdline_k => '\s*[^\x0-\x20\*\?,@!]+\s+[^\x0-\x20\*\?,@!]+\s+\S.*', - req_chan => 1, - num_nicks => 1, - start_with_dash => 0, - match_chn => '\s*([^\x0-\x20\*\?,@!]+)\s+[^\x0-\x20\*\?,@!]+(?:,[^\x0-\x20\*\?,@!]+)*', - match_n => '\s*(?:[^\x0-\x20\*\?,@!]+\s+)?([^\x0-\x20\*\?,@!]+(?:,[^\x0-\x20\*\?,@!]+)*)', - match_reason => '\s*[^\x0-\x20\*\?,@!]+\s+[^\x0-\x20\*\?,@!]+(?:,[^\x0-\x20\*\?,@!]+)*\s+(\S.*)', - default_reason => '$N' - } + IRC => { + cmdline_k => '\s*([!#+&][^\x0\a\n\r ]*)\s+[-\[\]\\\\\`{}\w_|^\'~]+(,[-\[\]\\\\\`{}\w_|^\'~]+)*\s+\S.*', + req_chan => 0, + num_nicks => 3, # actually, /k takes more, but + # normal irc servers only take + # three in a row + start_with_dash => 1, + match_chn => '([!#+&][^\x0\a\n\r ]*)\s', + match_n => '(?:^|\s+)([-\[\]\\\\\`{}\w_|^\'~]+(?:,[-\[\]\\\\\`{}\w_|^\']+)*)', + match_reason => '^\s*[!#+&][^\x0\a\n\r ]*\s+[-\[\]\\\\\`{}\w_|^\'~]+(?:,[-\[\]\\\\\`{}\w_|^\'~]+)*\s+(\S.*)$', + default_reason => '$N' + }, + + SILC => { + cmdline_k => '\s*[^\x0-\x20\*\?,@!]+\s+[^\x0-\x20\*\?,@!]+\s+\S.*', + req_chan => 1, + num_nicks => 1, + start_with_dash => 0, + match_chn => '\s*([^\x0-\x20\*\?,@!]+)\s+[^\x0-\x20\*\?,@!]+(?:,[^\x0-\x20\*\?,@!]+)*', + match_n => '\s*(?:[^\x0-\x20\*\?,@!]+\s+)?([^\x0-\x20\*\?,@!]+(?:,[^\x0-\x20\*\?,@!]+)*)', + match_reason => '\s*[^\x0-\x20\*\?,@!]+\s+[^\x0-\x20\*\?,@!]+(?:,[^\x0-\x20\*\?,@!]+)*\s+(\S.*)', + default_reason => '$N' + } ); sub initialize { @@ -83,51 +84,53 @@ sub initialize { my ($basedir) = $conf_file =~ /^(.*\/).*?/; if (-f $conf_file) { - open CONF, $conf_file; - - while (<CONF>) { - $line++; - - next if /^\s*#/; - - chomp; - ($key, $reasons) = /^(\S+)\s+(.+)\s*$/ or next; - - if ($reasons =~ /\`([^\s]+).*?\`/) { - $kickreasons{$key} = "$reasons"; - Irssi::print("Added executable $1 as $key..."); - next; - } - - $reasons =~ s/^"(.*)"$/$1/; - $reasons =~ s/~/$ENV{HOME}/; - $reasons =~ s/^([^\/])/$basedir$1/; - - if (-f $reasons) { - - $kickreasons{$key} = []; - - open REASON, $reasons; - - while (<REASON>) { - chomp; - push @{$kickreasons{$key}}, $_; - } - - close REASON; - Irssi::print("Loaded $reasons as $key..."); - } else { - Irssi::print("can't parse config line $line..."); - } - } - close CONF; + open CONF, '<', $conf_file; + + my $line=0; + + while (<CONF>) { + $line++; + + next if /^\s*#/; + + chomp; + my ($key, $reasons) = /^(\S+)\s+(.+)\s*$/ or next; + + if ($reasons =~ /\`([^\s]+).*?\`/) { + $kickreasons{$key} = "$reasons"; + Irssi::print("Added executable $1 as $key..."); + next; + } + + $reasons =~ s/^"(.*)"$/$1/; + $reasons =~ s/~/$ENV{HOME}/; + $reasons =~ s/^([^\/])/$basedir$1/; + + if (-f $reasons) { + + $kickreasons{$key} = []; + + open REASON, '<', $reasons; + + while (<REASON>) { + chomp; + push @{$kickreasons{$key}}, $_; + } + + close REASON; + Irssi::print("Loaded $reasons as $key..."); + } else { + Irssi::print("can't parse config line $line..."); + } + } + close CONF; } else { Irssi::print("Could not find configuration file for kicks..."); - Irssi::print("... use /set kicks_configuration <file>"); + Irssi::print("... use /set kicks_configuration <file>"); } } - + sub get_a_reason { my ($topic) = @_; @@ -147,15 +150,17 @@ sub cmd_realkick { return if not $server or not defined $cfg{$server->{chat_type}} - or not $channel - or $data =~ /^$cfg{$server->{chat_type}}{cmdline_k}$/; + or not $channel + or $data =~ /^$cfg{$server->{chat_type}}{cmdline_k}$/; Irssi::signal_stop(); # let's see whether some options where supplied - $default = Irssi::settings_get_str("default_kick_options"); + my $default = Irssi::settings_get_str("default_kick_options"); $data = "$default $data" if not $default =~ /^\s*$/; - @opts = split /\s+/, $data; + my @opts = split /\s+/, $data; + my $opt; + my $fail=0; while (($opt) = (shift @opts) =~ /^\s*-(\S+)/) { @@ -163,18 +168,18 @@ sub cmd_realkick { $data =~ s/^\s*-$opt\s+//, $reasons = lc $opt, - next if defined $kickreasons{lc $opt}; + next if defined $kickreasons{lc $opt}; last if $cfg{$server->{chat_type}}{start_with_dash}; Irssi::print("Unknown option -$opt"); - $fail = true; + $fail = 1; } return if $fail; - $chn = ""; + my $chn = ""; ($chn) = $data =~ /^$cfg{$server->{chat_type}}{match_chn}/; if ($cfg{$server->{chat_type}}{req_chan} && ($chn eq "")) { @@ -184,37 +189,39 @@ sub cmd_realkick { # do we need to add a channel? if ($chn eq "") { - Irssi::print("Not joined to any channel"), return - if $channel->{type} ne "CHANNEL"; + Irssi::print("Not joined to any channel"), return + if $channel->{type} ne "CHANNEL"; $chn = $channel->{name}; - $data = "$chn $data"; + $data = "$chn $data"; } # is a reason already supplied? + my $reason; $reason = get_a_reason($reasons) if not (($reason) = $data =~ /$cfg{$server->{chat_type}}{match_reason}/); $reason = $cfg{$server->{chat_type}}{default_reason} if $reason =~ /^\s*$/; - @nicks = split /,/, ($data =~ /$cfg{$server->{chat_type}}{match_n}/)[0]; - $num_nicks = $cfg{$server->{chat_type}}{num_nicks}; + my @nicks = split /,/, ($data =~ /$cfg{$server->{chat_type}}{match_n}/)[0]; + my $num_nicks = $cfg{$server->{chat_type}}{num_nicks}; $num_nicks = @nicks if $num_nicks <= 0; + my @commands; undef @commands; while (@nicks) { - $tmp = ($chn ne "" ? "$chn " : "") . + my $tmp = ($chn ne "" ? "$chn " : "") . join ",", (splice @nicks,0,$num_nicks); - $tmp =~ s/([;\\\$])/\\$1/g; - push @commands, "$tmp $reason"; + $tmp =~ s/([;\\\$])/\\$1/g; + push @commands, "$tmp $reason"; } foreach (@commands) { if ($_ =~ /^$cfg{$server->{chat_type}}{cmdline_k}$/) { s/\s+$//; - $channel->command("EVAL $cmd $_") + $channel->command("EVAL $cmd $_"); } else { Irssi::print("BUG: generated invalid $cmd command: $_"); } @@ -237,7 +244,7 @@ sub cmd_kickban { Irssi::settings_add_str("misc", "default_kick_options", ""); Irssi::settings_add_str("misc", "kicks_configuration", - Irssi::get_irssi_dir() . "/kicks.conf"); + Irssi::get_irssi_dir() . "/kicks.conf"); Irssi::command_bind("kick", "cmd_kick"); Irssi::command_bind("kickban", "cmd_kickban"); diff --git a/scripts/localize.pl b/scripts/localize.pl index 7aabe9f..b836c92 100644 --- a/scripts/localize.pl +++ b/scripts/localize.pl @@ -60,7 +60,7 @@ use strict; use vars qw($VERSION %IRSSI); -$VERSION = "2014112501"; +$VERSION = "2017040101"; %IRSSI = ( authors => "Stefan 'tommie' Tomanek", contact => "stefan\@pico.ruhr.de", @@ -511,7 +511,7 @@ sub save_cache { my $filename = Irssi::settings_get_str('localize_cache_filename'); my $data = Dumper(\%cache); local *F; - open(F, '>'.$filename); + open(F, '>',$filename); print(F $data); close(F); print CLIENTCRAP "%R>>%n localize cache (".scalar(keys(%cache))." entries/".length($data)." bytes) saved to ".$filename; @@ -522,7 +522,7 @@ sub load_cache { my $filename = Irssi::settings_get_str('localize_cache_filename'); my (%new_cache, $text); local *F; - open F, "<".$filename || return; + open F, "<",$filename || return; $text .= $_ foreach (<F>); close(F); eval { %new_cache = %{ eval "$text" }; }; @@ -561,7 +561,7 @@ sub show_map ($$$) { my $cmd = Irssi::settings_get_str('localize_xplanet_cmd'); my $file = Irssi::settings_get_str('localize_xplanet_temp_file'); local *F; - open F, '>'.$file; + open F, '>',$file; print F $lat.' '.$long.' "'.$nick.'"'; close F; system("$cmd -markerf $file &"); diff --git a/scripts/mangle.pl b/scripts/mangle.pl index 00158a5..acfbcd6 100644 --- a/scripts/mangle.pl +++ b/scripts/mangle.pl @@ -7,18 +7,20 @@ use strict; use locale; use Irssi 20020324; +use Irssi::TextUI; use POSIX; use Data::Dumper; use vars qw($VERSION %IRSSI %HELP %channels %translations); -$VERSION = '2004031701'; +$VERSION = '2017031701'; %IRSSI = ( authors => 'Szymon Sokol', contact => 'szymon@hell.pl', name => 'mangle', description => 'translates your messages into Morse code, rot13 and other sillinesses.', license => 'GPLv2', - url => 'http://irssi.org/scripts/', changed => $VERSION, + url => 'http://irssi.org/scripts/', + changed => $VERSION, modules => 'Data::Dumper' ); @@ -192,23 +194,25 @@ sub add_channel ($$) { sub save_channels { my $filename = Irssi::settings_get_str('mangle_filename'); - local *F; - open F, '>'.$filename; + my $fo; + open $fo, '>',$filename; my $data = Dumper(\%channels); - print F $data; - close F; + print $fo $data; + close $fo; print CLIENTCRAP "%R>>%n Mangle channels saved"; } sub load_channels { my $filename = Irssi::settings_get_str('mangle_filename'); return unless (-e $filename); - local *F; - open F, '<'.$filename; + my $fi; + open $fi, '<',$filename; my $text; - $text .= $_ foreach <F>; - no strict "vars"; - %channels = %{ eval "$text" }; + $text .= $_ foreach <$fi>; + #no strict "vars"; + my $VAR1; + eval "$text"; + %channels = %$VAR1; } sub mangle_show ($$) { diff --git a/scripts/newsline.pl b/scripts/newsline.pl index 0f54eee..b37cfcc 100644 --- a/scripts/newsline.pl +++ b/scripts/newsline.pl @@ -3,7 +3,7 @@ use strict; use vars qw($VERSION %IRSSI); -$VERSION = '2003021101'; +$VERSION = '2017040101'; %IRSSI = ( authors => 'Stefan \'tommie\' Tomanek', contact => 'stefan@pico.ruhr.de', @@ -287,10 +287,10 @@ sub call_openurl ($) { my ($url) = @_; no strict "refs"; # check for a loaded openurl - if (defined %{ "Irssi::Script::openurl::" }) { - &{ "Irssi::Script::openurl::launch_url" }($url); + if (my $code = Irssi::Script::openurl::->can('launch_url')) { + $code->($url); } else { - print CLIENTCRAP "%R>>%n Please install openurl.pl"; + print CLIENTCRAP "%R>>%n Please install openurl.pl"; } use strict "refs"; } @@ -377,7 +377,7 @@ sub reload_config() { my $text; if (-e $filename) { local *F; - open F, "<".$filename; + open F, "<",$filename; $text .= $_ foreach (<F>); close F; if ($text) { @@ -402,7 +402,7 @@ sub reload_config() { sub save_config() { local *F; my $filename = Irssi::settings_get_str('newsline_sites_file'); - open(F, ">$filename"); + open(F, '>',$filename); my $dumper = Data::Dumper->new([\%sites], ['sites']); $dumper->Purity(1)->Deepcopy(1); my $data = $dumper->Dump; diff --git a/scripts/nicklist.pl b/scripts/nicklist.pl index 0317ba3..477ee2c 100755 --- a/scripts/nicklist.pl +++ b/scripts/nicklist.pl @@ -5,7 +5,7 @@ use strict; use IO::Handle; # for (auto)flush use Fcntl; # for sysopen use vars qw($VERSION %IRSSI); -$VERSION = '0.4.6'; +$VERSION = '0.4.7'; %IRSSI = ( authors => 'Wouter Coekaerts', contact => 'coekie@irssi.org', @@ -13,7 +13,7 @@ $VERSION = '0.4.6'; description => 'draws a nicklist to another terminal, or at the right of your irssi in the same terminal', license => 'GPLv2', url => 'http://wouter.coekaerts.be/irssi', - changed => '29/06/2004' + changed => '20/03/2017' ); sub cmd_help { @@ -193,7 +193,7 @@ sub screen_size { unless (defined &TIOCGWINSZ) { die "Term::ReadKey not found, and ioctl 'workaround' failed. Install the Term::ReadKey perl module to use screen mode.\n"; } - open(TTY, "+</dev/tty") or die "No tty: $!"; + open(TTY, "+<","/dev/tty") or die "No tty: $!"; unless (ioctl(TTY, &TIOCGWINSZ, $winsize='')) { die "Term::ReadKey not found, and ioctl 'workaround' failed ($!). Install the Term::ReadKey perl module to use screen mode.\n"; } diff --git a/scripts/ogg123.pl b/scripts/ogg123.pl index 274ebbd..85a6700 100644 --- a/scripts/ogg123.pl +++ b/scripts/ogg123.pl @@ -64,7 +64,7 @@ sub cmd_ogg123 { } } - open (f, $ogg123file) || return; + open (f,'<', $ogg123file) || return; while ($ogg123linha=<f>) { diff --git a/scripts/pushsafer.pl b/scripts/pushsafer.pl new file mode 100644 index 0000000..584f19c --- /dev/null +++ b/scripts/pushsafer.pl @@ -0,0 +1,312 @@ +use strict; +use warnings; + +use Irssi; +use vars qw($VERSION %IRSSI %config); +use LWP::UserAgent; +use Scalar::Util qw(looks_like_number); + +$VERSION = '0.0.1'; + +%IRSSI = ( + authors => 'Kevin Siml', + contact => 'kevinsiml@googlemail.com', + name => 'pushsafer', + description => 'Push hilights and private messages when away by the pushsafer.com API', + license => 'BSD', + url => 'https://www.pushsafer.com', + changed => "2017-03-31" +); + +my $pushsafer_ignorefile; + + +sub cmd_help { + my $out = <<'HELP_EOF'; +PUSHIGNORE LIST +PUSHIGNORE ADD <hostmask> +PUSHIGNORE REMOVE <number> + +The mask matches in the format ident@host. Notice that no-ident responses puts +a tilde in front of the ident. + +Examples: + Will match foo@test.bar.de but *not* ~foo@test.bar.se. + /PUSHIGNORE ADD foo@*.bar.de + Use the list-command to show a list of ignores and the number in front + combined with remove to delete that mask. + /PUSHIGNORE REMOVE 2 + +For a list of available settings, run: + /set pushsafer +HELP_EOF + chomp $out; + Irssi::print($out, MSGLEVEL_CLIENTCRAP); +} +sub read_settings { + $pushsafer_ignorefile = Irssi::settings_get_str('pushsafer_ignorefile'); +} + +sub debug { + return unless Irssi::settings_get_bool('pushsafer_debug'); + my $text = shift; + my @caller = caller(1); + Irssi::print('From '.$caller[3].': '.$text); +} + +sub send_push { + my $private_key = Irssi::settings_get_str('pushsafer_key'); + if (!$private_key) { + debug('Missing Pushsafer.com private or alias_key.'); + return; + } + + debug('Sending notification.'); + my ($channel, $text) = @_; + my $resp = LWP::UserAgent->new()->post( + 'https://www.pushsafer.com/api', [ + k => $private_key, + m => $text, + d => Irssi::settings_get_str('pushsafer_device'), + s => Irssi::settings_get_str('pushsafer_sound'), + i => Irssi::settings_get_str('pushsafer_icon'), + v => Irssi::settings_get_str('pushsafer_vibration'), + u => Irssi::settings_get_str('pushsafer_url'), + ut => Irssi::settings_get_str('pushsafer_urltitle'), + l => Irssi::settings_get_str('pushsafer_time2live'), + t => $channel + ] + ); + + if ($resp->is_success) { + debug('Notification successfully sent.'); + } + else { + debug('Notification not sent: '.$resp->decoded_content); + } +} + +sub msg_pub { + my ($server, $data, $nick, $address, $target) = @_; + my $safeNick = quotemeta($server->{nick}); + + if(check_ignore_channels($target)) { + return; + } + + if(check_ignore($address) || check_away($server)) { + return; + } + + if ($data =~ /$safeNick/i) { + debug('Got pub msg.'); + send_push($target, $nick.': '.Irssi::strip_codes($data)); + } +} + +sub msg_print_text { + my ($dest, $text, $stripped) = @_; + my $server = $dest->{server}; + my $target = $dest->{target}; + + return if (!$server || !($dest->{level} & MSGLEVEL_HILIGHT)); + + if(check_ignore_channels($target)) { + return; + } + + if(check_away($server)) { + return; + } + + debug('Got nick highlight'); + $stripped =~ s/^\s+|\s+$//g; + send_push($target, $stripped); +} + +sub msg_pri { + my ($server, $data, $nick, $address) = @_; + + if(check_ignore($address) || check_away($server)) { + return; + } + debug('Got priv msg.'); + send_push('Priv, '.$nick, Irssi::strip_codes($data)); +} + +sub msg_kick { + my ($server, $channel, $nick, $kicker, $address, $reason) = @_; + + if(check_ignore($address) || check_away($server)) { + return; + } + + if ($nick eq $server->{nick}) { + debug('Was kicked.'); + send_push('Kicked: '.$channel, 'Was kicked by: '.$kicker.'. Reason: '.Irssi::strip_codes($reason)); + } +} + +sub msg_test { + my ($data, $server, $item) = @_; + $data =~ s/^([\s]+).*$/$1/; + my $orig_debug = Irssi::settings_get_bool('pushsafer_debug'); + Irssi::settings_set_bool('pushsafer_debug', 1); + debug("Sending test message :" . $data); + send_push("Test Message", Irssi::strip_codes($data)); + Irssi::settings_set_bool('pushsafer_debug', $orig_debug); +} + +# check our away status & pushsafer_only_if_away. returns 0 if it's ok to send a message. +sub check_away { + my ($server) = @_; + my $msg_only_if_away = Irssi::settings_get_bool('pushsafer_only_if_away'); + if ($msg_only_if_away && $server->{usermode_away} != '1') { + debug("Only sending messages if we're marked as away, and we're not"); + return 1; + } + return 0; +} + +sub check_ignore { + return 0 unless(Irssi::settings_get_bool('pushsafer_ignore')); + my @ignores = read_file(); + return 0 unless(@ignores); + my ($mask) = @_; + + foreach (@ignores) { + $_ =~ s/\./\\./g; + $_ =~ s/\*/.*?/g; + if ($mask =~ m/^$_$/i) { + debug('Ignore matches, not pushing.'); + return 1; + } + } + return 0; +} + +sub check_ignore_channels { + my ($target) = @_; + my @ignore_channels = split(' ', Irssi::settings_get_str('pushsafer_ignorechannels')); + return 0 unless @ignore_channels; + if (grep {lc($_) eq lc($target)} @ignore_channels) { + debug("$target set as ignored channel."); + return 1; + } + return 0; +} + +sub ignore_handler { + my ($data, $server, $item) = @_; + $data =~ s/\s+$//g; + Irssi::command_runsub('pushignore', $data, $server, $item); +} + +sub ignore_unknown { + cmd_help(); + Irssi::signal_stop(); # Don't print 'no such command' error. +} + +sub ignore_list { + my @data = read_file(); + if (@data) { + my $i = 1; + my $out; + foreach(@data) { + $out .= $i++.". $_\n"; + } + chomp $out; + Irssi::print($out, MSGLEVEL_CLIENTCRAP); + } +} + +sub ignore_add { + my ($data, $server, $item) = @_; + $data =~ s/^([\s]+).*$/$1/; + return Irssi::print("No hostmask given.", MSGLEVEL_CLIENTCRAP) unless($data ne ""); + + my @ignores = read_file(); + push(@ignores, $data); + write_file(@ignores); + Irssi::print("Successfully added '$data'.", MSGLEVEL_CLIENTCRAP); +} + +sub ignore_remove { + my($num, $server, $item) = @_; + $num =~ s/^(\d+).*$/$1/; + return Irssi::print("List-number is needed when removing", MSGLEVEL_CLIENTCRAP) unless(looks_like_number($num)); + my @ignores = read_file(); + + # Index out of range + return Irssi::print("Number was out of range.", MSGLEVEL_CLIENTCRAP) unless(scalar(@ignores) >= $num); + delete $ignores[$num-1]; + write_file(@ignores); +} + +sub write_file { + read_settings(); + my $fp; + if (!open($fp, ">", $pushsafer_ignorefile)) { + Irssi::print("Error opening ignore file", MSGLEVEL_CLIENTCRAP); + return; + } + print $fp join("\n", @_); + close $fp; +} + +sub read_file { + read_settings(); + my $fp; + if (-e $pushsafer_ignorefile) { + if (!open($fp, "<", $pushsafer_ignorefile)) { + Irssi::print("Error opening ignore file", MSGLEVEL_CLIENTCRAP); + return; + } + } + + my @out; + while (<$fp>) { + chomp; + next if $_ eq ''; + push(@out, $_); + } + close $fp; + + return @out; +} + +Irssi::settings_add_str($IRSSI{'name'}, 'pushsafer_key', ''); +Irssi::settings_add_bool($IRSSI{'name'}, 'pushsafer_debug', 0); +Irssi::settings_add_bool($IRSSI{'name'}, 'pushsafer_ignore', 1); +Irssi::settings_add_bool($IRSSI{'name'}, 'pushsafer_only_if_away', 0); +Irssi::settings_add_str($IRSSI{'name'}, 'pushsafer_ignorefile', Irssi::get_irssi_dir().'/pushsafer_ignores'); +Irssi::settings_add_str($IRSSI{'name'}, 'pushsafer_ignorechannels', ''); + +# Check the Pushsafer.com API > https://www.pushsafer.com/en/pushapi for replacing params +Irssi::settings_add_str($IRSSI{'name'}, 'pushsafer_sound', '21'); +Irssi::settings_add_str($IRSSI{'name'}, 'pushsafer_device', ''); +Irssi::settings_add_str($IRSSI{'name'}, 'pushsafer_icon', '25'); +Irssi::settings_add_str($IRSSI{'name'}, 'pushsafer_vibration', '0'); +Irssi::settings_add_str($IRSSI{'name'}, 'pushsafer_url', ''); +Irssi::settings_add_str($IRSSI{'name'}, 'pushsafer_urltitle', ''); +Irssi::settings_add_str($IRSSI{'name'}, 'pushsafer_time2live', ''); + +Irssi::command_bind('help pushignore', \&cmd_help); +Irssi::command_bind('pushignore help', \&cmd_help); +Irssi::command_bind('pushignore add', \&ignore_add); +Irssi::command_bind('pushignore remove', \&ignore_remove); +Irssi::command_bind('pushignore list', \&ignore_list); +Irssi::command_bind('pushignore', \&ignore_handler); +Irssi::command_bind('pushtest', \&msg_test); +Irssi::signal_add_first("default command pushignore", \&ignore_unknown); + + +#Irssi::signal_add_last('message public', 'msg_pub'); +Irssi::signal_add_last('print text', 'msg_print_text'); +Irssi::signal_add_last('message private', 'msg_pri'); +Irssi::signal_add_last('message kick', 'msg_kick'); + +Irssi::print('%Y>>%n '.$IRSSI{name}.' '.$VERSION.' loaded.'); +if (!Irssi::settings_get_str('pushsafer_key')) { + Irssi::print('%Y>>%n '.$IRSSI{name}.' Pushsafer.com private or alias key is not set, set it with /set pushsafer_key YourPrivateOrAliasKey'); +} diff --git a/scripts/query.pl b/scripts/query.pl index 1d472ea..9d69aad 100644 --- a/scripts/query.pl +++ b/scripts/query.pl @@ -16,7 +16,7 @@ use POSIX; # ======[ Script Header ]=============================================== use vars qw{$VERSION %IRSSI}; -($VERSION) = '$Revision: 1.24 $' =~ / (\d+\.\d+) /; +($VERSION) = '$Revision: 1.25 $' =~ / (\d+\.\d+) /; %IRSSI = ( name => 'query', authors => 'Peder Stray', @@ -44,7 +44,7 @@ sub load_defaults { local *FILE; %defaults = (); - open FILE, "< $file"; + open FILE, '<',$file; while (<FILE>) { my($mask,$maxage,$immortal) = split; $defaults{$mask}{maxage} = $maxage; @@ -59,7 +59,7 @@ sub save_defaults { my $file = Irssi::get_irssi_dir."/query"; local *FILE; - open FILE, "> $file"; + open FILE, '>', $file; for (keys %defaults) { my $d = $defaults{$_}; print FILE join("\t", $_, diff --git a/scripts/quiz.pl b/scripts/quiz.pl index 09ae726..46e34d8 100644 --- a/scripts/quiz.pl +++ b/scripts/quiz.pl @@ -26,7 +26,7 @@ use strict; use vars qw($VERSION %IRSSI); use Irssi 20020217.1542 (); # Version 0.8.1 -$VERSION = "0.7"; +$VERSION = "0.8"; %IRSSI = ( authors => "Simon Huggins", contact => "huggie-irssi\@earth.li", @@ -34,7 +34,7 @@ name => "Quiz", description => "Turns irssi into a quiz bot", license => "GPLv2", url => "http://the.earth.li/~huggie/irssi/", -changed => "Wed Apr 24 01:12:01 BST 2002", +changed => "2017-04-03", ); use Irssi::Irc; @@ -69,7 +69,7 @@ sub load_questions($$) { return if $game->{'questions'} and not $force; my $file = Irssi::settings_get_str("quiz_file"); - if (open(QS, "<$file")) { + if (open(QS, '<',$file)) { @{$game->{'questions'}}=<QS>; close(QS); Irssi::print("Loaded questions"); diff --git a/scripts/quizmaster-fr.pl b/scripts/quizmaster-fr.pl index 1f5bd7b..c143a09 100644 --- a/scripts/quizmaster-fr.pl +++ b/scripts/quizmaster-fr.pl @@ -3,7 +3,7 @@ use strict; use vars qw($VERSION %IRSSI); -$VERSION = '20030208+fr'; +$VERSION = '20170403+fr'; %IRSSI = ( authors => 'Stefan \'tommie\' Tomanek', contact => 'stefan@pico.ruhr.de', @@ -60,7 +60,7 @@ sub draw_box ($$$$) { sub save_quizfile { local *F; my $filename = Irssi::settings_get_str("quizmaster_questions_file"); - open(F, ">".$filename); + open(F, '>',$filename); my $dumper = Data::Dumper->new([\%questions], ['quest']); $dumper->Purity(1)->Deepcopy(1); my $data = $dumper->Dump; @@ -75,7 +75,7 @@ sub load_quizfile ($) { return unless -e $file; my $text; local *F; - open F, $file; + open F,'<', $file; $text .= $_ foreach (<F>); close F; return unless "$text"; @@ -85,7 +85,7 @@ sub load_quizfile ($) { sub import_quizfile ($$) { my ($name, $file) = @_; local *F; - open(F, $file); + open(F,'<', $file); my @data = <F>; my @questions; my $quest = {}; diff --git a/scripts/quizmaster.pl b/scripts/quizmaster.pl index 5aec557..e226075 100644 --- a/scripts/quizmaster.pl +++ b/scripts/quizmaster.pl @@ -2,7 +2,7 @@ use strict; use vars qw($VERSION %IRSSI); -$VERSION = '20030208'; +$VERSION = '20170403'; %IRSSI = ( authors => 'Stefan \'tommie\' Tomanek', contact => 'stefan@pico.ruhr.de', @@ -59,7 +59,7 @@ sub draw_box ($$$$) { sub save_quizfile { local *F; my $filename = Irssi::settings_get_str("quizmaster_questions_file"); - open(F, ">".$filename); + open(F, ">",$filename); my $dumper = Data::Dumper->new([\%questions], ['quest']); $dumper->Purity(1)->Deepcopy(1); my $data = $dumper->Dump; @@ -74,7 +74,7 @@ sub load_quizfile ($) { return unless -e $file; my $text; local *F; - open F, $file; + open F,'<', $file; $text .= $_ foreach (<F>); close F; return unless "$text"; @@ -84,7 +84,7 @@ sub load_quizfile ($) { sub import_quizfile ($$) { my ($name, $file) = @_; local *F; - open(F, $file); + open(F,'<', $file); my @data = <F>; my @questions; my $quest = {}; diff --git a/scripts/scroller.pl b/scripts/scroller.pl index 5bc4abb..610eed9 100644 --- a/scripts/scroller.pl +++ b/scripts/scroller.pl @@ -28,11 +28,12 @@ use Irssi; +use Irssi::TextUI; use strict; use vars qw($VERSION %IRSSI); -$VERSION="0.01"; +$VERSION="0.02"; %IRSSI = ( authors=> 'Demonen', contact=> 'demmydemon@gmail.com', @@ -84,7 +85,7 @@ sub scrollerStart() { Irssi::settings_add_int('misc', 'scrollerSpeed', 200); $timeout = Irssi::timeout_add(Irssi::settings_get_int('scrollerSpeed'), 'scrollerTimeout' , undef); Irssi::statusbar_item_register('scroller', '$0', 'scrollerStatusbar'); - Irssi::command_bind scrollthis => \&scrollthis; + #Irssi::command_bind scrollthis => \&scrollthis; Irssi::signal_add('setup changed', 'scrollerUpdate'); &scrollerUpdate(); } diff --git a/scripts/signal_hilight.pl b/scripts/signal_hilight.pl new file mode 100644 index 0000000..30b7efc --- /dev/null +++ b/scripts/signal_hilight.pl @@ -0,0 +1,140 @@ +# signal_hilight.pl - (c) 2017 John Morrissey <jwm@horde.net> +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * 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. +# +# 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 OWNER 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. + +# About +# ===== +# +# When you're away, sends highlighted messages to you via Signal. +# +# +# To use +# ====== +# +# 1. Install signal-cli (https://github.com/AsamK/signal-cli). +# +# 2. Register a new Signal account for this device, or link to an existing +# one. +# +# It's better to create a dedicated Signal account to have this script +# send messages from. This requires a dedicated phone number to receive +# the verification code text message for the new Signal account. Google +# Voice numbers are useful here. +# +# Linking gives the host running irssi the same access to the account +# (such as reading messages, changing account settings, and more) as the +# Signal app has on your phone or computer. +# +# - Register a new account: +# - signal-cli -u +12128675309 register +# - Retrieve verification +# - signal-cli -u +12128675309 verify VERIFICATION-CODE-FROM-SMS +# +# - Link to an existing account: +# - signal-cli link -n $(hostname) +# - qrencode -o device-link-qrcode.png 'tsdevice:/?uuid=...' +# - View device-link-qrcode.png. +# - Scan the QR code with the Signal app +# (Settings -> Linked Devices -> Link New Device). +# +# 3. Load the script and configure: +# - /script load signal_hilight.pl +# - /set signal_phonenumber_from +12128675309 +# - /set signal_phonenumber_to +12128675309 + +use strict; +use warnings; + +use POSIX; + +use Irssi; + +our $VERSION = '1.0'; +our %IRSSI = ( + author => 'John Morrissey', + contact => 'jwm@horde.net', + name => 'signal_hilight', + description => 'Send highlighted messages via Signal', + licence => 'BSD', +); + +my $IS_AWAY = 0; + +sub send_notification { + my ($message) = @_; + + my $pid = fork(); + if ($pid > 0) { + Irssi::pidwait_add($pid); + } else { + eval { + my $from = Irssi::settings_get_str('signal_phonenumber_from'); + my $to = Irssi::settings_get_str('signal_phonenumber_to'); + + if ($from && $to && + open(SIGNAL_CLI, '|-', "signal-cli -u $from send $to")) { + + print SIGNAL_CLI "$message"; + close(SIGNAL_CLI); + } + }; + POSIX::_exit(0); + } +} + +sub sig_print_text { + my ($dest, $text, $stripped) = @_; + + if ($IS_AWAY && + ($dest->{level} & MSGLEVEL_PUBLIC) && + ($dest->{level} & (MSGLEVEL_HILIGHT|MSGLEVEL_MSGS)) && + ($dest->{level} & MSGLEVEL_NOHILIGHT) == 0) { + + send_notification($dest->{target} . ": $stripped"); + } +} + +sub sig_message_public { + my ($server, $msg, $nick, $address, $target) = @_; + + if ($server->{usermode_away}) { + $IS_AWAY = 1; + } else { + $IS_AWAY = 0; + } +} + +sub sig_message_private { + my ($server, $msg, $nick, $address, $target) = @_; + + if ($server->{usermode_away}) { + send_notification("$nick: $msg"); + } +} + +Irssi::signal_add('print text', \&sig_print_text); +Irssi::signal_add_last('message public', \&sig_message_public); +Irssi::signal_add_last('message private', \&sig_message_private); + +Irssi::settings_add_str('misc', 'signal_phonenumber_from', ''); +Irssi::settings_add_str('misc', 'signal_phonenumber_to', ''); diff --git a/scripts/sysinfoplus.pl b/scripts/sysinfoplus.pl index cc82d0d..fc0cff0 100644 --- a/scripts/sysinfoplus.pl +++ b/scripts/sysinfoplus.pl @@ -16,8 +16,10 @@ # -Total amount of memory counts (not the used amount, as before) # Changelog 2.10 -> 2.20: memory/swap info is displayed now (it was broken previously) and code is properly indented +use strict; +use vars qw/$VERSION %IRSSI/; -$VERSION = "2.20"; +$VERSION = "2.21"; %IRSSI = ( authors => "Juerd, Tronic", contact => "trn\@iki.fi", @@ -25,7 +27,7 @@ $VERSION = "2.20"; description => "Linux system information (with vPenis and other stuff)", license => "Public Domain", url => "http://juerd.nl/irssi/", - changed => "Mon Nov 04 15:17:30 EET 2002" + changed => "2017-04-02" ); BEGIN{ @@ -37,7 +39,6 @@ BEGIN{ $console = !!$@; } -use strict; # Tronic has no time for maintaining this and Juerd hates braces, so it might be better # not to expect any new versions ... @@ -51,7 +52,7 @@ sub sysinfo{ $ret = "Host '@uname[1]', running @uname[0] @uname[2] - "; - open FOO, '/proc/cpuinfo'; + open FOO,'<', '/proc/cpuinfo'; while (<FOO>){ /^processor\s*:\s*(\d+)/ ? $ret .= "Cpu$1: " : /^model name\s*:\s*(\w+[ A-Za-z]*)/ ? do { my $t = $1; $t =~ s/\s+$//; $ret .= "$t " } @@ -60,7 +61,7 @@ sub sysinfo{ } close FOO; $ret =~ s/( ?)$/;$1/; - open FOO, '/proc/pci'; + open FOO,'<', '/proc/pci'; while (<FOO>){ /^\s*(?:multimedia )?(.*?)( storage| compatible)? controller/i and push @pci, $1; } diff --git a/scripts/topicsed.pl b/scripts/topicsed.pl index d56ed3d..58d0143 100644 --- a/scripts/topicsed.pl +++ b/scripts/topicsed.pl @@ -4,17 +4,18 @@ # Thanks to Mikael Magnusson for the idea and patch to implement a # preview functionality. ;] # - +use strict; use Irssi; -use vars %IRSSI; +use vars qw/%IRSSI $VERSION/; +$VERSION="0.1"; %IRSSI = ( authors => "Gabor Nyeki", contact => "bigmac\@vim.hu", name => "topicsed", description => "editing channel topics by regexps", license => "public domain", - changed => "Fri Aug 13 19:27:38 CEST 2004" + changed => "2017-03-18" ); @@ -32,7 +33,7 @@ sub topicsed { return; } return if (!$server || !$server->{connected} || - !$winit || $winit->{type} != 'CHANNEL'); + !$winit || $winit->{type} ne 'CHANNEL'); my $topic = $winit->{topic}; my $x = $topic; |
