def status(message, sender): volume = speakermanager.getVolume() bass = speakermanager.getBass() try: songName = speakermanager.getTrackInfo() except: songName = False message = """ Volume: %(volume)d Bass: %(bass)s Song: %(song)s """ bassCap = speakermanager.getBassCapabilities() if not songName: song = "None" else: song = songName[0] + " by " + songName[2] data = { "volume": volume, "bass": str(bass) + " out of " + bassCap[1], "song": song } sendtext( sender, config['DEFAULT']['ai_name'] + ": Basis Status" + message % data)
def like(message, sender): try: song = speakermanager.getTrackInfo() hash = hashlib.md5((song[0] + song[2]).encode("UTF-8")).hexdigest() global curhash if curhash != hash: curhash = hash phones.clear() if sender not in phones: phones.append(sender) if hash not in hottrack: hottrack[hash] = [song[0], song[2], 0] hottrack[hash][2] += 1 sendtext( sender, config['DEFAULT']['ai_name'] + ": " + "You liked " + song[0] + " by " + song[1] + " song!") savesongs() if hottrack[hash][2] > party.getNumPlayers() / 2: speakermanager.playSong( (speakermanager.curSource, song[0], song[2])) else: sendtext( sender, config['DEFAULT']['ai_name'] + ": " + "You already liked " + song[0] + " by " + song[1] + " song!") except: sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "No song is playing :(") traceback.print_exc()
def skip(message, sender): try: if adminmode and sender == adminnumber: if party.getQueueSize() > 0: song = speakermanager.getTrackInfo() speakermanager.skip() sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "You sent a skip command for " + song[0] + " by " + song[2] + ".") else: sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "No song to skip :(") except: sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "No song to skip :(")
def genre(message, sender): playlistSize = int(message) try: info = speakermanager.getTrackInfo() genre = spotifyapi.genreSearch(info[2], playlistSize) songOnly = [] for iter in genre: party.queuesong(sender, "spotify", iter[0], iter[1]) songOnly.append(iter[0]) #sendtext(sender, "Playlist that matches your song: " + ','.join(songOnly)) except: sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "Cannot generate playlist, is a song playing?")
def genreSearch(artistName, playlistSize): """ ~ Searches the genre of the current song playing and creates a playlist where the length is based on how many songs the user wants ~ :param artistName: the given Artist. Ex: Drake :param playlistSize: The length of the playlist that is returned :return: An array containing the songs made by artists of the same/similar genre Acquires JSON files of the artist's similar artists and then searches for the top songs of those artists from the Spotify API """ artistName = urllib.parse.quote(artistName) type = "&type=artist,track" searchuri = "https://api.spotify.com/v1/search?q=" + artistName + type + "&market=US" js = json.loads(urlopen(searchuri).read().decode('utf-8')) genre = js['artists']['items'][0]['genres'] if len(genre) != 0: genre = "Not available" return genre searchTrack = speakermanager.getTrackInfo() ArtistID = search(searchTrack[0], artistName) relatedURI = "https://api.spotify.com/v1/artists/" + ArtistID[ 'artistId'] + "/related-artists" # Drake ID jsRelatedArtists = json.loads(urlopen(relatedURI).read().decode('utf-8')) artistArray = [] songArray = [] artistIDArray = [] arr = [] while len(artistArray) <= playlistSize: for iter in jsRelatedArtists['artists']: artistArray.append(iter['id']) for artists in artistArray: relatedURI = "https://api.spotify.com/v1/artists/" + artists + "/related-artists" jsRelatedArtists = json.loads( urlopen(relatedURI).read().decode('utf-8')) artistIDArray.append(jsRelatedArtists['artists'][0]['id']) for iter in artistIDArray: topTracksURI = "https://api.spotify.com/v1/artists/" + iter + "/top-tracks?country=US" jsTopTracks = json.loads(urlopen(topTracksURI).read().decode('utf-8')) songArray.append(jsTopTracks['tracks'][0]['name']) arr.append([ jsTopTracks['tracks'][0]['name'], jsTopTracks['tracks'][0]['artists'][0]['name'] ]) if len(arr) >= playlistSize: break return arr
def genre(message, sender): playlistSize = int(message) try: info = speakermanager.getTrackInfo() genre = spotifyapi.genreSearch(info[2], playlistSize) songOnly = [] for iter in genre: party.queuesong(sender, "spotify", iter[0], iter[1]) songOnly.append(iter[0]) #sendtext(sender, "Playlist that matches your song: " + ','.join(songOnly)) except: sendtext( sender, config['DEFAULT']['ai_name'] + ": " + "Cannot generate playlist, is a song playing?")
def boo(message, sender): try: if party.setBoo(sender): static.booCount += 1 song = speakermanager.getTrackInfo() if static.booCount > party.getNumPlayers() / 2: sendtext(sender, config['DEFAULT']['ai_name'] + ": " + song[0] + " by " + song[1] + " has been booed") static.booCount = 0 speakermanager.skip() else: sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "You already booed " + song[0] + " by " + song[1] + "." " BE NICE.") sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "You sent a boo command for " + song[0] + " by " + song[1] + ".") except: sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "There's no song to boo!")
def skip(message, sender): try: if adminmode and sender == adminnumber: if party.getQueueSize() > 0: song = speakermanager.getTrackInfo() speakermanager.skip() sendtext( sender, config['DEFAULT']['ai_name'] + ": " + "You sent a skip command for " + song[0] + " by " + song[2] + ".") else: sendtext( sender, config['DEFAULT']['ai_name'] + ": " + "No song to skip :(") except: sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "No song to skip :(")
def genreSearch(artistName, playlistSize): """ ~ Searches the genre of the current song playing and creates a playlist where the length is based on how many songs the user wants ~ :param artistName: the given Artist. Ex: Drake :param playlistSize: The length of the playlist that is returned :return: An array containing the songs made by artists of the same/similar genre Acquires JSON files of the artist's similar artists and then searches for the top songs of those artists from the Spotify API """ artistName = urllib.parse.quote(artistName) type = "&type=artist,track" searchuri = "https://api.spotify.com/v1/search?q=" + artistName + type + "&market=US" js = json.loads(urlopen(searchuri).read().decode("utf-8")) genre = js["artists"]["items"][0]["genres"] if len(genre) != 0: genre = "Not available" return genre searchTrack = speakermanager.getTrackInfo() ArtistID = search(searchTrack[0], artistName) relatedURI = "https://api.spotify.com/v1/artists/" + ArtistID["artistId"] + "/related-artists" # Drake ID jsRelatedArtists = json.loads(urlopen(relatedURI).read().decode("utf-8")) artistArray = [] songArray = [] artistIDArray = [] arr = [] while len(artistArray) <= playlistSize: for iter in jsRelatedArtists["artists"]: artistArray.append(iter["id"]) for artists in artistArray: relatedURI = "https://api.spotify.com/v1/artists/" + artists + "/related-artists" jsRelatedArtists = json.loads(urlopen(relatedURI).read().decode("utf-8")) artistIDArray.append(jsRelatedArtists["artists"][0]["id"]) for iter in artistIDArray: topTracksURI = "https://api.spotify.com/v1/artists/" + iter + "/top-tracks?country=US" jsTopTracks = json.loads(urlopen(topTracksURI).read().decode("utf-8")) songArray.append(jsTopTracks["tracks"][0]["name"]) arr.append([jsTopTracks["tracks"][0]["name"], jsTopTracks["tracks"][0]["artists"][0]["name"]]) if len(arr) >= playlistSize: break return arr
def status(message, sender): volume = speakermanager.getVolume() bass = speakermanager.getBass() try: songName = speakermanager.getTrackInfo() except: songName = False message = """ Volume: %(volume)d Bass: %(bass)s Song: %(song)s """ bassCap = speakermanager.getBassCapabilities() if not songName: song = "None" else: song = songName[0] + " by " + songName[2] data = {"volume": volume, "bass": str(bass) + " out of " + bassCap[1], "song": song} sendtext(sender, config['DEFAULT']['ai_name'] + ": Basis Status" + message%data)
def updateWebView(): """ ~ Connection fpr dumping JSON for Django ~ """ deepQueues = copy.deepcopy(queues) deepCurPlayer = curPlayer webQueue = [] noQueueRun = 0 while noQueueRun<=len(players): p = players[deepCurPlayer] if len(deepQueues[p]) > 0: deepSong = deepQueues[p].popleft() webQueue.append((p, deepSong)) noQueueRun = 0 else: noQueueRun += 1 deepCurPlayer = (deepCurPlayer + 1) % len(players) data = (webQueue, speakermanager.getTrackInfo()) # convert to JSON or XML, send to web view server speakermanager.sendToWebView(data)
def updateWebView(): """ ~ Connection fpr dumping JSON for Django ~ """ deepQueues = copy.deepcopy(queues) deepCurPlayer = curPlayer webQueue = [] noQueueRun = 0 while noQueueRun <= len(players): p = players[deepCurPlayer] if len(deepQueues[p]) > 0: deepSong = deepQueues[p].popleft() webQueue.append((p, deepSong)) noQueueRun = 0 else: noQueueRun += 1 deepCurPlayer = (deepCurPlayer + 1) % len(players) data = (webQueue, speakermanager.getTrackInfo()) # convert to JSON or XML, send to web view server speakermanager.sendToWebView(data)
def like(message, sender): try: song = speakermanager.getTrackInfo() hash = hashlib.md5((song[0] + song[2]).encode("UTF-8")).hexdigest() global curhash if curhash != hash: curhash = hash phones.clear() if sender not in phones: phones.append(sender) if hash not in hottrack: hottrack[hash] = [song[0], song[2], 0] hottrack[hash][2] += 1 sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "You liked " + song[0] + " by " + song[1] + " song!") savesongs() if hottrack[hash][2] > party.getNumPlayers() / 2: speakermanager.playSong((speakermanager.curSource, song[0], song[2])) else: sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "You already liked " + song[0] + " by " + song[1] + " song!") except: sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "No song is playing :(") traceback.print_exc()