diff options
| author | ailin-nemui | 2016-11-10 21:48:10 +0100 | 
|---|---|---|
| committer | GitHub | 2016-11-10 21:48:10 +0100 | 
| commit | b1c2a1a5ebd2d0a7f8e431b99666606bd9e08061 (patch) | |
| tree | ede0d25cbe391a07e7baeb6ce6bb83763209c02a | |
| parent | eba0398b7544842b3a5dc067a913355edfd004b9 (diff) | |
| parent | d4523a4d2f6604d0fd63de85f7ad681640fcd113 (diff) | |
| download | scripts.irssi.org-b1c2a1a5ebd2d0a7f8e431b99666606bd9e08061.tar.bz2 | |
Merge pull request #319 from mh-source/master
mh_sbuserinfo.pl v1.05
| -rw-r--r-- | scripts/mh_sbuserinfo.pl | 162 | 
1 files changed, 126 insertions, 36 deletions
| diff --git a/scripts/mh_sbuserinfo.pl b/scripts/mh_sbuserinfo.pl index fde7ebc..c9ee211 100644 --- a/scripts/mh_sbuserinfo.pl +++ b/scripts/mh_sbuserinfo.pl @@ -1,8 +1,8 @@  ##############################################################################  # -# mh_sbuserinfo.pl v1.04 (20151225) +# mh_sbuserinfo.pl v1.05 (20161106)  # -# Copyright (c) 2015  Michael Hansen +# Copyright (c) 2015, 2016  Michael Hansen  #  # Permission to use, copy, modify, and distribute this software  # for any purpose with or without fee is hereby granted, provided @@ -25,23 +25,41 @@  # displays in the statusbar the number of users and the limit of the channel,  # with several settings for finetuning:  # -# default settings: [Users: <users>(@<users_op>:+<users_voice>:<users_rest>)/<limit>(<limitusers>)] +# default settings: [Users: <users>(*<users_oper>:@<users_op>:+<users_voice>:<users_rest>)/<limit>(<limitusers>)]  # "/<limit>(<limitusers>)" will only show when there is a limit set.  # "(<limitusers>)" shows the difference between the limit and current  # users (this can be negative if the limit is lower than users)  # +# setting mh_sbuserinfo_format_group_begin (default '(') and +# setting mh_sbuserinfo_format_group_end'  (default ')'); change the characters grouping +# details +# +# setting mh_sbuserinfo_format_sep (default ':'): change the : seperator to another string +# +# setting mh_sbuserinfo_format_div (default '/'): change the / divider to another string +#  # setting mh_sbuserinfo_show_prefix (default 'Users: '): set/unset the prefix  # in the window item  #  # setting mh_sbuserinfo_show_details (default ON): enable/disable showing a -# detailed breakout of users into ops, halfops, voice and normal +# detailed breakout of users into opers, ops, halfops, voice and normal  #  # setting mh_sbuserinfo_show_details_mode (default ON): enable/disable -# prefixing ops, halfops and voice with @%+ when details are enabled +# prefixing opers, ops, halfops and voice with *@%+ when details are enabled +# +# setting mh_sbuserinfo_format_mode_oper  (default '*'), +# setting mh_sbuserinfo_format_mode_op    (default '@'), +# setting mh_sbuserinfo_format_mode_ho    (default '%%'), +# setting mh_sbuserinfo_format_mode_vo    (default '+') and +# setting mh_sbuserinfo_format_mode_other (default ''): change the mode prefix +# for each of oper, op, halfdop, voice and others  #  # setting mh_sbuserinfo_show_details_halfop (default OFF): enable/disable  # showing halfops when details are enabled  # +# setting mh_sbuserinfo_show_details_oper (default ON): enable/disable +# showing opers when details are enabled +#  # setting mh_sbuserinfo_show_details_difference (default ON): enable/disable  # showing the "(<limitusers>)"  # @@ -51,9 +69,13 @@  # setting mh_sbuserinfo_show_warning_limit (default ON): change the colour  # of "<limit>" if channel is above, at or close to the limited amount of users  # -# setting mh_sbuserinfo_show_warning_limit_percent (default 95): number in +# setting mh_sbuserinfo_show_warning_limit_percent (default 0): number in  # percent (0-100) of users relative to the limit before a limit warning is -# triggered +# triggered (if set to 0 see mh_sbuserinfo_show_warning_limit_difference) +# +# setting mh_sbuserinfo_show_warning_limit_difference (default 5): when +# mh_sbuserinfo_show_warning_limit_percent is 0, use this absolute value +# as the difference warning trigger instead of percentage  #  # setting mh_sbuserinfo_warning_format (default '%Y'): the colour used for  # warnings. see http://www.irssi.org/documentation/formats @@ -63,6 +85,15 @@  # see '/help statusbar' for more details and do not forget to '/save'  #  # history: +# +#	v1.05 (20161106) +#		added setting _show_details_oper and supporting code +#		added setting _format_sep and supportingf code +#		added setting _format_div and supporting code +#		added setting _group_begin and _format_group_end and supporting code +#		added setting _format_mode_oper, _format_mode_op, _format_mode_ho, _format_mode_vo and _format_mode_other, and supporting code +#		added settting _show_warning_limit_difference and supporting code (changing _show_warning_limit_percent behavior) +#		changed default of _show_warning_limit_percent from 95 to 0  #	v1.04 (20151225)  #		added setting _show_details_difference and supporting code  #		changed _show_warning_limit_percent default from 90 to 95 @@ -96,7 +127,7 @@ use strict;  use Irssi 20100403;  use Irssi::TextUI; -our $VERSION = '1.04'; +our $VERSION = '1.05';  our %IRSSI   =  (  	'name'        => 'mh_sbuserinfo', @@ -105,7 +136,7 @@ our %IRSSI   =  	'authors'     => 'Michael Hansen',  	'contact'     => 'mh on IRCnet #help',  	'url'         => 'http://scripts.irssi.org / https://github.com/mh-source/irssi-scripts', -	'changed'     => 'Fri Dec 25 17:14:34 CET 2015', +	'changed'     => 'Sun Nov  6 20:37:05 CET 2016',  );  ############################################################################## @@ -183,6 +214,7 @@ sub statusbar_userinfo  			my $users_op       = 0;  			my $users_ho       = 0;  			my $users_vo       = 0; +			my $users_oper     = 0;  			my $warning_format = Irssi::settings_get_str('mh_sbuserinfo_warning_format');  			for my $nick ($channel->nicks()) @@ -201,56 +233,84 @@ sub statusbar_userinfo  				{  					$users_vo++;  				} + +				if ($nick->{'serverop'}) +				{ +					$users_oper++; +				}  			} -			$format = $format . $users; +			$format .= $users; + +			my $format_sep = Irssi::settings_get_str('mh_sbuserinfo_format_sep'); +			my $format_div = Irssi::settings_get_str('mh_sbuserinfo_format_div'); + +			my $format_group_begin = Irssi::settings_get_str('mh_sbuserinfo_format_group_begin'); +			my $format_group_end   = Irssi::settings_get_str('mh_sbuserinfo_format_group_end');  			if (Irssi::settings_get_bool('mh_sbuserinfo_show_details'))  			{ -				$format = $format . '('; +				$format .= $format_group_begin;  				my $showmode = Irssi::settings_get_bool('mh_sbuserinfo_show_details_mode'); +				if (Irssi::settings_get_bool('mh_sbuserinfo_show_details_oper')) +				{ +					if ($showmode) +					{ +						$format .= Irssi::settings_get_str('mh_sbuserinfo_format_mode_oper'); +					} + +					$format .= $users_oper . $format_sep +				} +  				if (Irssi::settings_get_bool('mh_sbuserinfo_show_warning_opless') and (not $users_op))  				{ -					$format = $format . $warning_format; +					$format .= $warning_format;  				}  				if ($showmode)  				{ -					$format = $format . '@'; +					$format .= Irssi::settings_get_str('mh_sbuserinfo_format_mode_op');  				} -				$format = $format . $users_op . '%n:'; +				$format .= $users_op . '%n' . $format_sep;  				if (Irssi::settings_get_bool('mh_sbuserinfo_show_details_halfop'))  				{  					#  					# add halfops to ops so users calculation below matches  					# -					$users_op = $users_op + $users_ho; +					$users_op += $users_ho;  					if ($showmode)  					{ -						$format = $format . '%%'; +						$format .= Irssi::settings_get_str('mh_sbuserinfo_format_mode_ho');  					} - 					$format = $format . $users_ho . ':'; + 					$format .= $users_ho . $format_sep; +				} + +				if ($showmode) +				{ +					$format .= Irssi::settings_get_str('mh_sbuserinfo_format_mode_vo');;  				} +				$format .= $users_vo . $format_sep; +  				if ($showmode)  				{ -					$format = $format . '+'; +					$format .= Irssi::settings_get_str('mh_sbuserinfo_format_mode_other');;  				} -				$format = $format . $users_vo . ':' . ($users - ($users_op + $users_vo)) . ')'; +				$format .= ($users - ($users_op + $users_vo)) . $format_group_end;  			}  			my $limit = $channel->{'limit'};  			if ($limit)  			{ -				$format = $format . '/'; +				$format .= $format_div;  				if (Irssi::settings_get_bool('mh_sbuserinfo_show_warning_limit'))  				{ @@ -265,20 +325,39 @@ sub statusbar_userinfo  						$setting_percent = 0;  					} -					my $percent = int(($users / $limit) * 100); +					if ($setting_percent) +					{ + +						my $percent = int(($users / $limit) * 100); -					if ($percent >= $setting_percent) +						if ($percent >= $setting_percent) +						{ +							$format .= $warning_format; +						} +					} else  					{ -						$format = $format . $warning_format; +						my $setting_percent = Irssi::settings_get_int('mh_sbuserinfo_show_warning_limit_difference'); + +						my $difference = ($limit - $users); + +						if ($setting_percent < 0) +						{ +							$setting_percent = 0; +						} + +						if ($difference < $setting_percent) +						{ +							$format .= $warning_format; +						}  					}  				}  				if (Irssi::settings_get_bool('mh_sbuserinfo_show_details_difference'))  				{ -					$limit = $limit . '(' . ($limit - $users) . ')'; +					$limit .= $format_group_begin . ($limit - $users) . $format_group_end;  				} -				$format = $format . $limit . '%n'; +				$format .= $limit . '%n';  			}  		}  	} @@ -292,17 +371,26 @@ sub statusbar_userinfo  #  ############################################################################## -Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_details',               1); -Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_details_mode',          1); -Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_details_halfop',        0); -Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_warning_opless',        1); -Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_warning_limit',         1); -Irssi::settings_add_int( 'mh_sbuserinfo', 'mh_sbuserinfo_show_warning_limit_percent', 95); -Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_warning_format',             '%Y'); -Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_show_prefix',                'Users: '); -Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_details_difference',    1); - -Irssi::statusbar_item_register('mh_sbuserinfo', '', 'statusbar_userinfo'); +Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_details',                  1); +Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_details_mode',             1); +Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_details_halfop',           0); +Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_warning_opless',           1); +Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_warning_limit',            1); +Irssi::settings_add_int( 'mh_sbuserinfo', 'mh_sbuserinfo_show_warning_limit_percent',    0); +Irssi::settings_add_int( 'mh_sbuserinfo', 'mh_sbuserinfo_show_warning_limit_difference', 5); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_warning_format',                '%Y'); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_show_prefix',                   'Users: '); +Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_details_difference',       1); +Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_details_oper',             1); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_format_sep',                    ':'); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_format_div',                    '/'); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_format_group_begin',            '('); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_format_group_end',              ')'); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_format_mode_oper',              '*'); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_format_mode_op',                '@'); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_format_mode_ho',                '%%'); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_format_mode_vo',                '+'); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_format_mode_other',             '');  Irssi::signal_add_last('channel sync',         'statusbar_redraw');  Irssi::signal_add_last('channel mode changed', 'statusbar_redraw'); @@ -312,6 +400,8 @@ Irssi::signal_add_last('nicklist remove',      'statusbar_redraw');  Irssi::signal_add_last('setup changed',        'signal_setup_changed_last');  Irssi::signal_add_last('window changed',       'signal_window_changed_last'); +Irssi::statusbar_item_register('mh_sbuserinfo', '', 'statusbar_userinfo'); +  1;  ############################################################################## | 
