import logging import random import discord from werewolf.listener import wolflistener from werewolf.votegroup import VoteGroup log = logging.getLogger("red.fox_v3.werewolf.votegroup.wolfvote") class WolfVote(VoteGroup): """ Werewolf implementation of base VoteGroup class """ alignment = 2 # 1: Town, 2: Werewolf, 3: Neutral channel_id = "werewolves" kill_messages = [ "**{ID}** - {target} was mauled by wolves", "**{ID}** - {target} was found torn to shreds", ] def __init__(self, game, channel): super().__init__(game, channel) self.killer = None # Added killer @wolflistener("at_night_start", priority=2) async def _at_night_start(self): await super()._at_night_start() mention_list = " ".join(player.mention for player in self.players) if mention_list != "": await self.channel.send(mention_list) self.killer = random.choice(self.players) await self.channel.send( f"{self.killer.member.display_name} has been selected as tonight's killer" ) @wolflistener("at_night_end", priority=5) async def _at_night_end(self): if self.channel is None: return target_id = None vote_list = list(self.vote_results.values()) if vote_list: target_id = max(set(vote_list), key=vote_list.count) log.debug(f"Target id: {target_id}\nKiller: {self.killer.member.display_name}") if target_id is not None and self.killer: await self.game.kill(target_id, self.killer, random.choice(self.kill_messages)) await self.channel.send( "*{} has left to complete the kill...*".format(self.killer.member.display_name) ) else: await self.channel.send("*No kill will be attempted tonight...*") async def vote(self, target, author, target_id): """ Receive vote from game """ await super().vote(target, author, target_id) await self.channel.send( "{} has voted to kill {}".format(author.mention, target.member.display_name), allowed_mentions=discord.AllowedMentions(everyone=False, users=[author]), )