pull/5/head
bobloy 7 years ago
parent cca219d20f
commit 8dabc12c97

@ -28,7 +28,7 @@ class Game:
def __init__(self, guild: discord.Guild, role: discord.Role=None, def __init__(self, guild: discord.Guild, role: discord.Role=None,
category: discord.CategoryChannel=None, village: discord.TextChannel=None, category: discord.CategoryChannel=None, village: discord.TextChannel=None,
game_code=None): log_channel: discord.TextChannel=None, game_code=None):
self.guild = guild self.guild = guild
self.game_code = game_code self.game_code = game_code
self.game_role = role self.game_role = role
@ -50,6 +50,7 @@ class Game:
self.channel_category = category # discord.CategoryChannel self.channel_category = category # discord.CategoryChannel
self.village_channel = village # discord.TextChannel self.village_channel = village # discord.TextChannel
self.log_channel = log_channel
self.p_channels = {} # uses default_secret_channel self.p_channels = {} # uses default_secret_channel
self.vote_groups = {} # ID : VoteGroup() self.vote_groups = {} # ID : VoteGroup()
@ -58,20 +59,20 @@ class Game:
self.loop = asyncio.get_event_loop() self.loop = asyncio.get_event_loop()
def __del__(self): # def __del__(self):
""" # """
Cleanup channels as necessary # Cleanup channels as necessary
:return: # :return:
""" # """
#
print("Delete is called") # print("Delete is called")
#
self.game_over = True # self.game_over = True
if self.village_channel: # if self.village_channel:
asyncio.ensure_future(self.village_channel.delete("Werewolf game-over")) # asyncio.ensure_future(self.village_channel.delete("Werewolf game-over"))
#
for c_data in self.p_channels.values(): # for c_data in self.p_channels.values():
asyncio.ensure_future(c_data["channel"].delete("Werewolf game-over")) # asyncio.ensure_future(c_data["channel"].delete("Werewolf game-over"))
async def setup(self, ctx: RedContext): async def setup(self, ctx: RedContext):
""" """
@ -115,16 +116,17 @@ class Game:
self.game_role: discord.PermissionOverwrite(read_messages=True, send_messages=True) self.game_role: discord.PermissionOverwrite(read_messages=True, send_messages=True)
} }
if self.channel_category is None: if self.channel_category is None:
self.channel_category = await self.guild.create_category("ww-game", self.channel_category = await self.guild.create_category("🔴 Werewolf Game (ACTIVE)",
overwrites=overwrite, overwrites=overwrite,
reason="(BOT) New game of werewolf") reason="(BOT) New game of werewolf")
else: else:
await self.channel_category.edit(name="🔴 Werewolf Game (ACTIVE)", reason="(BOT) New game of werewolf")
for target, ow in overwrite.items(): for target, ow in overwrite.items():
await self.channel_category.set_permissions(target=target, await self.channel_category.set_permissions(target=target,
overwrite=ow, overwrite=ow,
reason="(BOT) New game of werewolf") reason="(BOT) New game of werewolf")
if self.village_channel is None: if self.village_channel is None:
self.village_channel = await self.guild.create_text_channel("Village Square", self.village_channel = await self.guild.create_text_channel("village-square",
overwrites=overwrite, overwrites=overwrite,
reason="(BOT) New game of werewolf", reason="(BOT) New game of werewolf",
category=self.channel_category) category=self.channel_category)
@ -744,4 +746,5 @@ class Game:
reason = '(BOT) End of WW game' reason = '(BOT) End of WW game'
await self.village_channel.set_permissions(self.game_role, overwrite=None, reason=reason) await self.village_channel.set_permissions(self.game_role, overwrite=None, reason=reason)
await self.channel_category.set_permissions(self.game_role, overwrite=None, reason=reason) await self.channel_category.set_permissions(self.game_role, overwrite=None, reason=reason)
await self.channel_category.edit(reason=reason, name="Archived Game") await self.channel_category.edit(reason=reason, name="Werewolf Game (INACTIVE)")
# Optional dynamic channels/categories

@ -7,7 +7,6 @@ from redbot.core.bot import Red
from werewolf.builder import GameBuilder from werewolf.builder import GameBuilder
from werewolf.game import Game from werewolf.game import Game
class Werewolf: class Werewolf:
""" """
Base to host werewolf on a guild Base to host werewolf on a guild
@ -87,7 +86,7 @@ class Werewolf:
@commands.guild_only() @commands.guild_only()
@wwset.command(name="logchannel") @wwset.command(name="logchannel")
async def wwset_channel(self, ctx: RedContext, channel: discord.TextChannel): async def wwset_log_channel(self, ctx: RedContext, channel: discord.TextChannel):
""" """
Assign the log channel Assign the log channel
""" """
@ -237,7 +236,6 @@ class Werewolf:
if ctx.guild is not None: if ctx.guild is not None:
await ctx.send("This action is only available in DM's") await ctx.send("This action is only available in DM's")
return return
# DM nonsense, find their game # DM nonsense, find their game
# If multiple games, panic # If multiple games, panic
for game in self.games.values(): for game in self.games.values():
@ -250,38 +248,48 @@ class Werewolf:
await game.choose(ctx, data) await game.choose(ctx, data)
async def _get_game(self, ctx: RedContext, game_code=None): async def _get_game(self, ctx: RedContext, game_code=None):
if ctx.guild is None: guild: discord.Guild = ctx.guild
if guild is None:
# Private message, can't get guild # Private message, can't get guild
await ctx.send("Cannot start game from PM!") await ctx.send("Cannot start game from PM!")
return None return None
if ctx.guild.id not in self.games or self.games[ctx.guild.id].game_over: if guild.id not in self.games or self.games[guild.id].game_over:
await ctx.send("Starting a new game...") await ctx.send("Starting a new game...")
role = None role = None
category = None category = None
channel = None channel = None
log_channel = None log_channel = None
role_id = await self.config.guild(ctx.guild).role_id() role_id = await self.config.guild(guild).role_id()
category_id = await self.config.guild(ctx.guild).category_id() category_id = await self.config.guild(guild).category_id()
channel_id = await self.config.guild(ctx.guild).channel_id() channel_id = await self.config.guild(guild).channel_id()
log_channel_id = await self.config.guild(ctx.guild).log_channel_id() log_channel_id = await self.config.guild(guild).log_channel_id()
if role_id is not None: if role_id is not None:
role = discord.utils.get(ctx.guild.roles, id=role_id) role = discord.utils.get(guild.roles, id=role_id)
if role is None: if role is None:
await ctx.send("Game role is invalid, cannot start new game") await ctx.send("Game Role is invalid, cannot start new game")
return None return None
if category_id is not None: if category_id is not None:
category = discord.utils.get(ctx.guild.categories, id=category_id) category = discord.utils.get(guild.categories, id=category_id)
if role is None: if category is None:
await ctx.send("Game role is invalid, cannot start new game") await ctx.send("Game Category is invalid, cannot start new game")
return None
if channel_id is not None:
channel = discord.utils.get(guild.text_channels, id=channel_id)
if channel is None:
await ctx.send("Village Channel is invalid, cannot start new game")
return None
if log_channel_id is not None:
log_channel = discord.utils.get(guild.text_channels, id=log_channel_id)
if log_channel is None:
await ctx.send("Log Channel is invalid, cannot start new game")
return None return None
self.games[guild.id] = Game(guild, role, category, channel, log_channel, game_code)
return self.games[guild.id]
self.games[ctx.guild.id] = Game(ctx.guild, role, game_code)
return self.games[ctx.guild.id]
async def _game_start(self, game): async def _game_start(self, game):
await game.start() await game.start()

Loading…
Cancel
Save