From f395e3561bc9c6c14ed1ff66ff08c96771ebc609 Mon Sep 17 00:00:00 2001 From: Elnath Date: Tue, 8 Jun 2021 01:54:36 +0200 Subject: [PATCH] Added delete game command --- GameFiles/Game.py | 16 +++++++++++++++- SecretBot.py | 10 ++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/GameFiles/Game.py b/GameFiles/Game.py index 570e2b2..633ced4 100644 --- a/GameFiles/Game.py +++ b/GameFiles/Game.py @@ -31,6 +31,12 @@ class Game: player = player.id return self.config["player_info"][str(player)] + def get_dm_role(self) -> int: + return self.config["dm_role"] + + def get_game_category(self) -> int: + return self.config["category"] + async def start(self, guild: discord.Guild, dm_role: discord.Role, player_role: discord.Role): if self.is_started(): raise ValueError("Game already started") @@ -40,7 +46,6 @@ class Game: self.config["players"] = [member.id for member in player_role.members] self.config["player_info"] = {str(player): {} for player in self.config["players"]} - permissions = { guild.default_role: discord.PermissionOverwrite(send_messages = False), dm_role: discord.PermissionOverwrite(send_messages = True), @@ -81,3 +86,12 @@ class Game: self.config["game_started"] = True self.save_function() + + async def delete(self, guild: discord.Guild): + category = guild.get_channel(self.get_game_category()) + for channel in category.channels: + await channel.delete() + await category.delete() + self.config.clear() + self.config.update(self.new_dict()) + self.save_function() diff --git a/SecretBot.py b/SecretBot.py index f06f95a..264c718 100755 --- a/SecretBot.py +++ b/SecretBot.py @@ -98,6 +98,16 @@ class SecretBot(commands.Cog): await ctx.guild.get_member(self.bot.user.id).add_roles(dm_role) await game.start(ctx.guild, dm_role, player_role) + @commands.command("DeleteGame", help = "Delete a running game and all of its associated channels") + async def delete_game(self, ctx: commands.Context): + game = self.games_file[ctx.guild] + if game.is_started(): + dm_role = discord.Object(game.get_dm_role()) # We need to get the role before the game is deleted + await game.delete(ctx.guild) + await ctx.guild.get_member(self.bot.user.id).remove_roles(dm_role) + else: + await ctx.reply(":x: Game is not running") + if __name__ == '__main__': argparser = argparse.ArgumentParser(description = "Secret Hitler helper bot", formatter_class = argparse.ArgumentDefaultsHelpFormatter)