# Simple status indicator for Irssi and MPD running on any host you like. # Authentication supported too. use Irssi; use Socket; $VERSION = "0.1"; %IRSSI = ( authors => 'Joshua Kwan', contact => 'joshk@triplehelix.org', name => 'MPDstatus', description => 'Displays current song in MPD at a specified host', license => 'public domain', url => 'http://triplehelix.org/~joshk/', changed => '2006-05-28', changes => 'Initial release.' ); Irssi::print ("Loaded $IRSSI{name} v$VERSION (syntax: /z)"); sub cmd_z { my ($data, $server, $witem) = @_; # Current settings my $host = Irssi::settings_get_str('mpd_host'); my $password = Irssi::settings_get_str('mpd_password'); my $port = Irssi::settings_get_int('mpd_port'); my $line; socket MPD, PF_INET, SOCK_STREAM, getprotobyname('tcp'); my $paddr = sockaddr_in($port, inet_aton($host)); connect MPD, $paddr or return; =~ /^OK MPD/ or return; if ($password ne '') { syswrite MPD, "password $password\n", 4096, 0; =~ /^OK/ or return; } syswrite MPD, "currentsong\nquit", 4096, 0; my %info; while (defined($line = ) and not $line =~ /^OK/) { chomp $line; my ($k, $v) = split /: /, $line, 2; $info{$k} = $v; } my ($minutes, $seconds); if (defined($info{Time})) { $minutes = int($info{Time} / 60); $seconds = $info{Time} - ($minutes * 60); $seconds = "0$seconds" if ($seconds < 10); $minutes = "0$minutes" if ($minutes < 10); } close MPD; $witem->command("MSG $witem->{name} $info{Artist} - $info{Title} ($minutes:$seconds)"); } my %settings = ( mpd_host => '127.0.0.1', mpd_port => 6600, mpd_password => '' ); Irssi::command_bind('z', 'cmd_z'); Irssi::settings_add_str($IRSSI{name}, 'mpd_host', $settings{mpd_host}); Irssi::settings_add_str($IRSSI{name}, 'mpd_password', $settings{mpd_password}); Irssi::settings_add_int($IRSSI{name}, 'mpd_port', $settings{mpd_port});