diff options
| author | mh | 2016-01-22 16:38:05 +0100 |
|---|---|---|
| committer | mh | 2016-01-22 16:38:05 +0100 |
| commit | e939f179641ece928beb0b02ac95eb3eebf9098b (patch) | |
| tree | db79febcc377b207adf856db15edf94654787307 /scripts/mh_sbsplitmode.pl | |
| parent | 87250c3abe7eb9ca2334941735fe1e313cdf69d4 (diff) | |
| download | scripts.irssi.org-e939f179641ece928beb0b02ac95eb3eebf9098b.tar.bz2 | |
mh_sbsplitmode.pl v1.06
provides a statusbar item showing if your server is in splitmode and /splitmode to show details
changes:
added _print/_print_details and supporting code
/splitmode now prints stats d unavailable in a bit nicer way
now using individual redir numeric events for stats d
now does a stats d on netsplit/join
added changed field to irssi header
Diffstat (limited to 'scripts/mh_sbsplitmode.pl')
| -rw-r--r-- | scripts/mh_sbsplitmode.pl | 96 |
1 files changed, 76 insertions, 20 deletions
diff --git a/scripts/mh_sbsplitmode.pl b/scripts/mh_sbsplitmode.pl index c4df06a..e3b15e2 100644 --- a/scripts/mh_sbsplitmode.pl +++ b/scripts/mh_sbsplitmode.pl @@ -1,6 +1,6 @@ ############################################################################## # -# mh_sbsplitmode.pl v1.05 (20151217) +# mh_sbsplitmode.pl v1.06 (20151227) # # Copyright (c) 2015 Michael Hansen # @@ -26,7 +26,7 @@ # optional details. there is also a command /splitmode that will list # the status of all servers being watched. since /stats d is disabled # for regular users on most irc networks, i have provided a setting to -# tell which networks we will çheck - currently only IRCnet is in the +# tell which networks we will check - currently only IRCnet is in the # list. if you do not have the privileges it will tell you that splitmode # is unavailable. # @@ -47,11 +47,24 @@ # mh_sbsplitmode_lag_limit (default 5): amount of lag (in seconds) where we skip # checking the server for splitmode # +# mh_sbsplitmode_print (default ON): enable/disable printing "* is in splitmode ..." +# or "* is no longer in splitmode" in all relevant (server/channel/query) windows +# of the server +# +# mh_sbsplitmode_print_details (default ON): enable/disable showing the server/user +# details in "* is in splitmode [servers:<current>/<min> users:<current>/<min>]" +# # to configure irssi to show the new statusbar item in a default irssi # installation type '/statusbar window add -after window_empty mh_sbsplitmode'. # see '/help statusbar' for more details and do not forget to '/save' # # history: +# v1.06 (20151227) +# added _print/_print_details and supporting code +# /splitmode now prints stats d unavailable in a bit nicer way +# now using individual redir numeric events for stats d +# now does a stats d on netsplit/join +# added changed field to irssi header # v1.05 (20151217) # added indents to /help # v1.04 (20151210) @@ -82,7 +95,7 @@ use strict; use Irssi 20100403; use Irssi::TextUI; -our $VERSION = '1.05'; +our $VERSION = '1.06'; our %IRSSI = ( 'name' => 'mh_sbsplitmode', @@ -91,6 +104,7 @@ our %IRSSI = 'authors' => 'Michael Hansen', 'contact' => 'mh on IRCnet #help', 'url' => 'http://scripts.irssi.org / https://github.com/mh-source/irssi-scripts', + 'changed' => 'Sun Dec 27 11:50:52 CET 2015', ); ############################################################################## @@ -142,6 +156,9 @@ sub request_stats_d { if (lc($networkname) eq lc($server->{'chatnet'})) { + # + # lag-protect stats d request + # my $lag_limit = Irssi::settings_get_int('mh_sbsplitmode_lag_limit'); if ($lag_limit) @@ -157,12 +174,12 @@ sub request_stats_d -1, # remote '', # failure signal { # signals - 'event 248' => 'redir mh_sbsplitmode stats d', - 'event 481' => 'redir mh_sbsplitmode stats d', + 'event 248' => 'redir mh_sbsplitmode event 248', # RPL_STATSDEFINE + 'event 481' => 'redir mh_sbsplitmode event 481', # ERR_NOPRIVILEGES '' => 'event empty', } ); - $server->send_raw("stats d"); + $server->send_raw('STATS d'); last; } } @@ -222,11 +239,11 @@ sub timeout_request_stats_d # ############################################################################## -sub signal_redir_stats_d +sub signal_redir_event_248 { my ($server, $data, $sender) = @_; - if ($data =~ /.* S:([0-9]*).* SS:[0-9]*\/([0-9]*)\/([0-9]*).* SU:[0-9]*\/([0-9]*)\/([0-9]*).*/) + if ($data =~ m/.* S:([0-9]*).* SS:[0-9]*\/([0-9]*)\/([0-9]*).* SU:[0-9]*\/([0-9]*)\/([0-9]*).*/) { my $servertag = lc($server->{'tag'}); my $old_s = 0; @@ -254,10 +271,11 @@ sub signal_redir_stats_d # print to all relevant windows when server enters/leaves splitmode # - if ($old_s != $state->{$servertag}->{'s'}) + if (Irssi::settings_get_bool('mh_sbsplitmode_print') and ($old_s != $state->{$servertag}->{'s'})) { my $format_server = $server->{'tag'} . '/' . $server->{'real_address'}; my $format_data = ''; + my $details = Irssi::settings_get_bool('mh_sbsplitmode_print_details'); if ($state->{$servertag}->{'s'}) { @@ -265,6 +283,7 @@ sub signal_redir_stats_d } else { + $details = 0; $format_data = 'is no longer in'; } @@ -274,12 +293,28 @@ sub signal_redir_stats_d { if (lc($window->{'active_server'}->{'tag'}) eq $servertag) { - $window->printformat(Irssi::MSGLEVEL_CRAP | Irssi::MSGLEVEL_NO_ACT, 'mh_sbsplitmode_info', $format_server, $format_data); + if ($details) + { + my $format_details = 'servers:' . $state->{$servertag}->{'ss_cur'} . '/' . $state->{$servertag}->{'ss_min'} . ' users:' . $state->{$servertag}->{'su_cur'} . '/' . $state->{$servertag}->{'su_min'}; + + $window->printformat(Irssi::MSGLEVEL_CRAP | Irssi::MSGLEVEL_NO_ACT, 'mh_sbsplitmode_info_details', $format_server, $format_data, $format_details); + + } else + { + $window->printformat(Irssi::MSGLEVEL_CRAP | Irssi::MSGLEVEL_NO_ACT, 'mh_sbsplitmode_info', $format_server, $format_data); + } } } } } - } elsif ($data =~ /.*permission.*/i) + } +} + +sub signal_redir_event_481 +{ + my ($server, $data, $sender) = @_; + + if ($data =~ m/.*permission.*/i) { my $servertag = lc($server->{'tag'}); $state->{$servertag}->{'s'} = -1; @@ -292,6 +327,13 @@ sub signal_redir_stats_d } } +sub signal_netsplit_server_new +{ + my ($server, $netsplitserver) = @_; + + request_stats_d($server); +} + sub signal_setup_changed_last { Irssi::statusbar_items_redraw('mh_sbsplitmode'); @@ -342,7 +384,14 @@ sub command_splitmode $format_detail = 'servers:' . $state->{$servertag}->{'ss_cur'} . '/' . $state->{$servertag}->{'ss_min'} . ' users:' . $state->{$servertag}->{'su_cur'} . '/' . $state->{$servertag}->{'su_min'}; } - Irssi::active_win->printformat(MSGLEVEL_CRAP, 'mh_sbsplitmode_line', $format_server, $format_data, $format_detail); + if ($format_detail ne '') + { + Irssi::active_win->printformat(MSGLEVEL_CRAP, 'mh_sbsplitmode_line', $format_server, $format_data, $format_detail); + + } else { + + Irssi::active_win->printformat(MSGLEVEL_CRAP, 'mh_sbsplitmode_line_no_detail', $format_server, $format_data); + } } } @@ -468,12 +517,16 @@ Irssi::settings_add_int('mh_sbsplitmode', 'mh_sbsplitmode_delay', 5 Irssi::settings_add_str('mh_sbsplitmode', 'mh_sbsplitmode_networks', 'IRCnet'); Irssi::settings_add_bool('mh_sbsplitmode', 'mh_sbsplitmode_show_details', 1); Irssi::settings_add_bool('mh_sbsplitmode', 'mh_sbsplitmode_show_detail_trend', 1); +Irssi::settings_add_bool('mh_sbsplitmode', 'mh_sbsplitmode_print', 1); +Irssi::settings_add_bool('mh_sbsplitmode', 'mh_sbsplitmode_print_details', 1); Irssi::settings_add_int('mh_sbsplitmode', 'mh_sbsplitmode_lag_limit', 5); Irssi::theme_register([ - 'mh_sbsplitmode_line', '{server $0}: $1 {comment $2}', - 'mh_sbsplitmode_info', '{server $0} $1 {hilight splitmode}', - 'mh_sbsplitmode_error', '{error $0}', + 'mh_sbsplitmode_line', '{server $0}: $1 {comment $2}', + 'mh_sbsplitmode_line_no_detail', '{server $0}: {error $1}', + 'mh_sbsplitmode_info', '{server $0} $1 {hilight splitmode}', + 'mh_sbsplitmode_info_details', '{server $0} $1 {hilight splitmode} {comment $2}', + 'mh_sbsplitmode_error', '{error $0}', ]); Irssi::Irc::Server::redirect_register('mh_sbsplitmode stats d', @@ -491,15 +544,18 @@ Irssi::Irc::Server::redirect_register('mh_sbsplitmode stats d', Irssi::statusbar_item_register('mh_sbsplitmode', '', 'statusbar_splitmode'); -Irssi::signal_add('redir mh_sbsplitmode stats d', 'signal_redir_stats_d'); -Irssi::signal_add_last('event connected', 'request_stats_d'); -Irssi::signal_add('server disconnected', 'state_remove_server'); -Irssi::signal_add_last('setup changed', 'signal_setup_changed_last'); +Irssi::signal_add('redir mh_sbsplitmode event 248', 'signal_redir_event_248'); +Irssi::signal_add('redir mh_sbsplitmode event 481', 'signal_redir_event_481'); +Irssi::signal_add_last('event connected', 'request_stats_d'); +Irssi::signal_add('server disconnected', 'state_remove_server'); +Irssi::signal_add('netsplit server new', 'signal_netsplit_server_new'); +Irssi::signal_add('netsplit server remove', 'signal_netsplit_server_new'); +Irssi::signal_add_last('setup changed', 'signal_setup_changed_last'); Irssi::command_bind('splitmode', 'command_splitmode', 'mh_sbsplitmode'); Irssi::command_bind('help', 'command_help'); -Irssi::timeout_add_once(10, 'timeout_request_stats_d', undef); +timeout_request_stats_d(); 1; |
