You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Fox-V3/werewolf/Game.py

101 lines
2.2 KiB

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