channel perms

fight-fixes
bobloy 7 years ago
parent c671efd665
commit a10cbafdef

@ -38,6 +38,7 @@ class Game:
self.started = False self.started = False
self.game_over = False self.game_over = False
self.can_vote = False self.can_vote = False
self.used_votes = 0
self.channel_category = None self.channel_category = None
self.village_channel = None self.village_channel = None
@ -61,10 +62,10 @@ class Game:
if len(self.players) != self.roles: if len(self.players) != self.roles:
ctx.send("Player count does not match role count, cannot start") ctx.send("Player count does not match role count, cannot start")
return False return False
# Create category and channel with individual overwrites
overwrite = { overwrite = {
self.guild.default_role: discord.PermissionOverwrite(read_messages=False), self.guild.default_role: discord.PermissionOverwrite(read_messages=False, send_messages=True),
self.guild.me: discord.PermissionOverwrite(read_messages=True) self.guild.me: discord.PermissionOverwrite(read_messages=True, send_messages=True)
} }
self.channel_category = await self.guild.create_category("ww-game", overwrites=overwrite, reason="New game of werewolf") self.channel_category = await self.guild.create_category("ww-game", overwrites=overwrite, reason="New game of werewolf")
@ -126,11 +127,18 @@ class Game:
async def _at_day_start(self): # ID 1 async def _at_day_start(self): # ID 1
if self.game_over: if self.game_over:
return return
await self.village_channel.send("The sun rises on a new day in the village")
await self.day_perms(self.village_channel)
await self._notify(1) await self._notify(1)
self.can_vote = True self.can_vote = True
asyncio.sleep(240) # 4 minute days asyncio.sleep(240) # 4 minute days
if not self.can_vote or self.game_over:
return
await self._at_day_end() await self._at_day_end()
async def _at_voted(self, target): # ID 2 async def _at_voted(self, target): # ID 2
@ -139,6 +147,48 @@ class Game:
data = {"player": target} data = {"player": target}
await self._notify(2, data) await self._notify(2, data)
self.used_votes += 1
await self.all_but_perms(self.village_channel, target)
await self.village_channel.send("{} will be put to trial and has 30 seconds to defend themselves".format(target.mention))
asyncio.sleep(30)
await self.village_channel.set_permissions(target, read_messages=True)
message = await self.village_channel.send("Everyone will now vote whether to lynch {}\n👍 to save, 👎 to lynch\n*Majority rules, no-lynch on ties, vote for both or neither to abstain, 15 seconds to vote*".format(target.mention))
await self.village_channel.add_reaction("👍")
await self.village_channel.add_reaction("👎")
asyncio.sleep(15)
reaction_list = message.reactions
up_votes = sum(p.emoji == "👍" and not p.me for p in reaction_list)
down_votes = sum(p.emoji == "👎" and not p.me for p in reaction_list)
if len(down_votes)>len(up_votes):
embed=discord.Embed(title="Vote Results", color=0xff0000)
else:
embed=discord.Embed(title="Vote Results", color=0x80ff80)
embed.add_field(name="👎", value="**{}**".format(len(up_votes)), inline=True)
embed.add_field(name="👍", value="**{}**".format(len(down_votes)), inline=True)
await self.village_channel.send(embed=embed)
if len(down_votes)>len(up_votes):
await self.village_channel.send("Voted to lynch {}!".format(target.mention))
await self.kill(target)
self.can_vote = False
elif self.used_votes >= 3:
self.can_vote = False
if not self.can_vote:
await self._at_day_end()
async def _at_kill(self, target): # ID 3 async def _at_kill(self, target): # ID 3
if self.game_over: if self.game_over:
return return
@ -154,10 +204,13 @@ class Game:
async def _at_day_end(self): # ID 5 async def _at_day_end(self): # ID 5
if self.game_over: if self.game_over:
return return
await self._notify(5)
self.can_vote = False self.can_vote = False
await self.night_perms(self.village_channel)
await self.village_channel.send("**The sun sets on the village...**")
await self._notify(5)
asyncio.sleep(30) asyncio.sleep(30)
await self._at_night_start() await self._at_night_start()
@ -195,7 +248,6 @@ class Game:
for vote_group in vote_order: for vote_group in vote_order:
tasks.append(asyncio.ensure_future(vote_group.on_event(event, data)) tasks.append(asyncio.ensure_future(vote_group.on_event(event, data))
# self.loop.create_task(role.on_event(event))
self.loop.run_until_complete(asyncio.gather(*tasks)) self.loop.run_until_complete(asyncio.gather(*tasks))
# Run same-priority task simultaneously # Run same-priority task simultaneously
@ -291,7 +343,16 @@ class Game:
Attempt to kill a target Attempt to kill a target
Source allows admin override Source allows admin override
Be sure to remove permissions appropriately Be sure to remove permissions appropriately
Important to finish execution before triggering notify
"""
pass
async def lynch(self, target):
"""
Attempt to lynch a target
Important to finish execution before triggering notify
""" """
pass
async def get_roles(self, game_code=None): async def get_roles(self, game_code=None):
if game_code: if game_code:
@ -305,3 +366,21 @@ class Game:
if not self.roles: if not self.roles:
return False return False
async def night_perms(self, channel):
await channel.set_permissions(self.guild.default_role, read_messages=False, send_messages=False)
async def day_perms(self, channel):
await channel.set_permissions(self.guild.default_role, read_messages=False)
async def speech_perms(self, channel, member, undo=False):
if undo:
await channel.set_permissions(self.guild.default_role, read_messages=False)
await channel.set_permissions(member, read_messages=True)
elif:
await channel.set_permissions(self.guild.default_role, read_messages=False, send_messages=False)
await channel.set_permissions(member, read_messages=True, send_messages=True)
async def normal_perms(self, channel, member_list):
await channel.set_permissions(self.guild.default_role, read_messages=False)
for member in member_list:
await channel.set_permissions(member, read_messages=True)

Loading…
Cancel
Save