import asyncio import discord from datetime import datetime,timedelta from .builder import parse_code class Game: """ Base to host a game of werewolf """ def __init__(self, role_code=None): self.roles = [] self.role_code = role_code if self.role_code: self.get_roles() self.players = [] self.start_vote = 0 self.started = False self.game_over = False self.village_channel = None self.secret_channels = {} async def setup(self, ctx): """ Runs the initial setup 1. Assign Roles 2. Create Channels 2a. Channel Permissions :eyes: 3. Check Initial role setup (including alerts) 4. Start game """ async def _cycle(self): """ Each event calls the next event _at_start() _at_day_start() _at_vote() _at_kill() _at_day_end() _at_night_begin() _at_night_end() and repeat with _at_morning_start() again """ await self._at_start(): async def _at_start(self): async def _at_day_start(self): async def _at_vote(self): async def _at_kill(self): async def _at_day_end(self): async def _at_night_start(self): async def _at_night_end(self): async def join(self, member: discord.Member): """ Joins a game """ if self.started: return "**Game has already started!**" if member in self.players: return "{} is already in the game!".format(member.mention) self.started.append(member) return "{} has been added to the game, total players is **{}**".format(member.mention, len(self.players)) async def get_roles(self, role_code=None): if role_code: self.role_code=role_code if not self.role_code: return False self.roles = await parse_code(self.role_code) if not self.roles: return False