diff options
| author | Alexander Færøy | 2014-05-31 13:10:46 +0200 | 
|---|---|---|
| committer | Alexander Færøy | 2014-05-31 13:10:46 +0200 | 
| commit | 2d0759e6ca5767b48bcc85bf38c2c43d5f0b63b1 (patch) | |
| tree | 1c5e6d817c88e67b46e216a50e0aef5428bf63df /scripts/bitlbee_timestamp.pl | |
| parent | 2d080422d79d1fd49d6c5528593ccaaff9bfc583 (diff) | |
| download | scripts.irssi.org-2d0759e6ca5767b48bcc85bf38c2c43d5f0b63b1.tar.bz2 | |
Import scripts from scripts.irssi.org
Diffstat (limited to 'scripts/bitlbee_timestamp.pl')
| -rw-r--r-- | scripts/bitlbee_timestamp.pl | 105 | 
1 files changed, 105 insertions, 0 deletions
| diff --git a/scripts/bitlbee_timestamp.pl b/scripts/bitlbee_timestamp.pl new file mode 100644 index 0000000..7957d57 --- /dev/null +++ b/scripts/bitlbee_timestamp.pl @@ -0,0 +1,105 @@ +use strict; +use Data::Dumper; +use vars qw($VERSION %IRSSI); +use DateTime; + +$VERSION = '0.5'; +%IRSSI = ( +    authors	=> 'Tijmen "timing" Ruizendaal', +    contact	=> 'tijmen.ruizendaal@gmail.com', +    name	=> 'bitlbee_timestamp', +    description	=> 'Replace Irssi\'s timestamps with those sent by BitlBee', +    license	=> 'GPLv2', +    url		=> 'http://the-timing.nl/stuff/irssi-bitlbee', +    changed	=> '2010-05-01', +); + +my $tf = Irssi::settings_get_str('timestamp_format'); + +my $bitlbee_server; # server object +my @control_channels; # mostly: &bitlbee, &facebook etc. +init(); + +sub init { # if script is loaded after connect +	my @servers = Irssi::servers(); +	foreach my $server(@servers) { +		if( $server->isupport('NETWORK') eq 'BitlBee' ){ +			$bitlbee_server = $server; +			my @channels = $server->channels(); +			foreach my $channel(@channels) { +				if( $channel->{mode} =~ /C/ ){ +					push @control_channels, $channel->{name} unless (grep $_ eq $channel->{name}, @control_channels); +				} +			} +		} +	} +} +# if connect after script is loaded +Irssi::signal_add_last('event 005' => sub { +	my( $server ) = @_; +	if( $server->isupport('NETWORK') eq 'BitlBee' ){ +		$bitlbee_server = $server; +	} +}); +# if new control channel is synced after script is loaded +Irssi::signal_add_last('channel sync' => sub { +	my( $channel ) = @_; +	if( $channel->{mode} =~ /C/ && $channel->{server}->{tag} eq $bitlbee_server->{tag} ){ +		push @control_channels, $channel->{name} unless (grep $_ eq $channel->{name}, @control_channels); +	} +}); + +my $prev_date = ''; + +sub privmsg { +	my ($server, $data, $nick, $address) = @_; + +	# What we need to match: ^B[^B^B^B2010-03-21 16:33:41^B]^B + +	if( $server->{tag} eq $bitlbee_server->{tag} ){ +	 +		my ($target, $text) = split(/ :/, $data, 2); + +		#if( $text =~ /^B[^B^B^B[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}^B]^B/ ){ + +		if( $text =~ /\x02\[\x02\x02\x02.*\x02\]\x02/ ){ +			my $window; +			my $timestamp = $text; +			my $time; +			my $date; +			$timestamp =~ s/.*\x02\[\x02\x02\x02(.*?)\x02\]\x02.*/$1/g; +			$text =~ s/\x02\[\x02\x02\x02(.*?)\x02\]\x02 //g; + +			($date, $time) = split(/ /, $timestamp); +			if( !$time ){ # the timestamp doesn't have a date +				$time = $date; +				# use today as date +				$date = DateTime->now->ymd; +			} + +			if( $date ne $prev_date ){ +				if( $target =~ /#|&/ ){ # find channel window based on target +					$window = Irssi::window_find_item($target); +				} else { # find query window based on nick +					$window = Irssi::window_find_item($nick); +				} +				if( $window != undef ){ +					my($year, $month, $day) = split(/-/, $date); +					my $dt = DateTime->new(year => $year, month => $month, day => $day); +					my $formatted_date = $day.' '.$dt->month_abbr.' '.$year; +					 +					$window->print('Day changed to '.$formatted_date, MSGLEVEL_NEVER); +				} +			} +			$prev_date = $date; +			 +			Irssi::settings_set_str('timestamp_format', $time); +			Irssi::signal_continue($server, $target . ' :' . $text, $nick, $address); +			my $escaped = $tf; +			$escaped =~ s/%/%%/g; +			Irssi::settings_set_str('timestamp_format', $tf); +		} +	} +} + +Irssi::signal_add('event privmsg', 'privmsg'); | 
