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/deliciousurl.pl | |
| parent | 2d080422d79d1fd49d6c5528593ccaaff9bfc583 (diff) | |
| download | scripts.irssi.org-2d0759e6ca5767b48bcc85bf38c2c43d5f0b63b1.tar.bz2 | |
Import scripts from scripts.irssi.org
Diffstat (limited to 'scripts/deliciousurl.pl')
| -rw-r--r-- | scripts/deliciousurl.pl | 168 | 
1 files changed, 168 insertions, 0 deletions
| diff --git a/scripts/deliciousurl.pl b/scripts/deliciousurl.pl new file mode 100644 index 0000000..00dcf22 --- /dev/null +++ b/scripts/deliciousurl.pl @@ -0,0 +1,168 @@ +######################################################################################################## +## +## Log URL's and post them to del.icio.us +## +######################################################################################################## + +BEGIN { $ENV{HARNESS_ACTIVE} = 1 } + +use IO::Handle; +use Irssi; +use Irssi::Irc; +use Net::Delicious; +use URI::Find::Rule; +use POSIX; +use Log::Dispatch; +use Log::Dispatch::File; + +use vars qw($VERSION %IRSSI $FINDER $WARNING_PRINTED); + +$VERSION = "0.5"; +%IRSSI = ( +	authors => "Benjamin Reed", +	contact => 'ranger@befunk.com', +	name => "deliciousurl", +	description => "Logs URLs and posts them to del.icio.us", +	license => "GPLv2", +	url => "http://ranger.befunk.com/", +); + +# === Version History === +# 2007-01-19: version 0.5, minor logging/UI tweaks +# 2005-10-25: released version 0.4 +# 2005-10-25: fork post_to_delicious so we don't have to wait for a response (holy crap, I +#             can't believe it was broken this long without noticing!) +# 2005-08-24: added channel ignore, thanks to Rev. Jeffrey Paul + +Irssi::settings_add_str('deliciousurl', 'delicious_username', ''); +Irssi::settings_add_str('deliciousurl', 'delicious_password', ''); +Irssi::settings_add_int('deliciousurl', 'delicious_post_privmsg', 0); +Irssi::settings_add_int('deliciousurl', 'delicious_strip_trailing_slash', 1); +Irssi::settings_add_str('deliciousurl', 'delicious_blacklist_regexp', '(tubgirl|goatse\.cx)'); +Irssi::settings_add_str('deliciousurl', 'delicious_default_tag', 'irc'); +Irssi::settings_add_str('deliciousurl', 'delicious_ignore_chan', ''); + +sub post_to_delicious +{ +	my ($channel, $data, $nick) = @_; + +	my $username = Irssi::settings_get_str('delicious_username'); +	my $password = Irssi::settings_get_str('delicious_password'); + +	if (not defined $username or not defined $password and not $WARNING_PRINTED) +	{ +		if (not $WARNING_PRINTED) +		{ +			Irssi::print("username or password are not set!"); +			$WARNING_PRINTED++; +		} +		return; +	} + +	my $pid = fork(); + +	if ($pid) { +		Irssi::pidwait_add($pid); +		return; +	} else { +		my $blacklist = Irssi::settings_get_str('delicious_blacklist_regexp'); + +		eval { +			$data =~ /$blacklist/ and die "blacklist matched!"; +		}; +		if ($@) +		{ +			#Irssi::print("skipped in $channel (blacklist): $data"); +			POSIX::_exit(0); +		} + +		$channel =~ s/^#//; + +		my @igc = split( +			/\s+/, +			Irssi::settings_get_str('delicious_ignore_chan') +			); +		for (@igc) { +			s/^#//; +			POSIX::_exit(0) if lc($_) eq lc($channel); +		} + +		my $del = Net::Delicious->new({ +			user => $username, +			pswd => $password, +		}); + +		my @posts = $del->posts({ tag => Irssi::settings_get_str('delicious_default_tag') }); + +		my ($sec,$min,$hour,$mday,$mon,$year) = localtime(time); +		$year += 1900; +		$mon  += 1; + +		my $dt = sprintf('%04d-%02d-%02dT%02d:%02d:%02dZ', $year, $mon, $mday, $hour, $min, $sec); + +		my @urls = URI::Find::Rule->in($data); +		POSIX::_exit(0) unless (@urls); + +		for my $url (@urls) { +			$url = $url->[1]; +			$url =~ s/\/*$// if (Irssi::settings_get_int('delicious_strip_trailing_slash')); +			my $tags = Irssi::settings_get_str('delicious_default_tag') . ' ' . $channel . ' ' . $nick; +			#my $text = sprintf('%04d-%02d-%02d %02d:%02d:%02d <%s> %s', $year, $mon, $mday, $hour, $min, $sec, $nick, $data); +			my $text = sprintf('<%s> %s', $nick, $data); + +			if (my ($post) = grep { $_->href eq $url } @posts) +			{ +				my @tags = split(/\s+/, $post->tag); +				if (not grep { $_ eq $channel } split(/\s+/, $post->tag)) +				{ +					$tags = $post->tag . ' ' . $channel; +				} +				#$text = $post->extended . "\n" . $text; +			} + +			my $return = $del->add_post({ +				url => $url, +				description => $url, +				extended => $text, +				tags => $tags, +				dt => $dt, +			}); +		} +		POSIX::_exit(0); +	} +} + +sub del_public +{ +	my ($server, $data, $nick, $mask, $target) = @_; +	post_to_delicious($target, $data, $nick); +} + +sub del_private +{ +	my ($server, $data, $nick, $address) = @_; +	if (Irssi::settings_get_int('delicious_post_privmsg') > 0) +	{ +		post_to_delicious($server->{'nick'}, $data, $nick); +	} +} + +sub del_own +{ +	my ($server, $data, $target) = @_; +	post_to_delicious($target, $data, $server->{'nick'}); +} + +sub del_topic +{ +	my ($server, $target, $data, $nick, $mask) = @_; +	post_to_delicious($target, $data, $nick); +} + + +Irssi::signal_add_last('message public', 'del_public'); +Irssi::signal_add_last('message private', 'del_private'); +Irssi::signal_add_last('message own_public', 'del_own'); +Irssi::signal_add_last('message topic', 'del_topic'); + +Irssi::print("deliciousurl $VERSION ready"); | 
