.irssi/scripts/xmms.pl
use strict;
use Xmms::Remote ();
use Irssi qw(command_bind signal_add);
my $remote = Xmms::Remote->new;
sub cmd_xmms {
my ($data, $server, $window) = @_;
my $title = $remote->get_playlist_title();
my $fileid = $remote->get_playlist_pos;
$window->command("/ME Playing \002$title\002. One tit? \002!fetch $fileid\002");
}
sub cmd_a {
$remote->playlist_next();
}
sub cmd_xmmssend {
my ($data, $server, $window) = @_;
my $file = $remote->get_playlist_file();
$window->command("/dcc send $data \"$file\"");
}
sub cmd_dig {
my ($data, $server, $window) = @_;
my $pattern = $data;
$pattern =~ s/([^.]|^)\*/$1 . ".*"/eg;
my (@results, $c);
foreach (@{$remote->get_playlist_titles}) {
if (m/$pattern/i) {
push @results, $c;
}
$c++;
}
$remote->set_playlist_pos($results[0]);
}
sub sig_msg {
my ($server, $msg, $nick, $address, $target) = @_;
my @words = split(/ /,$msg);
if (lc($words[0]) eq "!fetch") {
$_ = $words[1];
if (m/-/) {
my ($first, $last) = split(/-/,$words[1]);
my $sum = $last - $first;
if ($sum <= 20 && $sum > 3) {
my $tar = "~/tmp/" . $words[1] . ".tar";
my $gzip = $tar . ".gz";
if (-e $gzip) {
$server-command("/DCC send $nick $gzip");
}
else {
`tar -cf $tar`;
my $playlist_file = $first;
while ($playlist_file <= $last) {
my $file = $remote->get_playlist_file($playlist_file);
`tar -rf $tar "$file"`;
$playlist_file++;
}
`gzip -9 $tar`;
$server->command("/DCC send $nick $gzip");
}
}
else {
$server->command("/SAY ERROROR TOO ANY PHILEZ");
}
}
else {
my $file = $remote->get_playlist_file($words[1]);
$server->command("/DCC send $nick \"$file\"");
}
}
elsif (lc($words[0]) eq "!random") {
my $length = $remote->get_playlist_length();
my $file = $remote->get_playlist_file(int(rand($length)));
$server->command("/DCC send $nick \"$file\"");
}
}
Irssi::command_bind("xmms", "cmd_xmms");
Irssi::command_bind("xmmssend", "cmd_xmmssend");
Irssi::command_bind("a", "cmd_a");
Irssi::command_bind("dig", "cmd_dig");
signal_add("message public", "sig_msg");