Beispiel #1
0
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)
Beispiel #2
0
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()
Beispiel #3
0
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 :(")
Beispiel #4
0
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?")
Beispiel #5
0
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
Beispiel #6
0
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?")
Beispiel #7
0
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!")
Beispiel #8
0
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 :(")
Beispiel #9
0
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
Beispiel #10
0
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)
Beispiel #11
0
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)
Beispiel #12
0
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)
Beispiel #13
0
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()