#!/usr/bin/perl
#philip fibiger: pnf1@cornell.edu
#napsterbot.pl -> sends an IM to every user sharing a particular song
#by an artist
#-----------------------

use strict;
use MP3::Napster;
use File::Find;

my $nap;
my $i = 0;
my $j = 0;
my $k = 0;

#set these two values to a valid login and password for Napster
my $username = "placeholder"; 
my $pass = "placeholder";    

while (1) {

	open FILE, "servers.txt" or die "could not open server list";
	my @servers = <FILE>;
	close FILE;

	SERVERS: foreach my $server (@servers) {
		if ($server ne "") {
			open TOREAD, "messaged.txt";
			my @alreadysent = <TOREAD>;
			close TOREAD;
			$server =~ s/\n//gi;
			$server .= ":8888";
			$nap = MP3::Napster->new($server);
			if (!$nap) {
				print MP3::Napster->error . "\n";
				next SERVERS;
			}

			if (!$nap->login($username,$password, "T1", -1)) {
				print $nap->error . "\n";
				next SERVERS;
			}

			print "Searching for orbit fans on server: $server ..";
			my @songsfound = $nap->search(artist=>'orbit',title=>'medicine');
			my $result;

			foreach my $s (@songsfound) {
				$j++;
				my $username = $s->owner->name;
				my $username2 = $username . " \n";
				if (!(grep {$_ eq $username2} @alreadysent)) {
					my $message = "Hey, ${username}! I see you like Band X. Check them out at http://www.bandxsurl.com";

					$result = $nap->private_message($s->owner, $message);
					
					if (!$result) {
						open TOERROR, ">>errorlog.txt" or die "couldn't open error log";
						print TOERROR "$username: " . $nap->error . "\n";
						close TOERROR;
						$k++;
					}
					else {
						open TOWRITE, ">>messaged.txt" or die "could not open logging file";
						print TOWRITE "$username \n";
						close TOWRITE;
						$i++;
					}
				sleep 8;
				}
			}
			print "$i new, $j total found \n";
			sleep 60;
			$nap->disconnect;
		}
	}
	print "sent " . $i . " messages\n";
	print $j . " total songs found shared\n";
	sleep 3600;
}