class Player: @staticmethod async def make(member, game): p = Player() p.member = member p.dm = member.dm_channel or await member.create_dm() p.game = game return p @staticmethod def swap(player_A, player_B): player_A.day_role, player_B.day_role = player_B.day_role, player_A.day_role def setRole(self, role): self.night_role = role self.day_role = role def name(self): return self.member.name def __repr__(self): return self.name() def other(self): return [p for p in self.game.player_list if p != self] async def send(self, message): await self.dm.send(message) async def ask_choice(self, options): await self.send('\n'.join( "(" + str(i) + ") " + str(options[i]) for i in range(len(options)) )) async def receive_choice(self, options): def check(choice): return choice.channel == self.dm and choice.content.isdigit() and 0 <= int(choice.content) < len(options) return int((await self.game.bot.wait_for('message', timeout=30.0, check = check)).content) async def get_choice(self, options): await self.ask_choice(options) return await self.receive_choice(options) async def cast_vote(self, options): self.vote = options[await self.get_choice(options)] class No_player(Player): def __init__(self): self.day_role = No_role() def name(self): return "no one" def __str__(self): return self.name()