diff --git a/cogs/audio.py b/cogs/audio.py index 42f45f4f1..6442773a4 100644 --- a/cogs/audio.py +++ b/cogs/audio.py @@ -20,8 +20,6 @@ if not discord.opus.is_loaded(): main_path = os.path.dirname(os.path.realpath(__main__.__file__)) -settings = {"VOLUME" : 0.5, "MAX_LENGTH" : 3700, "QUEUE_MODE" : True} - youtube_dl_options = { 'format': 'bestaudio/best', 'extractaudio': True, @@ -40,6 +38,7 @@ class Audio: def __init__(self, bot): self.bot = bot self.music_player = EmptyPlayer() + self.settings = fileIO("data/audio/settings.json", "load") self.queue_mode = False self.queue = [] self.playlist = [] @@ -253,7 +252,7 @@ class Audio: await self.bot.say("I'm already playing a playlist.") async def is_alone_or_admin(self, author): #Direct control. fix everything - if not settings["QUEUE_MODE"]: + if not self.settings["QUEUE_MODE"]: return True elif discord.utils.get(author.roles, name=checks.settings["ADMIN_ROLE"]) is not None: return True @@ -325,7 +324,7 @@ class Audio: """Changes audio module settings""" if ctx.invoked_subcommand is None: msg = "```" - for k, v in settings.items(): + for k, v in self.settings.items(): msg += str(k) + ": " + str(v) + "\n" msg += "\nType help audioset to see the list of commands.```" await self.bot.say(msg) @@ -333,35 +332,32 @@ class Audio: @audioset.command(name="queue") async def queueset(self, status : str): """Enables/disables queue""" - global settings status = status.lower() if status == "on" or status == "true": - settings["QUEUE_MODE"] = True + self.settings["QUEUE_MODE"] = True await self.bot.say("Queue mode is now on.") elif status == "off" or status == "false": - settings["QUEUE_MODE"] = False + self.settings["QUEUE_MODE"] = False await self.bot.say("Queue mode is now off.") else: await self.bot.say("Queue status can be either on or off.") return - self.save_settings() + fileIO(main_path + "/data/audio/settings.json", "save", self.settings) @audioset.command() async def maxlength(self, length : int): """Maximum track length for requested links""" - global settings - settings["MAX_LENGTH"] = length + self.settings["MAX_LENGTH"] = length await self.bot.say("Maximum length is now " + str(length) + " seconds.") - self.save_settings() + fileIO(main_path + "/data/audio/settings.json", "save", self.settings) @audioset.command() async def volume(self, level : float): """Sets the volume (0-1)""" - global settings if level >= 0 and level <= 1: - settings["VOLUME"] = level + self.settings["VOLUME"] = level await self.bot.say("Volume is now set at " + str(level) + ". It will take effect after the current track.") - self.save_settings() + fileIO(main_path + "/data/audio/settings.json", "save", self.settings) else: await self.bot.say("Volume must be between 0 and 1. Example: 0.40") @@ -379,7 +375,7 @@ class Audio: if self.downloader["ID"]: try: self.music_player.stop() - self.music_player = self.bot.voice.create_ffmpeg_player(path + self.downloader["ID"], options='''-filter:a "volume={}"'''.format(settings["VOLUME"])) + self.music_player = self.bot.voice.create_ffmpeg_player(path + self.downloader["ID"], options='''-filter:a "volume={}"'''.format(self.settings["VOLUME"])) self.music_player.start() if path != "": await self.bot.change_status(discord.Game(name=self.downloader["TITLE"])) except discord.errors.ClientException: @@ -448,7 +444,7 @@ class Audio: self.downloader["DOWNLOADING"] = True yt = youtube_dl.YoutubeDL(youtube_dl_options) v = yt.extract_info(url, download=False) - if v["duration"] > settings["MAX_LENGTH"]: raise MaximumLength("Track exceeded maximum length. See help audioset maxlength") + if v["duration"] > self.settings["MAX_LENGTH"]: raise MaximumLength("Track exceeded maximum length. See help audioset maxlength") if not os.path.isfile("data/audio/cache/" + v["id"]): v = yt.extract_info(url, download=True) audio.downloader = {"DONE" : True, "TITLE" : v["title"], "ID" : v["id"], "URL" : url, "DURATION" : v["duration"], "DOWNLOADING" : False} #Errors out here if invalid link @@ -564,10 +560,6 @@ class Audio: except: return False - def save_settings(self): - with open(main_path + "/data/audio/settings.json", "w") as f: - f.write(json.dumps(settings)) - class EmptyPlayer(): #dummy player def __init__(self): pass @@ -591,24 +583,26 @@ def check_folders(): print("Creating " + folder + " folder...") os.makedirs(folder) -def check_files(n): +def check_files(): + + settings = {"VOLUME" : 0.5, "MAX_LENGTH" : 3700, "QUEUE_MODE" : True} + if not os.path.isfile(main_path + "/data/audio/settings.json"): print("Creating default audio settings.json...") - n.save_settings() + fileIO(main_path + "/data/audio/settings.json", "save", settings) allowed = ["^(https:\/\/www\\.youtube\\.com\/watch\\?v=...........*)", "^(https:\/\/youtu.be\/...........*)", "^(https:\/\/youtube\\.com\/watch\\?v=...........*)", "^(https:\/\/soundcloud\\.com\/.*)"] if not os.path.isfile(main_path + "/data/audio/accepted_links.json"): print("Creating accepted_links.json...") - with open(main_path + "/data/audio/accepted_links.json", "w") as f: - f.write(json.dumps(allowed)) + fileIO(main_path + "/data/audio/accepted_links.json", "save", allowed) def setup(bot): + check_folders() + check_files() loop = asyncio.get_event_loop() n = Audio(bot) - check_folders() - check_files(n) loop.create_task(n.queue_manager()) bot.add_listener(n.incoming_messages, "on_message") bot.add_cog(n) \ No newline at end of file