コード例 #1
0
ファイル: status.py プロジェクト: bosefirmware/MusicShare
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
ファイル: clear.py プロジェクト: bosefirmware/MusicShare
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
ファイル: helplist.py プロジェクト: bosefirmware/MusicShare
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
ファイル: helplist.py プロジェクト: Daraghmeh/MusicShare
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
ファイル: topclear.py プロジェクト: Daraghmeh/MusicShare
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
ファイル: top.py プロジェクト: bosefirmware/MusicShare
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
ファイル: deezer.py プロジェクト: Daraghmeh/MusicShare
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
ファイル: system.py プロジェクト: Daraghmeh/MusicShare
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
ファイル: list.py プロジェクト: Daraghmeh/MusicShare
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
ファイル: system.py プロジェクト: bosefirmware/MusicShare
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
ファイル: list.py プロジェクト: bosefirmware/MusicShare
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
ファイル: genre.py プロジェクト: Daraghmeh/MusicShare
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
ファイル: topclear.py プロジェクト: bosefirmware/MusicShare
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
ファイル: deezer.py プロジェクト: Daraghmeh/MusicShare
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
ファイル: party.py プロジェクト: Daraghmeh/MusicShare
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
ファイル: status.py プロジェクト: Daraghmeh/MusicShare
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
ファイル: boo.py プロジェクト: bosefirmware/MusicShare
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
ファイル: party.py プロジェクト: Daraghmeh/MusicShare
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
ファイル: input.py プロジェクト: Daraghmeh/MusicShare
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
ファイル: skip.py プロジェクト: Daraghmeh/MusicShare
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
ファイル: volume.py プロジェクト: Daraghmeh/MusicShare
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
ファイル: input.py プロジェクト: bosefirmware/MusicShare
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
ファイル: like.py プロジェクト: Daraghmeh/MusicShare
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
ファイル: clear.py プロジェクト: Daraghmeh/MusicShare
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
ファイル: activate.py プロジェクト: Daraghmeh/MusicShare
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
ファイル: power.py プロジェクト: Daraghmeh/MusicShare
def power(message, sender):
    if static.speakerOn:
        speakermanager.simulateKeyPress("POWER")
    sendtext(sender, config['DEFAULT']['ai_name'] + ": " + "Power")
    static.speakerOn = not static.speakerOn
コード例 #40
0
ファイル: ping.py プロジェクト: Daraghmeh/MusicShare
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
ファイル: top.py プロジェクト: Daraghmeh/MusicShare
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 :(")