|
|
|
import logging
|
|
|
|
|
|
|
|
import discord
|
|
|
|
|
|
|
|
log = logging.getLogger("red.fox_v3.werewolf.player")
|
|
|
|
|
|
|
|
|
|
|
|
class Player:
|
|
|
|
"""
|
|
|
|
Base player class for Werewolf game
|
|
|
|
"""
|
|
|
|
|
|
|
|
def __init__(self, member: discord.Member):
|
|
|
|
self.member = member
|
|
|
|
self.mention = member.mention
|
|
|
|
self.role = None
|
|
|
|
self.id = None
|
|
|
|
|
|
|
|
self.alive = True
|
|
|
|
self.muted = False
|
|
|
|
self.protected = False
|
|
|
|
|
|
|
|
def __repr__(self):
|
|
|
|
return f"{self.__class__.__name__}({self.member})"
|
|
|
|
|
|
|
|
async def assign_role(self, role):
|
|
|
|
"""
|
|
|
|
Give this player a role
|
|
|
|
"""
|
|
|
|
role.player = self
|
|
|
|
self.role = role
|
|
|
|
|
|
|
|
async def assign_id(self, target_id):
|
|
|
|
self.id = target_id
|
|
|
|
|
|
|
|
async def send_dm(self, message):
|
|
|
|
try:
|
|
|
|
await self.member.send(message) # Lets ToDo embeds later
|
|
|
|
except discord.Forbidden:
|
|
|
|
log.info(f"Unable to mention {self.member.__repr__()}")
|
|
|
|
await self.role.game.village_channel.send(
|
|
|
|
f"Couldn't DM {self.mention}, uh oh",
|
|
|
|
allowed_mentions=discord.AllowedMentions(users=[self.member]),
|
|
|
|
)
|
|
|
|
except AttributeError:
|
|
|
|
log.exception("Someone messed up and added a bot to the game (I think)")
|
|
|
|
await self.role.game.village_channel.send(
|
|
|
|
"Someone messed up and added a bot to the game :eyes:"
|
|
|
|
)
|