diff options
Diffstat (limited to 'minecrafttrivia/trivia_interface_cog.py')
-rw-r--r-- | minecrafttrivia/trivia_interface_cog.py | 83 |
1 files changed, 64 insertions, 19 deletions
diff --git a/minecrafttrivia/trivia_interface_cog.py b/minecrafttrivia/trivia_interface_cog.py index b27f789..63553f8 100644 --- a/minecrafttrivia/trivia_interface_cog.py +++ b/minecrafttrivia/trivia_interface_cog.py @@ -2,7 +2,7 @@ import typing import discord from discord.ext.commands import guild_only -from redbot.core import commands, Config +from redbot.core import commands, Config, checks from redbot.core.bot import Red from . import utils @@ -17,6 +17,7 @@ class TriviaInterfaceCog(commands.Cog): self.config.register_guild( join_timeout=30, guess_timeout=60, + round_count=10, total_scores={}, high_scores={}, ) @@ -32,24 +33,68 @@ class TriviaInterfaceCog(commands.Cog): self.active_games_per_channel[channel.id] = game return game - @commands.command(aliases=["mctrivia", "mct"]) + @commands.group(aliases=["mctrivia", "mct"], invoke_without_command=True) @guild_only() - async def minecrafttrivia(self, ctx: commands.GuildContext, action: str = "new"): + async def minecrafttrivia(self, ctx: commands.GuildContext): """Starts a game of minecraft trivia""" game = self.get_game(ctx.channel) - if action == "new": - if game: - return await ctx.send("Game already started.") - game = self.create_game(ctx.bot, ctx.channel) - await game.start_signup() - elif action[:4] == "high": - high_scores = await self.config.guild(ctx.guild).high_scores() - await ctx.send(embed=discord.Embed( - title=f"MC Trivia Highscores for {ctx.guild.name}", - description=utils.format_leaderboard(utils.create_leaderboard(high_scores)))) - elif action[:4] == "lead": - total_scores = await self.config.guild(ctx.guild).total_scores() - await ctx.send(embed=discord.Embed( - title=f"MC Trivia Leaderboard for {ctx.guild.name}", - description=utils.format_leaderboard(utils.create_leaderboard(total_scores)) - )) + if game: + return await ctx.send("Game already started.") + game = self.create_game(ctx.bot, ctx.channel) + await game.start_signup() + + @minecrafttrivia.group(aliases=["config"], invoke_without_command=True) + @guild_only() + @checks.admin() + async def set(self, ctx: commands.GuildContext): + await ctx.send("Available config options: join_timeout guess_timeout round_count") + + @set.command(aliases=["join"]) + @guild_only() + @checks.admin() + async def join_timeout(self, ctx: commands.GuildContext, to: int = None): + c = self.config.guild(ctx.guild) + if to: + await c.join_timeout.set(to) + await ctx.send(f"Set `join_timeout` to `{to}`") + else: + await ctx.send(f"`join_timeout` is `{await c.join_timeout()}`") + + @set.command(aliases=["guess"]) + @guild_only() + @checks.admin() + async def guess_timeout(self, ctx: commands.GuildContext, to: int = None): + c = self.config.guild(ctx.guild) + if to: + await c.guess_timeout.set(to) + await ctx.send(f"Set `guess_timeout` to `{to}`") + else: + await ctx.send(f"`guess_timeout` is `{await c.guess_timeout()}`") + + @set.command(aliases=["rounds"]) + @guild_only() + @checks.admin() + async def round_count(self, ctx: commands.GuildContext, to: int = None): + c = self.config.guild(ctx.guild) + if to: + await c.round_count.set(to) + await ctx.send(f"Set `round_count` to `{to}`") + else: + await ctx.send(f"`round_count` is `{await c.round_count()}`") + + @minecrafttrivia.command(aliases=["high"]) + @guild_only() + async def highscore(self, ctx: commands.GuildContext): + high_scores = await self.config.guild(ctx.guild).high_scores() + await ctx.send(embed=discord.Embed( + title=f"MC Trivia Highscores for {ctx.guild.name}", + description=utils.format_leaderboard(utils.create_leaderboard(high_scores)))) + + @minecrafttrivia.command(aliases=["lead", "total"]) + @guild_only() + async def leaderboard(self, ctx: commands.GuildContext): + total_scores = await self.config.guild(ctx.guild).total_scores() + await ctx.send(embed=discord.Embed( + title=f"MC Trivia Leaderboard for {ctx.guild.name}", + description=utils.format_leaderboard(utils.create_leaderboard(total_scores)) + )) |