From b30f0d868b8f39c4d9dfc14618e6980af7ca3908 Mon Sep 17 00:00:00 2001 From: azlux Date: Mon, 18 Jun 2018 23:58:07 +0200 Subject: [PATCH] repeat function and better code For #11 and #12 --- interface.py | 26 ++++++++-------- mumbleBot.py | 88 ++++++++++++++++++++++++++++++---------------------- variables.py | 2 +- 3 files changed, 65 insertions(+), 51 deletions(-) diff --git a/interface.py b/interface.py index 1b3bae3..640267d 100644 --- a/interface.py +++ b/interface.py @@ -69,7 +69,7 @@ def index(): if request.method == 'POST': print(request.form) if 'add_file' in request.form and ".." not in request.form['add_file']: - item = ('file', request.form['add_file'], datetime.now().timestamp()) + item = ('file', request.form['add_file'], 'Web') var.playlist.append(item) elif ('add_folder' in request.form and ".." not in request.form['add_folder']) or ('add_folder_recursively' in request.form and ".." not in request.form['add_folder_recursively']): @@ -86,15 +86,15 @@ def index(): files = music_library.get_files_recursively(folder) else: files = music_library.get_files(folder) - files = list(map(lambda file: ('file', os.path.join(folder, file), datetime.now().timestamp()), files)) + files = list(map(lambda file: ('file', os.path.join(folder, file), 'Web'), files)) print('Adding to playlist: ', files) var.playlist.extend(files) elif 'add_url' in request.form: - var.playlist.append(['url', request.form['add_url']]) + var.playlist.append(['url', request.form['add_url'], "Web"]) elif 'add_radio' in request.form: - var.playlist.append(['radio', request.form['add_radio']]) + var.playlist.append(['radio', request.form['add_radio'], "Web"]) elif 'delete_music' in request.form: for item in var.playlist: @@ -107,32 +107,32 @@ def index(): random.shuffle(var.playlist) if var.current_music: - source = var.current_music[0] + source = var.current_music['type'] # format for current_music below: # (sourcetype, title, url or None) if source == "radio": current_music = ( "[radio]", - media.get_radio_title(var.current_music[1]), - var.current_music[2] + media.get_radio_title(var.current_music['path']), + var.current_music['title'] ) elif source == "url": current_music = ( "[url]", - var.current_music[2], - var.current_music[1] + var.current_music['title'], + var.current_music['path'] ) elif source == "file": current_music = ( "[file]", - var.current_music[2], + var.current_music['title'], None ) else: current_music = ( - "(??)[" + var.current_music[0] + "]", - var.current_music[1], - var.current_music[2], + "(??)[" + var.current_music['type'] + "]", + var.current_music['path'], + var.current_music['title'], ) else: current_music = None diff --git a/mumbleBot.py b/mumbleBot.py index d83af28..f716a90 100644 --- a/mumbleBot.py +++ b/mumbleBot.py @@ -28,7 +28,7 @@ class MumbleBot: self.volume = var.config.getfloat('bot', 'volume') self.channel = args.channel - var.current_music = None + var.current_music = {} FORMAT = '%(asctime)s: %(message)s' if args.quiet: @@ -38,18 +38,20 @@ class MumbleBot: ###### ## Format of the Playlist : - ## [("","")] - ## [("",""), ("","")] + ## [("","")] ## types : file, radio, url ###### ###### ## Format of the current_music variable + # var.current_music = { "type" : str, + # "path" : str, + # "title" : str, + # "user" : str } # len(var.current_music) = 4 - # var.current_music[0] = - # var.current_music[1] = if url of radio - # var.current_music[2] = - # var.current_music[3] = <path> if url or file + # var.current_music["type"] = <Type> + # var.current_music["path"] = <url> if youtube/radio, <path> if file + # var.current_music["title"] = <title> var.playlist = [] @@ -113,6 +115,7 @@ class MumbleBot: def message_received(self, text): message = text.message.strip() + user = self.mumble.users[text.actor]['name'] if message[0] == '!': message = message[1:].split(' ', 1) if len(message) > 0: @@ -123,7 +126,7 @@ class MumbleBot: else: return - logging.info(command + ' - ' + parameter + ' by ' + self.mumble.users[text.actor]['name']) + logging.info(command + ' - ' + parameter + ' by ' + user) if command == var.config.get('command', 'play_file') and parameter: music_folder = var.config.get('bot', 'music_folder') @@ -132,14 +135,14 @@ class MumbleBot: if path.startswith(music_folder): if os.path.isfile(path): filename = path.replace(music_folder, '') - var.playlist.append(["file", filename]) + var.playlist.append(["file", filename, user]) else: # try to do a partial match matches = [file for file in util.get_recursive_filelist_sorted(music_folder) if parameter.lower() in file.lower()] if len(matches) == 0: self.mumble.users[text.actor].send_message(var.config.get('strings', 'no_file')) elif len(matches) == 1: - var.playlist.append(["file", matches[0]]) + var.playlist.append(["file", matches[0], user]) else: msg = var.config.get('strings', 'multiple_matches') + '<br />' msg += '<br />'.join(matches) @@ -148,12 +151,12 @@ class MumbleBot: self.mumble.users[text.actor].send_message(var.config.get('strings', 'bad_file')) elif command == var.config.get('command', 'play_url') and parameter: - var.playlist.append(["url", parameter]) + var.playlist.append(["url", parameter, user]) elif command == var.config.get('command', 'play_radio') and parameter: if var.config.has_option('radio', parameter): parameter = var.config.get('radio', parameter) - var.playlist.append(["radio", parameter]) + var.playlist.append(["radio", parameter, user]) elif command == var.config.get('command', 'help'): self.send_msg_channel(var.config.get('strings', 'help')) @@ -186,24 +189,29 @@ class MumbleBot: elif command == var.config.get('command', 'current_music'): if var.current_music: - source = var.current_music[0] + source = var.current_music["type"] if source == "radio": - reply = "[radio] {title} sur {url}".format( - title=media.get_radio_title(var.current_music[1]), - url=var.current_music[2] + reply = "[radio] {title} on {url} by {user}".format( + title=media.get_radio_title(var.current_music["path"]), + url=var.current_music["title"], + user=var.current_music["user"] ) elif source == "url": - reply = "[url] {title} (<a href=\"{url}\">{url}</a>)".format( - title=var.current_music[2], - url=var.current_music[1] + reply = "[url] {title} (<a href=\"{url}\">{url}</a>) by {user}".format( + title=var.current_music["title"], + url=var.current_music["path"], + user=var.current_music["user"] ) elif source == "file": - reply = "[file] {title}".format(title=var.current_music[2]) + reply = "[file] {title} by {user}".format( + title=var.current_music["title"], + user=var.current_music["user"]) else: - reply = "(?)[{}] {} {}".format( - var.current_music[0], - var.current_music[1], - var.current_music[2], + reply = "(?)[{}] {} {} by {}".format( + var.current_music["type"], + var.current_music["path"], + var.current_music["title"], + var.current_music["user"] ) else: reply = var.config.get('strings', 'not_playing') @@ -212,7 +220,10 @@ class MumbleBot: elif command == var.config.get('command', 'next'): if var.playlist: - var.current_music = [var.playlist[0][0], var.playlist[0][1], None, None] + var.current_music = {'type': var.playlist[0][0], + 'path': var.playlist[0][1], + 'title': None, + 'user': var.playlist[0][2]} var.playlist.pop(0) self.launch_next() else: @@ -237,6 +248,10 @@ class MumbleBot: msg += '({}) {}<br />'.format(type, path) self.send_msg_channel(msg) + + elif command == var.config.get('command', 'repeat'): + var.playlist.append([var.current_music["type"], var.current_music["path"], var.current_music["user"]]) + else: self.mumble.users[text.actor].send_message(var.config.get('strings', 'bad_command')) @@ -261,13 +276,13 @@ class MumbleBot: def launch_next(self): path = "" title = "" - if var.current_music[0] == "url": - url = media.get_url(var.current_music[1]) + if var.current_music["type"] == "url": + url = media.get_url(var.current_music["path"]) if not url: return media.clear_tmp_folder(var.config.get('bot', 'tmp_folder'), var.config.getint('bot', 'tmp_folder_max_size')) path, title = self.download_music(url) - var.current_music[1] = url + var.current_music["path"] = url path_thumbnail = var.config.get('bot', 'tmp_folder') + hashlib.md5(url.encode()).hexdigest() + '.jpg' thumbnail_html = "" @@ -282,15 +297,15 @@ class MumbleBot: logging.debug(thumbnail_html) self.send_msg_channel(var.config.get('strings', 'now_playing') % (title, thumbnail_html)) - elif var.current_music[0] == "file": - path = var.config.get('bot', 'music_folder') + var.current_music[1] - title = var.current_music[1] + elif var.current_music["type"] == "file": + path = var.config.get('bot', 'music_folder') + var.current_music["path"] + title = var.current_music["path"] - elif var.current_music[0] == "radio": - url = media.get_url(var.current_music[1]) + elif var.current_music["type"] == "radio": + url = media.get_url(var.current_music["path"]) if not url: return - var.current_music[1] = url + var.current_music["path"] = url path = url title = media.get_radio_server_description(url) @@ -301,8 +316,7 @@ class MumbleBot: command = ["ffmpeg", '-v', ffmpeg_debug, '-nostdin', '-i', path, '-ac', '1', '-f', 's16le', '-ar', '48000', '-'] self.thread = sp.Popen(command, stdout=sp.PIPE, bufsize=480) - var.current_music[2] = title - var.current_music[3] = path + var.current_music["title"] = title def download_music(self, url): url_hash = hashlib.md5(url.encode()).hexdigest() @@ -348,7 +362,7 @@ class MumbleBot: if self.thread is None or not raw_music: if len(var.playlist) != 0: - var.current_music = [var.playlist[0][0], var.playlist[0][1], None, None] + var.current_music = {'type': var.playlist[0][0], 'path': var.playlist[0][1], 'user': var.playlist[0][2]} var.playlist.pop(0) self.launch_next() else: diff --git a/variables.py b/variables.py index ef3e859..b31c6d4 100644 --- a/variables.py +++ b/variables.py @@ -1,4 +1,4 @@ -current_music = ("", "") +current_music = None playlist = [] user = "" music_folder = ""