示例#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)
示例#2
0
def handle(command, message, sender):
    """
    ~ Handles the commands to the speaker ~
    :param command: The command to be sent. The first word of the message  Ex: BoseVolume 20
    :param message: The content AFTER the commmand. Ex: Bdeezer Sandstorm is just Sanstorm for the message
    :param sender: The phone number it is being sent from

    Checks to see if command + "py" exists. Then it imports that file and invokes the method
    inside that file. Otherwise it sends the player a message saying the command doesn't exist.
    """

    if static.adminnumber is None:
        static.adminnumber = sender
    # the command is handled by a file and function named after itself
    # BREAKS IF COMMAND IS FIRST WORD OF A POSIBLE SONG NAME
    keyword = config['DEFAULT']['keyword']
    command = command[len(keyword):]
    try:
        target_file = os.path.join(os.path.dirname(__file__), "commands/" + command + '.py')
        if os.path.isfile(target_file):
            server.validatestatus()
            module = importlib.import_module(command + '')
            getattr(module, command)(message, sender)
        else:  # if file doesn't exist, assume queue of song
            # fabricate original message
            #message = command + " " + message
            #module = importlib.import_module('song')
            #getattr(module, 'song')(message, sender)
            sendtext(sender, config['DEFAULT']['ai_name'] + ": " +  "Sorry, no such command.  Please text" + "\"BHelp\"" + "for command list.")
    except Exception as e:
        print('Error handling command')
        print('error:')
        traceback.print_exc()
示例#3
0
def clear(message, sender):
    if adminmode and sender == adminnumber:
        sendtext(sender, config['DEFAULT']['ai_name'] + ": " + config['DEFAULT']['master_name'] + ", the system has been CLEARED.")
        speakermanager.clear()
    else:
        sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "You are not " + config['DEFAULT']['master_name'] + " ... Please have" + adminnumber[:-4] + "send this command.")
		
示例#4
0
def helplist(message, sender):
    sendtext(
        sender, config['DEFAULT']['ai_name'] + ": This is a long one:" + """
To play a song: <Keyword><Source> <Song Title> by <Artist>
Ex: BDeezer Call Me A Spaceman by Hardwell
Note: Spotify and Deezer are the only Sources currently.
Note: You do not have to include Artist but the more accurate you are the better the program will respond.
        """)
示例#5
0
def helplist(message, sender):
    	sendtext(sender, config['DEFAULT']['ai_name'] + ": This is a long one:" +
        """
To play a song: <Keyword><Source> <Song Title> by <Artist>
Ex: BDeezer Call Me A Spaceman by Hardwell
Note: Spotify and Deezer are the only Sources currently.
Note: You do not have to include Artist but the more accurate you are the better the program will respond.
        """ )
示例#6
0
def topclear(message, sender):
    party.curPlayer = 0
    party.players = []
    party.queues = {}
    party.boos = {}
    len = addHotList()
    if len > 0:
        sendtext(sender, config['DEFAULT']['ai_name'] + ": " "Cleared songs from hot playlist!")
    else:
        sendtext(sender, config['DEFAULT']['ai_name'] + ": " "No songs in hot playlist :(")
示例#7
0
def ping(message, sender):
    if adminmode and sender == adminnumber:
        sendtext(
            sender, config['DEFAULT']['ai_name'] + ": " +
            config['DEFAULT']['master_name'][-5:] +
            " , I received your message." + message)
    else:
        sendtext(
            sender, config['DEFAULT']['ai_name'] + ": " +
            "I received your message." + message)
示例#8
0
def top(message, sender):
    len = addHotList()
    if len > 0:
        sendtext(
            sender, config['DEFAULT']['ai_name'] + ": "
            "Queued songs from hot playlist!")
    else:
        sendtext(
            sender, config['DEFAULT']['ai_name'] + ": "
            "No songs in hot playlist :(")
示例#9
0
def handleSongSearch(message, sender):
    songname = message
    artistname = None
    splitter = "by"
    if message.find(splitter) > -1:
        songname = message[:message.find(splitter)].strip()
        artistname = message[message.find(splitter)+len(splitter):].strip()
    if deezerapi.validate(songname, artistname):
        party.queuesong(sender, "deezer", songname, artistname)
    else:
        sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "Unable to find song: " + songname + "on Deezer.")
        sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "To send a song follow this format <Keyword><Source> <Song Title> by <Artist>" + "\n" + "For more commands please text" + "\"BHelp\"")
示例#10
0
def system(message, sender):
    info = speakermanager.getSystemSettings()
    message = """
Name: %(name)s
Type: %(type)s
Software Version: %(softwareVersion)s
Serial Number: %(serialNumber)s
Mac Address: %(macAddress)s
IP Address: %(ipAddress)s
        """
    sendtext(sender, config['DEFAULT']['ai_name'] + ": System Info" + message%info)
    
示例#11
0
def list(message, sender):
    if party.getQueueSize() > 0:
        for q in party.queues:
            msg =  config['DEFAULT']['ai_name'] + ": " + "Songs in queue:\n"
            for song in party.queues[q]:
                if song[1] is not None:
                    msg += song[0] + " by " + song[1] + "\n"
                else:
                    msg += song[0]
        sendtext(sender, msg)
    else:
        sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "No song in queue.")
示例#12
0
def system(message, sender):
    info = speakermanager.getSystemSettings()
    message = """
Name: %(name)s
Type: %(type)s
Software Version: %(softwareVersion)s
Serial Number: %(serialNumber)s
Mac Address: %(macAddress)s
IP Address: %(ipAddress)s
        """
    sendtext(sender,
             config['DEFAULT']['ai_name'] + ": System Info" + message % info)
示例#13
0
def list(message, sender):
    if party.getQueueSize() > 0:
        for q in party.queues:
            msg = config['DEFAULT']['ai_name'] + ": " + "Songs in queue:\n"
            for song in party.queues[q]:
                if song[1] is not None:
                    msg += song[0] + " by " + song[1] + "\n"
                else:
                    msg += song[0]
        sendtext(sender, msg)
    else:
        sendtext(sender,
                 config['DEFAULT']['ai_name'] + ": " + "No song in queue.")
示例#14
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?")
示例#15
0
def topclear(message, sender):
    party.curPlayer = 0
    party.players = []
    party.queues = {}
    party.boos = {}
    len = addHotList()
    if len > 0:
        sendtext(
            sender, config['DEFAULT']['ai_name'] + ": "
            "Cleared songs from hot playlist!")
    else:
        sendtext(
            sender, config['DEFAULT']['ai_name'] + ": "
            "No songs in hot playlist :(")
示例#16
0
def playNextSong():
    """
    ~ Plays the next song ~
    Plays the next song queued
    and clears the boo array
    and alerts the player
    who queued the song that his/her
    song will be played next
    """
    speakermanager.playSong(getNextSong())
    clearBoos()
    time.sleep(5)
    ns = acquireNextSong()
    if ns:
        sendtext(ns[0], config['DEFAULT']['ai_name'] + ": " +"Your song '" + ns[1][0] + "' will be playing next!")
示例#17
0
def handleLyricSearch(message, sender):
    apiKey = config['musixmatch']['apikey']  # 2000 hits per day
    searchTerm = urllib.parse.quote(message)
    url = "http://api.musixmatch.com/ws/1.1/track.search?q_lyrics=" + searchTerm + "&apikey=" + apiKey
    response = urlopen(url)
    tracks = json.loads(response.read().decode('utf-8'))['message']['body']['track_list']
    tracksFound = len(tracks)
    if tracksFound > 0:
        firstSong = tracks[0]['track']
        trackName = firstSong['track_name']
        artistName = firstSong['artist_name']
        party.queuesong(sender, "deezer", trackName, artistName)
        sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "Found " + trackName + " by " + trackName + " ." )
    else:
        sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "Your song" + message + "was not found!")
示例#18
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?")
示例#19
0
def playNextSong():
    """
    ~ Plays the next song ~
    Plays the next song queued
    and clears the boo array
    and alerts the player
    who queued the song that his/her
    song will be played next
    """
    speakermanager.playSong(getNextSong())
    clearBoos()
    time.sleep(5)
    ns = acquireNextSong()
    if ns:
        sendtext(ns[0], config["DEFAULT"]["ai_name"] + ": " + "Your song '" + ns[1][0] + "' will be playing next!")
示例#20
0
def handleSongSearch(message, sender):
    songname = message
    artistname = None
    splitter = "by"
    if message.find(splitter) > -1:
        songname = message[:message.find(splitter)].strip()
        artistname = message[message.find(splitter) + len(splitter):].strip()
    if spotifyapi.validate(songname, artistname):
        party.queuesong(sender, "spotify", songname, artistname)
    else:
        sendtext(
            sender, config['DEFAULT']['ai_name'] + ": " +
            "Unable to find song: " + songname + "on Spotify.")
        sendtext(
            sender, config['DEFAULT']['ai_name'] + ": " +
            "To send a song follow this format <Keyword><Source> <Song Title> by <Artist>"
            + "\n" + "For more commands please text" + "\"BHelp\"")
示例#21
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)
示例#22
0
def handleLyricSearch(message, sender):
    apiKey = config['musixmatch']['apikey']  # 2000 hits per day
    searchTerm = urllib.parse.quote(message)
    url = "http://api.musixmatch.com/ws/1.1/track.search?q_lyrics=" + searchTerm + "&apikey=" + apiKey
    response = urlopen(url)
    tracks = json.loads(
        response.read().decode('utf-8'))['message']['body']['track_list']
    tracksFound = len(tracks)
    if tracksFound > 0:
        firstSong = tracks[0]['track']
        trackName = firstSong['track_name']
        artistName = firstSong['artist_name']
        party.queuesong(sender, "spotify", trackName, artistName)
        sendtext(
            sender, config['DEFAULT']['ai_name'] + ": " + "Found " +
            trackName + " by " + trackName + " .")
    else:
        sendtext(
            sender, config['DEFAULT']['ai_name'] + ": " + "Your song" +
            message + "was not found!")
示例#23
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()
示例#24
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!")
示例#25
0
def queuesong(sender, source, songname, artistname=None):
    """
    ~ Queues the song to be in the in the queue ~
    :param sender: The speaker address
    :param source: The phone number that is requesting it
    :param songname: The name of the song to queue
    :param artistname: The artist of the song

    Queues the song which is sent from the players.
    If the sender is not in players, then they
    are placed in the player array. Will message
    the player back with the confirmation of it
    being queued.

    """
    if sender not in players:
        players.append(sender)
        queues[sender] = collections.deque()
        boos[sender] = False
    queues[sender].append((songname, artistname, source))
    message = config['DEFAULT']['ai_name'] + ": " + "Your Song has been queued, " + songname
    if artistname is not None:
        message = message + " by " + artistname
    sendtext(sender, message)
示例#26
0
def queuesong(sender, source, songname, artistname=None):
    """
    ~ Queues the song to be in the in the queue ~
    :param sender: The speaker address
    :param source: The phone number that is requesting it
    :param songname: The name of the song to queue
    :param artistname: The artist of the song

    Queues the song which is sent from the players.
    If the sender is not in players, then they
    are placed in the player array. Will message
    the player back with the confirmation of it
    being queued.

    """
    if sender not in players:
        players.append(sender)
        queues[sender] = collections.deque()
        boos[sender] = False
    queues[sender].append((songname, artistname, source))
    message = config["DEFAULT"]["ai_name"] + ": " + "Your Song has been queued, " + songname
    if artistname is not None:
        message = message + " by " + artistname
    sendtext(sender, message)
示例#27
0
def input(message, sender):
    if message.strip().upper() == "AUX":
        speakermanager.simulateKeyPress("AUX_INPUT")
        sendtext(sender, config["DEFAULT"]["ai_name"] + ": " + "You sent an Input AUX command.")
    if message.index("preset") > -1:
        if not len(message) == 8:
            sendtext(sender, config["DEFAULT"]["ai_name"] + ": " + "Invalid Preset, acceptable range 1-6.")
        else:
            speakermanager.simulateKeyPress(message.replace(" ", "_").upper())
            sendtext(sender, message.replace(" ", "_").upper())
示例#28
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 :(")
示例#29
0
def volume(message, number):
    curVol = speakermanager.getVolume()
    if message.isdigit():
        speakermanager.setVolume(message)
        sendtext(number, config['DEFAULT']['ai_name'] + ": " + "Result volume: " + str(message))
    elif message == "up":
        speakermanager.setVolume(curVol + 5)
        sendtext(number, config['DEFAULT']['ai_name'] + ": " + "You sent a volume up command")
    elif message == "down":
        speakermanager.setVolume(curVol - 5)
        sendtext(number, config['DEFAULT']['ai_name'] + ": " + "You sent a volume down command")
示例#30
0
def input(message, sender):
    if message.strip().upper() == "AUX":
        speakermanager.simulateKeyPress("AUX_INPUT")
        sendtext(
            sender, config['DEFAULT']['ai_name'] + ": " +
            "You sent an Input AUX command.")
    if message.index("preset") > -1:
        if not len(message) == 8:
            sendtext(
                sender, config['DEFAULT']['ai_name'] + ": " +
                "Invalid Preset, acceptable range 1-6.")
        else:
            speakermanager.simulateKeyPress(message.replace(" ", "_").upper())
            sendtext(sender, message.replace(" ", "_").upper())
示例#31
0
def volume(message, number):
    curVol = speakermanager.getVolume()
    if message.isdigit():
        speakermanager.setVolume(message)
        sendtext(
            number, config['DEFAULT']['ai_name'] + ": " + "Result volume: " +
            str(message))
    elif message == "up":
        speakermanager.setVolume(curVol + 5)
        sendtext(
            number, config['DEFAULT']['ai_name'] + ": " +
            "You sent a volume up command")
    elif message == "down":
        speakermanager.setVolume(curVol - 5)
        sendtext(
            number, config['DEFAULT']['ai_name'] + ": " +
            "You sent a volume down command")
示例#32
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 :(")
示例#33
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()
示例#34
0
def clear(message, sender):
    if adminmode and sender == adminnumber:
        sendtext(sender, config['DEFAULT']['ai_name'] + ": " + config['DEFAULT']['master_name'] + ", the system has been CLEARED.")
        speakermanager.clear()
    else:
        sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "You are not " + config['DEFAULT']['master_name'] + " ... Please have" + adminnumber[:-4] + "send this command.")
示例#35
0
def activate(message, sender):
    speakermanager.simulateKeyPress(message.upper())
    sendtext(sender, message.upper())
示例#36
0
def power(message, sender):
    if static.speakerOn:
        speakermanager.simulateKeyPress("POWER")
    sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "Power")
    static.speakerOn = not static.speakerOn
示例#37
0
def help(message, sender):
    	sendtext(sender, config['DEFAULT']['ai_name'] + ": Please visit http://tinyurl.com/MusicSharecommand \n" + "or text back " + "\"BHelpList\"" + "for the complete command list texted to you."  )
示例#38
0
def activate(message, sender):
    speakermanager.simulateKeyPress(message.upper())
    sendtext(sender, message.upper())
示例#39
0
def power(message, sender):
    if static.speakerOn:
        speakermanager.simulateKeyPress("POWER")
    sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "Power")
    static.speakerOn = not static.speakerOn
示例#40
0
def ping(message, sender):
    if adminmode and sender == adminnumber:
    	sendtext(sender, config['DEFAULT']['ai_name'] + ": " +  config['DEFAULT']['master_name'][-5:] + " , I received your message." + message)
    else:
    	sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "I received your message." + message)
示例#41
0
def top(message, sender):
    len = addHotList()
    if len > 0:
        sendtext(sender, config['DEFAULT']['ai_name'] + ": " "Queued songs from hot playlist!")
    else:
        sendtext(sender, config['DEFAULT']['ai_name'] + ": " "No songs in hot playlist :(")