def plsongrequest(self, request, user): request = request.replace("\r", "")[1:] # LINKS # DETERMINE LINK TYPE if validators.url(request): if "youtu" in request: try: title = YouTube(request).title except Exception: return user + " >> Unable to use that video for some reason." key = getytkey(request) if not key: return user + " >> Something is wrong with your Youtube link." # Check the queue to see if the song is already in there. self.db = sqliteread( '''SELECT id, count(*) FROM playlist WHERE key="{0}"'''. format(key)) if self.db[1] > (MAX_DUPLICATE_SONGS - 1): return user + " >> That song is already in the playlist. ID: " + str( self.db[0]) sqlitewrite( '''INSERT INTO playlist(song, key) VALUES("{request}", "{key}");''' .format(request=(request.replace('"', "'")), key=(key.replace('"', "'")))) return user + " >> Added: " + title + " to the playlist (YT). ID: " + str( sqliteread( 'SELECT id FROM playlist ORDER BY id DESC LIMIT 1')[0]) else: # OTHER MP3 REQUESTS <<<<<<< sqlitewrite( '''INSERT INTO playlist(song, key) VALUES("{request}", "{request}");''' .format(request=(request.replace('"', "'")))) return user + " >> Added that link to the playlist. ID: " + str( sqliteread( 'SELECT id FROM playlist ORDER BY id DESC LIMIT 1')[0]) else: # GOOGLE PLAY MUSIC STUFF try: top_song_result = songtitlefilter(request, 0) key = top_song_result['storeId'] songtitle = str(top_song_result['artist'] + " - " + top_song_result['title']) # If theres an error (its unable to find the song) then announce it, otherwise write the song data to the db except IndexError: return user + " >> No results found for that song. Please try a different one." else: # Test if the song is already in the playlist self.db = sqliteread( '''SELECT id, count(*) FROM playlist WHERE key="{0}"'''. format(key)) if self.db[1] > (MAX_DUPLICATE_SONGS - 1): return user + " >> That song is already in the playlist. ID: " + str( self.db[0]) # Add song to the playlist sqlitewrite( '''INSERT INTO playlist(song, key) VALUES("{request}", "{key}");''' .format(request=(songtitle.replace('"', "'")), key=(key.replace('"', "'")))) return user + " >> Added: " + songtitle + " to the playlist. ID: " + str( sqliteread( 'SELECT id FROM playlist ORDER BY id DESC LIMIT 1')[0])
def clearsong(self, songid, user): if not songid: try: result = sqliteread( 'SELECT id, song, name FROM songs ORDER BY id DESC LIMIT 1' ) sqlitewrite('DELETE FROM songs WHERE id={0}'.format( str(result[0]))) return user + ' >> Removed the request: "' + str( result[1]) + '" requested by ' + str( result[2]) + " from the queue." except Error as e: raise e except: return "Something messed up. Is the queue empty?" else: try: result = sqliteread( 'SELECT song, name FROM songs WHERE id={0}'.format(songid)) sqlitewrite('DELETE FROM songs WHERE id={0}'.format(songid)) return user + ' >> Removed the request: "' + str( result[0]) + '" requested by ' + str( result[1]) + " from the queue." except Error as e: raise e except: return user + " >> Couldn't find that request."
def wrongsong(self, songid, user): if not songid: try: result = sqliteread( 'SELECT id, song FROM songs WHERE name="{0}" ORDER BY id DESC LIMIT 1' .format(user)) sqlitewrite('DELETE FROM songs WHERE id={0}'.format( str(result[0]))) return user + ' >> Removed your request: "' + str( result[1]) + '" from the queue.' except Error as e: raise e except: return user + " >> Couldn't find your most recent request." else: try: result = sqliteread( 'SELECT song, name FROM songs WHERE id={0}'.format(songid)) if user in result[1]: sqlitewrite( 'DELETE FROM songs WHERE id={0}'.format(songid)) return user + ' >> Removed your request: "' + str( result[0]) + '" from the queue.' else: return user + " >> You didn't request that song, you can't delete it!" except Error as e: raise e except: return user + " >> Couldn't find that request."
def playfromplaylist(): row = sqliteread('''SELECT id, song, key FROM playlist ORDER BY id ASC''') #Pick the top song if row == None: #>>>>>> DO THIS STUFF IF THE LIST IS EMPTY! return try: songtitle = row[1] songkey = row[2] except: return #Delete the top result row = sqliteread('SELECT id FROM playlist ORDER BY id ASC LIMIT 1') sqlitewrite(('''DELETE FROM playlist WHERE id={0}''').format(int(row[0]))) #Delete the top song sqlitewrite(('''INSERT INTO playlist(song, key) VALUES("{song_name}", "{key}");''').format(song_name=songtitle, key=songkey)) sqlitewrite(('''INSERT INTO songs(name, song, key) VALUES("BotPlaylist", "{song_name}", "{key}");''').format(song_name=songtitle, key=songkey))
def youtubesr(self, request, user): request = unidecode(request) try: results = (Mobileclient.search(api, request, SONGBLSIZE)['video_hits']) top_result = results[0]['youtube_video'] video_url = "https://www.youtube.com/watch?v=" + top_result['id'] key = top_result['id'] title = top_result['title'] except IndexError: try: self.video = YouTube("https://www.youtube.com/watch?v=" + request) return self.songrequest(" https://www.youtube.com/watch?v=" + request, user) except: return "No results at all" try: self.video = YouTube(video_url) except: return user + " >> That video is unavailable, it's probably age restricted." # Check the queue to see if the song is already in there. self.db = sqliteread('''SELECT id, count(*) FROM songs WHERE key="{0}"'''.format(key)) if self.db[1] > (MAX_DUPLICATE_SONGS - 1): return user + " >> That song is already in the queue." songtime = self.getsongtime(video_url, key) if songtime > (MAXTIME * 60000): return user + " >> That song exceeds the maximum length of " + str(MAXTIME) + " minutes." sqlitewrite('''INSERT INTO songs(name, song, key, time) VALUES("{user}", "{request}", "{key}", "{time}");'''.format(user=user, request=(video_url.replace('"', "'")), key=(key.replace('"', "'")), time=songtime)) removetopqueue() return user + " >> Added: " + title + " to the queue (YT). ID: " + getnewentry()
def plclearsong(self, songid, user): if not songid: try: result = sqliteread('SELECT id, song FROM playlist ORDER BY id DESC LIMIT 1') sqlitewrite('DELETE FROM playlist WHERE id={0}'.format(str(result[0]))) return user + ' >> Removed your request: "' + str(result[1]) + '" from the backup playlist.' except Exception as e: print (e) return user + " >> Couldn't find the most recent request." else: try: result = sqliteread('SELECT song FROM playlist WHERE id={0}'.format(songid)) sqlitewrite('DELETE FROM playlist WHERE id={0}'.format(songid)) return user + ' >> Removed the song: "' + str(result[0]) + " from the queue." except Error as e: raise e except: return user + " >> Couldn't find that request."
def removetopqueue(): row = sqliteread( '''SELECT id, name, song, key FROM songs ORDER BY id ASC''' ) #Pick the top song if row[1] == "BotPlaylist": #>>>>>> DO THIS STUFF IF THE LIST IS EMPTY! sqlitewrite(('''DELETE FROM songs WHERE id={0}''').format(int( row[0]))) #Delete the top song return return False
def playsong(self): global skiprequests, skipusers row = sqliteread( '''SELECT id, name, song, key FROM songs ORDER BY id ASC''' ) # Pick the top song try: self.songtitle = row[2] songkey = row[3] except Exception as e: time.sleep(0.4) return sqlitewrite(('''DELETE FROM songs WHERE id={0}''').format( row[0])) # Delete the top song if validators.url( self.songtitle) == True: # TEST IF THE REQUEST IS A LINK if "youtu" in self.songtitle: # IS IT A YOUTUBE LINK? try: yt = YouTube(self.songtitle) playurl = yt.streams.filter( only_audio=True).order_by('abr').first().url self.songtitle = yt.title except Exception as e: print "Pytube Error:" print e writenowplaying(True, self.songtitle) else: # If not YT link, play normal music file. playurl = self.songtitle self.songtitle = "Online Music File" writenowplaying(True, self.songtitle) else: # Otherwise it's GPM playurl = sr_geturl(songkey) writenowplaying(True, self.songtitle) self.instance = vlc.Instance() self.p = self.instance.media_player_new(playurl) # Play the music self.p.play() saveAlbumArt(songkey) writenowplaying(True, self.songtitle) createsongqueue() skiprequests = 0 skipusers = [] return True
def songrequest(self, request, user): if request == "\r": # Send a message if they request nothing return user + " >> " + DEFAULT_SR_MSG # Check for songs already in the queue if sqliteread('''SELECT count(*) FROM songs WHERE name="{0}"'''.format(user))[0] > (MAX_REQUESTS_USER - 1): return user + " >> You already have " + str(MAX_REQUESTS_USER) + " songs in the queue." request = request.replace("\r", "")[1:] # LINKS # DETERMINE LINK TYPE if validators.url(request): if "youtu" in request: key = getytkey(request) if not key: return "Something is wrong with your Youtube link." # Check the queue to see if the song is already in there. self.db = sqliteread('''SELECT id, count(*) FROM songs WHERE key="{0}"'''.format(key)) if self.db[1] > (MAX_DUPLICATE_SONGS - 1): return user + " >> That song is already in the queue." try: self.video = YouTube(request) except: return user + " >> That video is unavailable, it's probably age restricted." songtime = self.getsongtime(request, key) if songtime > (MAXTIME * 60000): return user + " >> That song exceeds the maximum length of " + str(MAXTIME) + " minutes." title = self.video.title sqlitewrite('''INSERT INTO songs(name, song, key, time) VALUES("{user}", "{request}", "{key}", "{time}");'''.format(user=user, request=(request.replace('"', "'")), key=(key.replace('"', "'")), time=songtime)) removetopqueue() return user + " >> Added: " + title + " to the queue (YT). ID: " + getnewentry() else: # OTHER MP3 REQUESTS <<<<<<< if not MEDIA_FILE_ENABLE: return user + " >> Online Media Links are disabled by the streamer, you'll need to request something else." songtime = self.getsongtime("Online", request) if songtime > (MAXTIME * 60000): return user + " >> That song exceeds the maximum length of " + str(MAXTIME) + " minutes." sqlitewrite('''INSERT INTO songs(name, song, key, time) VALUES("{user}", "{request}", "{request}", "{time}");'''.format(user=user, request=(request.replace('"', "'")), time=songtime)) removetopqueue() return user + " >> Added that link to the queue. ID: " + getnewentry() elif GPM_ENABLE: # GOOGLE PLAY MUSIC STUFF try: top_song_result = songtitlefilter(request, 0) key = top_song_result['storeId'] songtitle = str(top_song_result['artist'] + " - " + top_song_result['title']) # If theres an error (its unable to find the song) then announce it, otherwise write the song data to the db except IndexError: if YT_IF_NO_RESULT: return self.youtubesr(request, user) else: return user + " >> No results found for that song. Please try a different one." else: # Test if the song is already in the queue self.db = sqliteread('''SELECT id, count(*) FROM songs WHERE key="{0}"'''.format(key)) if self.db[1] > (MAX_DUPLICATE_SONGS - 1): return user + " >> That song is already in the queue." songtime = self.getsongtime(None, key) if songtime > (MAXTIME * 60000): return user + " >> That song exceeds the maximum length of " + str(MAXTIME) + " minutes." # Add song to the queue sqlitewrite('''INSERT INTO songs(name, song, key, time) VALUES("{user}", "{request}", "{key}", "{time}");'''.format(user=user, request=(songtitle.replace('"', "'")), key=(key.replace('"', "'")), time=songtime)) removetopqueue() return user + " >> Added: " + songtitle + " to the queue. ID: " + getnewentry() else: return self.youtubesr(request, user)
def getnewentry(): result = sqliteread('SELECT id FROM songs ORDER BY id DESC LIMIT 1') return(str(result[0]))