today's progress
p_channels from secret_channels decisions on how to register a channel/votegroup without accidently duplication
This commit is contained in:
		
							parent
							
								
									704d0e0ded
								
							
						
					
					
						commit
						130f11422a
					
				
							
								
								
									
										117
									
								
								werewolf/Game.py
									
									
									
									
									
								
							
							
						
						
									
										117
									
								
								werewolf/Game.py
									
									
									
									
									
								
							| @ -12,14 +12,23 @@ class Game: | |||||||
|     """ |     """ | ||||||
|     Base class to run a single game of Werewolf |     Base class to run a single game of Werewolf | ||||||
|     """ |     """ | ||||||
|  |      | ||||||
|  |     default_secret_channel = { | ||||||
|  |                 "channel": None, | ||||||
|  |                 "players": [], | ||||||
|  |                 "votegroup": None | ||||||
|  |                 } | ||||||
|  |      | ||||||
|     def __new__(cls, game_code): |     def __new__(cls, game_code): | ||||||
|         game_code = ["DefaultWerewolf", "Villager", "Villager""] |         game_code = ["DefaultWerewolf", "Villager", "Villager""] | ||||||
|         return Game(game_code) |         return Game(game_code) | ||||||
| 
 | 
 | ||||||
|     def __init__(self, game_code): |     def __init__(self, guild, game_code): | ||||||
|         self.roles = [] |         self.guild = guild | ||||||
|         self.game_code = game_code |         self.game_code = game_code | ||||||
|          |          | ||||||
|  |         self.roles = [] | ||||||
|  |          | ||||||
|         if self.game_code: |         if self.game_code: | ||||||
|             self.get_roles() |             self.get_roles() | ||||||
|          |          | ||||||
| @ -30,9 +39,11 @@ class Game: | |||||||
|         self.game_over = False |         self.game_over = False | ||||||
|         self.can_vote = False |         self.can_vote = False | ||||||
|          |          | ||||||
|  |         self.channel_category = None | ||||||
|         self.village_channel = None |         self.village_channel = None | ||||||
|         self.secret_channels = {} |                  | ||||||
|         self.vote_groups = [] |         self.p_channels = {} | ||||||
|  |         self.vote_groups = {} | ||||||
|          |          | ||||||
|         self.loop = asyncio.get_event_loop() |         self.loop = asyncio.get_event_loop() | ||||||
|          |          | ||||||
| @ -48,16 +59,51 @@ class Game: | |||||||
|         4. Start game |         4. Start game | ||||||
|         """ |         """ | ||||||
|         if len(self.players) != self.roles: |         if len(self.players) != self.roles: | ||||||
|             ctx.send("Players does not match roles, cannot start") |             ctx.send("Player count does not match role count, cannot start") | ||||||
|             return False |             return False | ||||||
|          |          | ||||||
|  |         overwrite = { | ||||||
|  |                     self.guild.default_role: discord.PermissionOverwrite(read_messages=False), | ||||||
|  |                     self.guild.me: discord.PermissionOverwrite(read_messages=True) | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|  |         self.channel_category = await self.guild.create_category("ww-game", overwrites=overwrite, reason="New game of werewolf") | ||||||
|  |          | ||||||
|  |         for player in self.players: | ||||||
|  |             overwrite[player.member] = discord.PermissionOverwrite(read_messages=True) | ||||||
|  |          | ||||||
|  |         self.village_channel = await self.guild.create_text_channel("Village Square", overwrites=overwrite, reason="New game of werewolf", category=self.channel_category) | ||||||
|  |          | ||||||
|  |         # Assuming everything worked so far | ||||||
|  |         await self._at_day_start() # This will queue channels and votegroups to be made | ||||||
|  |          | ||||||
|  |         for channel_id in self.p_channels: | ||||||
|  |             overwrite = { | ||||||
|  |                 self.guild.default_role: discord.PermissionOverwrite(read_messages=False), | ||||||
|  |                 self.guild.me: discord.PermissionOverwrite(read_messages=True) | ||||||
|  |                 } | ||||||
|  |                  | ||||||
|  |             for member in self.p_channels[channel_id]["players"]: | ||||||
|  |                 overwrite[member] = discord.PermissionOverwrite(read_messages=True) | ||||||
|  |                  | ||||||
|  |             channel =  await self.guild.create_text_channel(channel_id, overwrites=overwrite, reason="Werewolf secret channel", category=self.channel_category) | ||||||
|  |              | ||||||
|  |             self.p_channels[channel_id]["channel"] = channel | ||||||
|  |              | ||||||
|  |             if self.p_channels[channel_id]["votegroup"] is not None: | ||||||
|  |                 vote_group = self.p_channels[channel_id]["votegroup"](self, channel) | ||||||
|  |                  | ||||||
|  |                 await vote_group.register_player() | ||||||
|  |                 self.vote_groups[channel_id] = self.p_channels[channel_id]["votegroup"](self, channel) | ||||||
|  |                  | ||||||
|  |          | ||||||
|     ############START Notify structure############ |     ############START Notify structure############ | ||||||
|     async def _cycle(self): |     async def _cycle(self): | ||||||
|         """ |         """ | ||||||
|         Each event calls the next event |         Each event calls the next event | ||||||
|          |          | ||||||
|         _at_start() |  | ||||||
|          |          | ||||||
|  | 
 | ||||||
|         _at_day_start() |         _at_day_start() | ||||||
|             _at_voted() |             _at_voted() | ||||||
|                 _at_kill() |                 _at_kill() | ||||||
| @ -65,17 +111,17 @@ class Game: | |||||||
|         _at_night_begin() |         _at_night_begin() | ||||||
|         _at_night_end() |         _at_night_end() | ||||||
|          |          | ||||||
|         and repeat with _at_morning_start() again |         and repeat with _at_day_start() again | ||||||
|         """ |         """ | ||||||
|         await self._at_start(): |         await self._at_day_start(): | ||||||
|      |      | ||||||
|     async def _at_game_start(self):  # ID 0 |     async def _at_game_start(self):  # ID 0 | ||||||
|         if self.game_over: |         if self.game_over: | ||||||
|             return |             return | ||||||
|         await self._notify(0) |         await self.village_channel.send("Game is starting, please wait for setup to complete") | ||||||
|          |          | ||||||
|         asyncio.sleep(60) |         await self._notify(0) | ||||||
|         await self._at_day_start() | 
 | ||||||
|          |          | ||||||
|     async def _at_day_start(self):  # ID 1 |     async def _at_day_start(self):  # ID 1 | ||||||
|         if self.game_over: |         if self.game_over: | ||||||
| @ -90,17 +136,20 @@ class Game: | |||||||
|     async def _at_voted(self, target):  # ID 2 |     async def _at_voted(self, target):  # ID 2 | ||||||
|         if self.game_over: |         if self.game_over: | ||||||
|             return |             return | ||||||
|         await self._notify(2, target) |         data = {"player": target} | ||||||
|  |         await self._notify(2, data) | ||||||
|      |      | ||||||
|     async def _at_kill(self, target):  # ID 3 |     async def _at_kill(self, target):  # ID 3 | ||||||
|         if self.game_over: |         if self.game_over: | ||||||
|             return |             return | ||||||
|         await self._notify(3, target) |         data = {"player": target} | ||||||
|  |         await self._notify(3, data) | ||||||
|      |      | ||||||
|     async def _at_hang(self, target):  # ID 4 |     async def _at_hang(self, target):  # ID 4 | ||||||
|         if self.game_over: |         if self.game_over: | ||||||
|             return |             return | ||||||
|         await self._notify(4, target) |         data = {"player": target} | ||||||
|  |         await self._notify(4, data) | ||||||
|          |          | ||||||
|     async def _at_day_end(self):  # ID 5 |     async def _at_day_end(self):  # ID 5 | ||||||
|         if self.game_over: |         if self.game_over: | ||||||
| @ -142,7 +191,7 @@ class Game: | |||||||
|             for role in role_order: |             for role in role_order: | ||||||
|                 tasks.append(asyncio.ensure_future(role.on_event(event, data)) |                 tasks.append(asyncio.ensure_future(role.on_event(event, data)) | ||||||
|             # VoteGroup priorities     |             # VoteGroup priorities     | ||||||
|             vote_order = [votes for votes in self.vote_groups if votes.action_list[event][1]==i] |             vote_order = [votes for votes in self.vote_groups.values() if votes.action_list[event][1]==i] | ||||||
|             for vote_group in vote_order: |             for vote_group in vote_order: | ||||||
|                 tasks.append(asyncio.ensure_future(vote_group.on_event(event, data)) |                 tasks.append(asyncio.ensure_future(vote_group.on_event(event, data)) | ||||||
|                  |                  | ||||||
| @ -163,17 +212,22 @@ class Game: | |||||||
|             embed.add_field(name="ID# **{}**".format(i), value="{} {}".format(status, player.member.display_name), inline=True) |             embed.add_field(name="ID# **{}**".format(i), value="{} {}".format(status, player.member.display_name), inline=True) | ||||||
|    |    | ||||||
|         return await channel.send(embed=embed) |         return await channel.send(embed=embed) | ||||||
| 
 |  | ||||||
|     async def register_channel(self, channel_id, votegroup = None): |  | ||||||
|         # Create channel, set permissions, register votegroup |  | ||||||
|         if channel_id not in self.secret_channels: |  | ||||||
|              |  | ||||||
|          |  | ||||||
|     async def register_vote_group(self, channel_id, votegroup = None): |  | ||||||
|         # Register channel and assign passed votegroup to it |  | ||||||
|         if channel_id not in self.secret_channels: |  | ||||||
|             await self.register_channel(channel_id, votegroup(self)) |  | ||||||
|      |      | ||||||
|  |      | ||||||
|  |     async def register_channel(self, channel_id, player, votegroup=None): | ||||||
|  |         """ | ||||||
|  |         Queue a channel to be created by game_start | ||||||
|  |         """ | ||||||
|  |         if channel_id not in self.p_channels: | ||||||
|  |             self.p_channels[channel_id] = self.default_secret_channel.copy() | ||||||
|  | 
 | ||||||
|  |         await asyncio.sleep(1) | ||||||
|  |          | ||||||
|  |         self.p_channels[channel_id]["players"].append(player) | ||||||
|  |          | ||||||
|  |         if votegroup: | ||||||
|  |             self.p_channels[channel_id]["votegroup"] = votegroup | ||||||
|  | 
 | ||||||
|     async def join(self, member: discord.Member, channel: discord.Channel): |     async def join(self, member: discord.Member, channel: discord.Channel): | ||||||
|         """ |         """ | ||||||
|         Have a member join a game |         Have a member join a game | ||||||
| @ -201,13 +255,6 @@ class Game: | |||||||
| 
 | 
 | ||||||
|         if self.started: |         if self.started: | ||||||
|             await self.kill() |             await self.kill() | ||||||
|          |  | ||||||
|         if member in self.players: |  | ||||||
|             return "{} is already in the game!".format(member.mention) |  | ||||||
|          |  | ||||||
|         self.started.append(member) |  | ||||||
|          |  | ||||||
|         channel.send("{} has been added to the game, total players is **{}**".format(member.mention, len(self.players))) |  | ||||||
|      |      | ||||||
|     async def vote(self, author, id, channel): |     async def vote(self, author, id, channel): | ||||||
|         """ |         """ | ||||||
| @ -222,15 +269,14 @@ class Game: | |||||||
|         if not player.alive: |         if not player.alive: | ||||||
|             channel.send("Corpses can't vote") |             channel.send("Corpses can't vote") | ||||||
|             return |             return | ||||||
|          |  | ||||||
|         if channel in self.secret_channels.values(): |  | ||||||
|              |              | ||||||
|         if channel == self.village_channel: |         if channel == self.village_channel: | ||||||
|             if not self.can_vote: |             if not self.can_vote: | ||||||
|                 channel.send("Voting is not allowed right now") |                 channel.send("Voting is not allowed right now") | ||||||
|                 return |                 return | ||||||
|                  |                  | ||||||
|          |         if channel in self.p_channels.values(): | ||||||
|  | 
 | ||||||
|         try: |         try: | ||||||
|             target = self.players[id] |             target = self.players[id] | ||||||
|         except IndexError: |         except IndexError: | ||||||
| @ -244,6 +290,7 @@ class Game: | |||||||
|         """ |         """ | ||||||
|         Attempt to kill a target |         Attempt to kill a target | ||||||
|         Source allows admin override |         Source allows admin override | ||||||
|  |         Be sure to remove permissions appropriately | ||||||
|         """ |         """ | ||||||
|          |          | ||||||
|     async def get_roles(self, game_code=None): |     async def get_roles(self, game_code=None): | ||||||
|  | |||||||
| @ -67,7 +67,6 @@ class Role: | |||||||
|         self.game = game |         self.game = game | ||||||
|         self.player = None |         self.player = None | ||||||
|         self.blocked = False |         self.blocked = False | ||||||
|         self.secret_channel = None |  | ||||||
|         self.properties = {}  # Extra data for other roles (i.e. arsonist) |         self.properties = {}  # Extra data for other roles (i.e. arsonist) | ||||||
|          |          | ||||||
|     async def on_event(self, event, data): |     async def on_event(self, event, data): | ||||||
| @ -103,7 +102,7 @@ class Role: | |||||||
|      |      | ||||||
|     async def _at_game_start(self, data=None): |     async def _at_game_start(self, data=None): | ||||||
|         if self.channel_id: |         if self.channel_id: | ||||||
|             self.properties["channel"] = await self.game.register_channel(self.channel_id) |             await self.game.register_channel(self.channel_id, self) | ||||||
|          |          | ||||||
|         await self.player.send_dm(self.game_start_message) #Maybe embeds eventually |         await self.player.send_dm(self.game_start_message) #Maybe embeds eventually | ||||||
|          |          | ||||||
|  | |||||||
| @ -33,11 +33,11 @@ class VanillaWerewolf(Role): | |||||||
|             (self._at_night_end, 5) |             (self._at_night_end, 5) | ||||||
|             ] |             ] | ||||||
|              |              | ||||||
|     def __init__(self, game): |     # def __init__(self, game): | ||||||
|         self.game = game |         # self.game = game | ||||||
|         self.player = None |         # self.player = None | ||||||
|         self.blocked = False |         # self.blocked = False | ||||||
|         self.properties = {}  # Extra data for other roles (i.e. arsonist) |         # self.properties = {}  # Extra data for other roles (i.e. arsonist) | ||||||
|      |      | ||||||
|     # async def on_event(self, event, data): |     # async def on_event(self, event, data): | ||||||
|         # """ |         # """ | ||||||
| @ -70,9 +70,11 @@ class VanillaWerewolf(Role): | |||||||
|         return "Werewolf" |         return "Werewolf" | ||||||
|      |      | ||||||
|     async def _at_game_start(self, data=None): |     async def _at_game_start(self, data=None): | ||||||
|         # super()._at_game_start(data)  # Registers channel |         if self.channel_id: | ||||||
|  |             await self.game.register_channel(self.channel_id, self, WolfVote)  # Add VoteGroup WolfVote | ||||||
|  |          | ||||||
|  |         await self.player.send_dm(self.game_start_message) | ||||||
|          |          | ||||||
|         await self.game.register_vote_group(self.channel_id, WolfVote) |  | ||||||
| 
 | 
 | ||||||
|     # async def _at_day_start(self, data=None): |     # async def _at_day_start(self, data=None): | ||||||
|         # super()._at_day_start(data) |         # super()._at_day_start(data) | ||||||
|  | |||||||
| @ -11,6 +11,11 @@ class Villager(Role): | |||||||
|     allignment = 0      # 1: Town, 2: Werewolf, 3: Neutral |     allignment = 0      # 1: Town, 2: Werewolf, 3: Neutral | ||||||
|     channel_id = ""     # Empty for no private channel |     channel_id = ""     # Empty for no private channel | ||||||
|     unique = False      # Only one of this role per game |     unique = False      # Only one of this role per game | ||||||
|  |     game_start_message=""" | ||||||
|  |             Your role is **Villager** | ||||||
|  |             You win by lynching all evil in the town | ||||||
|  |             Lynch players during the day with `[p]ww lynch <ID>` | ||||||
|  |             """ | ||||||
|     action_list = [ |     action_list = [ | ||||||
|             (self._at_game_start, 0),  # (Action, Priority) |             (self._at_game_start, 0),  # (Action, Priority) | ||||||
|             (self._at_day_start, 0), |             (self._at_day_start, 0), | ||||||
| @ -22,63 +27,64 @@ class Villager(Role): | |||||||
|             (self._at_night_end, 0) |             (self._at_night_end, 0) | ||||||
|             ] |             ] | ||||||
|              |              | ||||||
|     def __init__(self, game): |     # def __init__(self, game): | ||||||
|         self.game = game |         # self.game = game | ||||||
|         self.player = None |         # self.player = None | ||||||
|         self.blocked = False |         # self.blocked = False | ||||||
|         self.properties = {}  # Extra data for other roles (i.e. arsonist) |         # self.secret_channel = None | ||||||
|  |         # self.properties = {}  # Extra data for other roles (i.e. arsonist) | ||||||
|          |          | ||||||
|     async def on_event(self, event, data): |     # async def on_event(self, event, data): | ||||||
|         """ |         # """ | ||||||
|         See Game class for event guide |         # See Game class for event guide | ||||||
|         """ |         # """ | ||||||
|              |              | ||||||
|         await action_list[event][0](data) |         # await action_list[event][0](data) | ||||||
|          |          | ||||||
|          |          | ||||||
|     async def assign_player(self, player): |     # async def assign_player(self, player): | ||||||
|         """ |         # """ | ||||||
|         Give this role a player |         # Give this role a player | ||||||
|         Can be used after the game has started  (Cult, Mason, other role swap) |         # Can be used after the game has started  (Cult, Mason, other role swap) | ||||||
|         """ |         # """ | ||||||
| 
 | 
 | ||||||
|         player.role = self |         # player.role = self | ||||||
|         self.player = player |         # self.player = player | ||||||
|      |      | ||||||
|     async def _get_role(self, source=None): |     async def _get_role(self, source=None): | ||||||
|         """ |         """ | ||||||
|         Interaction for powerful access of role |         Interaction for powerful access of role | ||||||
|         Unlikely to be able to deceive this |         Unlikely to be able to deceive this | ||||||
|         """ |         """ | ||||||
|         return "Default" |         return "Villager" | ||||||
|      |      | ||||||
|     async def _see_role(self, source=None): |     async def _see_role(self, source=None): | ||||||
|         """ |         """ | ||||||
|         Interaction for investigative roles. |         Interaction for investigative roles. | ||||||
|         More common to be able to deceive these roles |         More common to be able to deceive these roles | ||||||
|         """ |         """ | ||||||
|         return "Role" |         return "Villager" | ||||||
|      |      | ||||||
|     async def _at_game_start(self, data=None): |     # async def _at_game_start(self, data=None): | ||||||
|         pass |         # pass | ||||||
|          |          | ||||||
|     async def _at_day_start(self, data=None): |     # async def _at_day_start(self, data=None): | ||||||
|         pass |         # pass | ||||||
|          |          | ||||||
|     async def _at_voted(self, target=None): |     # async def _at_voted(self, target=None): | ||||||
|         pass |         # pass | ||||||
|          |          | ||||||
|     async def _at_kill(self, target=None): |     # async def _at_kill(self, target=None): | ||||||
|         pass |         # pass | ||||||
|          |          | ||||||
|     async def _at_hang(self, target=None): |     # async def _at_hang(self, target=None): | ||||||
|         pass |         # pass | ||||||
|          |          | ||||||
|     async def _at_day_end(self): |     # async def _at_day_end(self): | ||||||
|         pass |         # pass | ||||||
|          |          | ||||||
|     async def _at_night_start(self): |     # async def _at_night_start(self): | ||||||
|         pass |         # pass | ||||||
|          |          | ||||||
|     async def _at_night_end(self): |     # async def _at_night_end(self): | ||||||
|         pass |         # pass | ||||||
|  | |||||||
| @ -26,10 +26,10 @@ class VoteGroup: | |||||||
|             ] |             ] | ||||||
|              |              | ||||||
| 
 | 
 | ||||||
|     def __init__(self, game, members): |     def __init__(self, game, channel): | ||||||
|         self.game = game |         self.game = game | ||||||
|         self.members = members |         self.channel = channel | ||||||
|         self.channel = None |         self.players = [] | ||||||
|         self.vote_results = {} |         self.vote_results = {} | ||||||
|         self.properties = {}  # Extra data for other options |         self.properties = {}  # Extra data for other options | ||||||
|          |          | ||||||
| @ -42,8 +42,7 @@ class VoteGroup: | |||||||
|         await action_list[event][0](data) |         await action_list[event][0](data) | ||||||
| 
 | 
 | ||||||
|     async def _at_game_start(self, data=None): |     async def _at_game_start(self, data=None): | ||||||
|         if self.channel_id: |         pass | ||||||
|             self.channel = await self.game.register_channel(self.channel_id) |  | ||||||
| 
 | 
 | ||||||
|     async def _at_day_start(self, data=None): |     async def _at_day_start(self, data=None): | ||||||
|         pass |         pass | ||||||
| @ -52,11 +51,13 @@ class VoteGroup: | |||||||
|         pass |         pass | ||||||
|          |          | ||||||
|     async def _at_kill(self, data=None): |     async def _at_kill(self, data=None): | ||||||
|         pass |         if data["player"] in self.players: | ||||||
|  |             self.players.pop(data["player"]) | ||||||
|          |          | ||||||
|     async def _at_hang(self, data=None): |     async def _at_hang(self, data=None): | ||||||
|         pass |         if data["player"] in self.players: | ||||||
|          |             self.players.pop(data["player"]) | ||||||
|  | 
 | ||||||
|     async def _at_day_end(self, data=None): |     async def _at_day_end(self, data=None): | ||||||
|         pass |         pass | ||||||
|          |          | ||||||
| @ -80,18 +81,18 @@ class VoteGroup: | |||||||
|             # Do what you voted on |             # Do what you voted on | ||||||
|             pass |             pass | ||||||
|      |      | ||||||
|     async def register_member(self, member): |     async def register_player(self, player): | ||||||
|         """ |         """ | ||||||
|         Add a member to member list |         Add a player to player list | ||||||
|         """ |         """ | ||||||
|         self.members.append(member) |         self.players.append(player) | ||||||
|      |      | ||||||
|     async def remove_member(self, member): |     async def remove_player(self, player): | ||||||
|         """ |         """ | ||||||
|         Remove a member from member list |         Remove a player from player list | ||||||
|         """ |         """ | ||||||
|         if member in self.members: |         if player.id in self.players: | ||||||
|             self.members.remove(member) |             self.players.remove(player) | ||||||
| 
 | 
 | ||||||
|     async def vote(self, author, id): |     async def vote(self, author, id): | ||||||
|         """ |         """ | ||||||
|  | |||||||
| @ -27,16 +27,17 @@ class WolfVote(VoteGroup): | |||||||
|              |              | ||||||
|      |      | ||||||
|     kill_messages = [ |     kill_messages = [ | ||||||
|         "{target} was attacked by wolves", |         "**{ID}** - {target} was attacked by wolves", | ||||||
|         "{target} was found torn to shreds"] |         "**{ID}** - {target} was found torn to shreds"] | ||||||
|      |      | ||||||
|     def __init__(self, game, members): |     def __init__(self, game, channel): | ||||||
|         self.game = game |         # self.game = game | ||||||
|         self.members = members |         # self.channel = channel | ||||||
|         self.channel = None |         # self.players = [] | ||||||
|         self.vote_results = {} |         # self.vote_results = {} | ||||||
|         self.properties = {}  # Extra data for other options |         # self.properties = {}  # Extra data for other options | ||||||
|         self.killer = None  # Added killer |         self.killer = None  # Added killer | ||||||
|  |         super().__init__(game, channel) | ||||||
|          |          | ||||||
|          |          | ||||||
|     # async def on_event(self, event, data): |     # async def on_event(self, event, data): | ||||||
| @ -57,10 +58,12 @@ class WolfVote(VoteGroup): | |||||||
|         # pass |         # pass | ||||||
|          |          | ||||||
|     # async def _at_kill(self, data=None): |     # async def _at_kill(self, data=None): | ||||||
|         # pass |         # if data["player"] in self.players: | ||||||
|  |             # self.players.pop(data["player"]) | ||||||
|          |          | ||||||
|     # async def _at_hang(self, data=None): |     # async def _at_hang(self, data=None): | ||||||
|         # pass |         # if data["player"] in self.players: | ||||||
|  |             # self.players.pop(data["player"]) | ||||||
|          |          | ||||||
|     # async def _at_day_end(self, data=None): |     # async def _at_day_end(self, data=None): | ||||||
|         # pass |         # pass | ||||||
| @ -71,7 +74,7 @@ class WolfVote(VoteGroup): | |||||||
|          |          | ||||||
|         await self.game.generate_targets(self.channel) |         await self.game.generate_targets(self.channel) | ||||||
|          |          | ||||||
|         self.killer = random.choice(self.members) |         self.killer = random.choice(self.players) | ||||||
|          |          | ||||||
|         await channel.send("{} has been selected as tonight's killer") |         await channel.send("{} has been selected as tonight's killer") | ||||||
|          |          | ||||||
| @ -93,4 +96,4 @@ class WolfVote(VoteGroup): | |||||||
|         # Receive vote from game |         # Receive vote from game | ||||||
|         # """ |         # """ | ||||||
|          |          | ||||||
|         # self.vote_results[author.id] = id |         # self.vote_results[author.id] = id | ||||||
|  | |||||||
| @ -11,7 +11,7 @@ from .game import Game | |||||||
| 
 | 
 | ||||||
| class Werewolf: | class Werewolf: | ||||||
|     """ |     """ | ||||||
|     Base to host werewolf on a server |     Base to host werewolf on a guild | ||||||
|     """ |     """ | ||||||
| 
 | 
 | ||||||
|     def __init__(self, bot): |     def __init__(self, bot): | ||||||
| @ -25,7 +25,7 @@ class Werewolf: | |||||||
|         self.config.register_global(**default_global) |         self.config.register_global(**default_global) | ||||||
|         self.config.register_guild(**default_guild) |         self.config.register_guild(**default_guild) | ||||||
|          |          | ||||||
|         self.games = {}  # Active games stored here, id is per server |         self.games = {}  # Active games stored here, id is per guild | ||||||
|      |      | ||||||
|     @commands.group() |     @commands.group() | ||||||
|     async def ww(self, ctx: commands.Context): |     async def ww(self, ctx: commands.Context): | ||||||
| @ -44,7 +44,7 @@ class Werewolf: | |||||||
|         game = self._get_game(ctx.guild, game_code) |         game = self._get_game(ctx.guild, game_code) | ||||||
|          |          | ||||||
|         if not game: |         if not game: | ||||||
|             ctx.send(" |             ctx.send("Failed to start a new game") | ||||||
|          |          | ||||||
|     @ww.command() |     @ww.command() | ||||||
|     async def join(self, ctx): |     async def join(self, ctx): | ||||||
| @ -84,14 +84,14 @@ class Werewolf: | |||||||
|         if channel is game.village_channel:  |         if channel is game.village_channel:  | ||||||
|             await game.vote(ctx.author, id, channel) |             await game.vote(ctx.author, id, channel) | ||||||
|          |          | ||||||
|         if channel in (c for id,c in game.secret_channels.items()): |         if channel in (c["channel"] for c in game.p_channels.values()): | ||||||
|             await game.vote(ctx.author, id, channel) |             await game.vote(ctx.author, id, channel) | ||||||
| 
 | 
 | ||||||
|     def _get_game(self, guild, game_code = None): |     def _get_game(self, guild, game_code = None): | ||||||
|         if guild.id not in self.games: |         if guild.id not in self.games: | ||||||
|             if not game_code: |             if not game_code: | ||||||
|                 return None |                 return None | ||||||
|             self.games[guild.id] = Game(game_code) |             self.games[guild.id] = Game(guild, game_code) | ||||||
| 
 | 
 | ||||||
|         return self.games[guild.id] |         return self.games[guild.id] | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Bobloy
						Bobloy