]> git.99rst.org Git - irssi-scripts.irssi.org.git/commitdiff
[bantime][#7] Version 1.03
authorphyber <redacted>
Mon, 13 Oct 2008 18:47:28 +0000 (20:47 +0200)
committerbw1 <redacted>
Sat, 13 Jan 2018 18:47:28 +0000 (19:47 +0100)
scripts/bantime.pl

index 32f89c92f1670a8e8a2015080d0bd6177a031038..b6e63fd8ce71839e0e044ea451c27d0833b1f255 100644 (file)
@@ -1,54 +1,90 @@
 use strict;
 use Irssi; # developed using irssi 0.8.9.CVS
-use Time::Duration; # calculates the ban duration.  
-# either of the following should install the module
-# perl -MCPAN -e 'install Time::Duration' 
-# cpan -i Time::Duration
-# apt-get install libtime-duration-perl
 
-# I recommend rebinding irssi's default /BANS from 'ban' to 'bantimes' (/alias BANS BANTIME)
+# I recommend rebinding irssi's default 'BAN' to 'bantimes' (/alias BAN BANTIME)
 
 use vars qw($VERSION %IRSSI);
-$VERSION = "0.5";
+$VERSION = '1.03';
 %IRSSI = (
-        authors         => "David O\'Rourke",
-        contact         => "phyber\@\#irssi",
-        name            => "bantime",
-        description     => "Print time when ban was set in a nicer way. eg. 23 mins, 40 secs ago.",
-        license         => "GPLv2",
-       changed         => "08.01.2004 02:46"
+        authors         => q{David O'Rourke},
+        contact         => q{phyber@#irssi},
+        name            => q{bantime},
+        description     => q{Print time when ban was set in a nicer way. eg. 23m, 40s ago.},
+        license         => q{GPLv2},
+       changed         => q{28/02/2007},
 );
 
+sub duration {
+       my ($when) = @_;
+
+       my $diff = (time - $when);
+       my $day = int($diff / 86400); $diff -= ($day * 86400);
+       my $hrs = int($diff / 3600); $diff -= ($hrs * 3600);
+       my $min = int($diff / 60); $diff -= ($min * 60);
+       my $sec = $diff;
+       
+       my $str;
+       $str .= "${day}d " if $day;
+       $str .= "${hrs}h " if $day or $hrs;
+       $str .= "${min}m " if $day or $hrs or $min;
+       $str .= "${sec}s"; # seconds should always be shown
+
+       return $str;
+}
+
 sub cmd_bans {
        my ($args, $server, $witem) = @_;
        return if not ($witem && $witem->{type} eq "CHANNEL");
-       my $currenttime = time;
        my $channel = $witem->{name};
        my $count = 1;
+
+       if (!$witem->bans()) { 
+               $witem->printformat(MSGLEVEL_CLIENTCRAP, 'bantime_nobans', $channel);
+               return;
+       }
+
        foreach my $ban ($witem->bans()) {
-               my ($bansetby, $bantime);
-               if ($ban->{setby}) {
-                       $bansetby = $ban->{setby};
-               } 
-               else { $bansetby = "*Unavailable"; }
-               
-               if ($ban->{time}) {
-                       $bantime = duration_exact($currenttime - $ban->{time}) . " ago";
-               } 
-               else { $bantime = "*Unavailable"; }
-               
-               $witem->printformat(MSGLEVEL_CLIENTCRAP, 'bantime_long',  $count, $channel, $ban->{ban}, $bansetby, $bantime);
+               my $bantime;
+               if (!$ban->{setby} || !$ban->{time}) {
+                       $witem->printformat(MSGLEVEL_CLIENTCRAP, 'bantime',  $count, $channel, $ban->{ban});
+               } else {
+                       if (Irssi::settings_get_bool('bantime_show_date')) {
+                               $bantime = localtime($ban->{time}) . ": ";
+                               $bantime =~ s/\s+/ /g;
+                       }
+                       $bantime .= duration($ban->{time});
+                       $witem->printformat(MSGLEVEL_CLIENTCRAP, 'bantime_long',  $count, $channel, $ban->{ban}, $ban->{setby}, $bantime);
+               }
                $count += 1;
        }
 }
 
-Irssi::theme_register(['bantime_long', '{line_start}$0 - {channel $1}: ban {ban $2} {comment by {nick $3}, $4}']);
+Irssi::theme_register([
+       'bantime', '{line_start}$0 - {channel $1}: ban {ban $2}',
+       'bantime_long', '{line_start}$0 - {channel $1}: ban {ban $2} {comment by {nick $3}, $4 ago}',
+       'bantime_nobans', '{line_start}{hilight Irssi:} No bans in channel {channel $0}'
+]);
 Irssi::command_bind('bantime', 'cmd_bans');
 Irssi::print("Loaded $IRSSI{name} $VERSION");
-
+Irssi::settings_add_bool('bantime', 'bantime_show_date' => 0);
 #############
 # ChangeLog #
 #############
+# 28.02.2007: 1.03
+# duration() now returns a nicer string.  Fields arn't visible if they're zero.
+# Random bits cleaned up.
+# 28.04.2005: 1.01
+# Removed redundant '$bantime2' variable, left over from a setting that was removed earlier.
+# 19.03.2005: 1.0
+# Removed dependancy on Time::Duration by using duration().
+# Removed obsolete 'bantime_short_format' setting.
+# Increased version to 1.0
+# 11.01.2004: Jan 11 2004: 04:30
+# Added new bantime_show_date setting. Displays the date the ban was set along with the time info.
+# 11.01.2004: Jan 11 2004: 04:05
+# Added new bantime_short_format setting. Displays the time in a nice short format. (#irssi: ban *!*@test.testing [by phyber, 3d 5h 54m 59s ago])
+# 11.01.2004: Jan 11 2004: 03:49
+# Changed handling bans without setby/time information closer to how irssi does.
 # 08.01.2004: Jan 08 2004: 02:46
 # Fixed a bug which occured if the IRCd didn't tell us who set the bans at which time. eg. IRCNet if a user doesn't have +o.
 # 08.01.2004: Jan 08 2004: 01:52
git clone https://git.99rst.org/PROJECT