All pastes #279044 Raw Edit

send_away-20061214

public text v1 · immutable
·published 2006-12-14 17:15 UTC
rendered paste body
use SOAP::Lite;
use Data::Dumper;
use strict;

BEGIN {
	unless (exists $::{"Irssi::"}) {
		require Pod::Usage;
		Pod::Usage::pod2usage(-verbose => 2);
	}
}

use Text::ParseWords;
use vars qw!$VERSION %IRSSI %SA_DATA!;

use Irssi qw (
	command_bind settings_get_bool
	settings_add_bool settings_get_str
	settings_add_str signal_add
);

#%SA_DATA = ();
$VERSION = '0.01';
%IRSSI = (
	authors		=> 'Justin Lee',
	contact		=> 'kool.name@gmail.com',
	name		=> 'auto-msgr',
	description	=> 'Scipt for automessaging when set to away.',
	license		=> 'GPL',
);

# Start of man page

=head1 DESCRIPTION

This script is for auto messaging those who send a pm whilst you are away.

=head2 Methods

=over 5

=item C<< Something! >>

=back

=head1 AUTHOR

Dean <kool.name@gmail.com> - L<http://dean.dnsalias.com/>

=cut

# Start of script

signal_add('event privmsg', 'irc_privmsg');

sub compareTime {
	my @old = $_[0];
	my @new = split(/\s+/, $_[1], 2);

	return 1 if (@old[0] ne @new[0]); # exits if the day's not the same, returning 1
	
	my $old = convertTime(@old[1]);  # day is the same,
	my $new = convertTime(@new[1]);  # discard useless info (y-m-d)
	my $diff = $new - $old;		# get the difference
	return 1 if ($diff >= 60);
	return 0;
	
}

sub checkTime {
	my ($data, $date, $server) = @_;
	return 1 unless $SA_DATA{$data};
	return 1 if compareTime($SA_DATA{$data}, $date);
	return 0;
}

sub irc_privmsg {
	my ($server, $data, $from, $address) = @_;
	my ($to, $message) = split(/\s+:/, $data, 2);

	chomp(my $date = `date --rfc-3339=seconds`);
	$date =~ s/^(\S)+(-\d:\d)$/$1/;		# $date == yyyy-mm-dd hh:mm:ss

	my $target = find_target($to, $from);

	if($server->{'usermode_away'}) {	# check for away
		if($target){			# check for pm

			if(checkTime($target, $date, $server)) {

				# splits up $date to get y-m-d and h:m:s
				$SA_DATA{$target} = split(/\s+/, $date, 2);

				#$server->command("SEND_AWAY $target");
				$server->command("echo HERE: \u$target, $date! GOT IT");
				return 1;
			}
			$SA_DATA{$target} = split(/\s+/, $date, 2);
			$server->command("echo HERE: \u$target, $date! LOST IT!");
		}
	}
}

sub convertTime {
	my $time = @_;
	my @times = split(/:/, $time, 3);
	$times[2] += (($times[0] * 3600) + ($times[1] * 60));
	return $times[2];
}

sub find_target {
	my ($to, $from) = @_;

	if($to =~ /^#/){
		return 0; # from a channel do not SEND_AWAY
	}
	return $from; # from a private message
}