settings
This commit is contained in:
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…
x
Reference in New Issue
Block a user