From c47159802b57da25f6258e784f2b425b52e35e72 Mon Sep 17 00:00:00 2001 From: David Runge Date: Fri, 31 Oct 2014 18:55:19 +0100 Subject: irssi: adding used scripts and their autorun symlinks (scriptassist is a system symlink!) --- .irssi/scripts/bitlbee_timestamp.pl | 105 ++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 .irssi/scripts/bitlbee_timestamp.pl (limited to '.irssi/scripts/bitlbee_timestamp.pl') diff --git a/.irssi/scripts/bitlbee_timestamp.pl b/.irssi/scripts/bitlbee_timestamp.pl new file mode 100644 index 0000000..7957d57 --- /dev/null +++ b/.irssi/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'); -- cgit v1.2.3-54-g00ecf