From 86f1c4cee69e567050a9c007cc72d1718f486a37 Mon Sep 17 00:00:00 2001 From: bobloy Date: Tue, 18 Sep 2018 10:15:08 -0400 Subject: [PATCH] Working settings --- audiotrivia/audiosession.py | 13 +++++++++- audiotrivia/audiotrivia.py | 50 +++++++++++++++++++++++++++++-------- 2 files changed, 52 insertions(+), 11 deletions(-) diff --git a/audiotrivia/audiosession.py b/audiotrivia/audiosession.py index 1d28b7a..780d4b9 100644 --- a/audiotrivia/audiosession.py +++ b/audiotrivia/audiosession.py @@ -34,6 +34,8 @@ class AudioSession(TriviaSession): async with self.ctx.typing(): await asyncio.sleep(3) self.count += 1 + await self.player.stop() + msg = "**Question number {}!**\n\nName this audio!".format(self.count) await self.ctx.send(msg) # print("Audio question: {}".format(question)) @@ -44,7 +46,16 @@ class AudioSession(TriviaSession): # await self.ctx.invoke(self.player.play, query=question) query = question.strip("<>") tracks = await self.player.get_tracks(query) - self.player.add(self.ctx.author, tracks[0]) + seconds = tracks[0].length / 1000 + + if self.settings["repeat"] and seconds < delay: + tot_length = seconds + 0 + while tot_length < delay: + self.player.add(self.ctx.author, tracks[0]) + tot_length += seconds + else: + self.player.add(self.ctx.author, tracks[0]) + if not self.player.current: await self.player.play() diff --git a/audiotrivia/audiotrivia.py b/audiotrivia/audiotrivia.py index 0649d76..6328e37 100644 --- a/audiotrivia/audiotrivia.py +++ b/audiotrivia/audiotrivia.py @@ -7,10 +7,10 @@ import yaml from redbot.cogs.audio import Audio from redbot.cogs.trivia import LOG from redbot.cogs.trivia.trivia import InvalidListError, Trivia -from redbot.core import commands, Config +from redbot.core import commands, Config, checks from redbot.core.bot import Red from redbot.core.data_manager import cog_data_path -from redbot.core.utils import box +from redbot.core.utils.chat_formatting import box from .audiosession import AudioSession @@ -30,14 +30,40 @@ class AudioTrivia(Trivia): self.audioconf.register_guild( delay=30.0, repeat=True - ) # Todo: Repeat songs shorter than the delay (csgo sound effects for example) + ) - @commands.command() - @commands.is_owner() - async def testit(self, ctx: commands.Context): - self.audio: Audio = self.bot.get_cog("Audio") - await ctx.invoke(self.audio.play, query="https://www.youtube.com/watch?v=FrceWR4XnVU") - print("done") + @commands.group() + @commands.guild_only() + @checks.mod_or_permissions(administrator=True) + async def atriviaset(self, ctx: commands.Context): + """Manage Audio Trivia settings.""" + audioset = self.audioconf.guild(ctx.guild) + settings_dict = await audioset.all() + msg = box( + "**Audio settings**\n" + "Answer time limit: {delay} seconds\n" + "Repeat Short Audio: {repeat}" + "".format(**settings_dict), + lang="py", + ) + await ctx.send(msg) + + @atriviaset.command(name="delay") + async def atriviaset_delay(self, ctx: commands.Context, seconds: float): + """Set the maximum seconds permitted to answer a question.""" + if seconds < 4.0: + await ctx.send("Must be at least 4 seconds.") + return + settings = self.audioconf.guild(ctx.guild) + await settings.delay.set(seconds) + await ctx.send("Done. Maximum seconds to answer set to {}.".format(seconds)) + + @atriviaset.command(name="repeat") + async def atriviaset_repeat(self, ctx: commands.Context, true_or_false: bool): + """Set whether or not short audio will be repeated""" + settings = self.audioconf.guild(ctx.guild) + await settings.repeat.set(true_or_false) + await ctx.send("Done. Repeating short audio is now set to {}.".format(true_or_false)) @commands.group(invoke_without_command=True) @commands.guild_only() @@ -116,11 +142,15 @@ class AudioTrivia(Trivia): ) return settings = await self.conf.guild(ctx.guild).all() + audiosettings = await self.audioconf.guild(ctx.guild).all() config = trivia_dict.pop("CONFIG", None) if config and settings["allow_override"]: settings.update(config) settings["lists"] = dict(zip(categories, reversed(authors))) - session = AudioSession.start(ctx=ctx, question_list=trivia_dict, settings=settings, player=lavaplayer) + + # Delay in audiosettings overwrites delay in settings + combined_settings = {**settings, **audiosettings} + session = AudioSession.start(ctx=ctx, question_list=trivia_dict, settings=combined_settings, player=lavaplayer) self.trivia_sessions.append(session) LOG.debug("New audio trivia session; #%s in %d", ctx.channel, ctx.guild.id)