diff --git a/GameFiles/Game.py b/GameFiles/Game.py index 71f3789..7ad53e7 100644 --- a/GameFiles/Game.py +++ b/GameFiles/Game.py @@ -294,21 +294,30 @@ class Game: } self.config["observer_chan"] = (await game_category.create_text_channel("observers", overwrites = perms, position = 4)).id logger.debug(f"[{self.guild}] Created observers channel") + tasks.append(asyncio.create_task(create_observers_chan())) - async def create_player_channel(player: discord.Member, position: int): - perms = { - self.guild.default_role: discord.PermissionOverwrite(read_messages = False), - player: discord.PermissionOverwrite(read_messages = True), - gm_role: discord.PermissionOverwrite(read_messages = True), - observer_role: discord.PermissionOverwrite(read_messages = True, send_messages = False), - } - player_channel = await game_category.create_text_channel(player.name, overwrites = perms, position = position) - self.config["player_info"][str(player.id)]["channel"] = player_channel.id - logger.debug(f"[{self.guild.name}] Created channel for player {player.name}") - asyncio.create_task(player_channel.send(f"Hello! This is your private channel.\nIn here you can cast your votes, interact with the <@&{self.get_gm_role_id()}>, and write freely.\nHave a nice game!", allowed_mentions = discord.AllowedMentions(roles = True))) - for i, player in enumerate(player_role.members): - tasks.append(asyncio.create_task(create_player_channel(player, 5 + i))) + async def create_player_channels(): + create_player_channel_tasks = [] + + async def create_player_channel(player: discord.Member): + perms = { + self.guild.default_role: discord.PermissionOverwrite(read_messages = False), + player: discord.PermissionOverwrite(read_messages = True), + gm_role: discord.PermissionOverwrite(read_messages = True), + observer_role: discord.PermissionOverwrite(read_messages = True, send_messages = False), + } + player_channel = await game_category.create_text_channel(player.name, overwrites = perms) + self.config["player_info"][str(player.id)]["channel"] = player_channel.id + logger.debug(f"[{self.guild.name}] Created channel for player {player.name}") + asyncio.create_task(player_channel.send(f"Hello! This is your private channel.\nIn here you can cast your votes, interact with the <@&{self.get_gm_role_id()}>, and write freely.\nHave a nice game!", allowed_mentions = discord.AllowedMentions(roles = True))) + + for player in player_role.members: + create_player_channel_tasks.append(asyncio.create_task(create_player_channel(player))) + await asyncio.wait(create_player_channel_tasks) + logger.debug(f"[{self.guild.name}] Reordering player channels") + await asyncio.wait([asyncio.create_task(self.get_player_channel(player).edit(position = i + 4)) for i, player in enumerate(player_role.members)]) + tasks.append(asyncio.create_task(create_player_channels())) await asyncio.wait(tasks)