diff options
| -rw-r--r-- | bot/cogs/jams.py | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/bot/cogs/jams.py b/bot/cogs/jams.py new file mode 100644 index 000000000..c664d759a --- /dev/null +++ b/bot/cogs/jams.py @@ -0,0 +1,72 @@ +import logging + +from discord import PermissionOverwrite, Member, utils +from discord.ext import commands + +from bot.decorators import with_role +from bot.constants import Roles + +log = logging.getLogger(__name__) + +class CodeJams: + """ + A cog for managing the code-jam related parts of our server + """ + + def __init__(self, bot: commands.Bot): + self.bot = bot + + @commands.command() + @with_role(Roles.admin) + async def createteam( + self, ctx: commands.Context, + team_name: str, members: commands.Greedy[Member] + ): + code_jam_category = utils.get(ctx.guild.categories, name="Code Jam") + + if code_jam_category is None: + log.info("Code Jam category not found, creating it.") + + category_overwrites = { + ctx.guild.default_role: PermissionOverwrite(read_messages=False), + ctx.guild.me: PermissionOverwrite(read_messages=True) + } + + code_jam_category = await ctx.guild.create_category_channel( + "Code Jam", + overwrites=category_overwrites, + reason="It's code jam time!" + ) + + # First member is always the team leader + team_channel_overwrites = { + members[0]: PermissionOverwrite(manage_messages=True, read_messages=True, manage_webhooks=True), + ctx.guild.default_role: PermissionOverwrite(read_messages=False), + ctx.guild.get_role(Roles.developer): PermissionOverwrite(read_messages=False) + } + + # Rest of members should just have read_messages + for member in members[1:]: + team_channel_overwrites[member] = PermissionOverwrite(read_messages=True) + + # Create a channel for the team + team_channel = await ctx.guild.create_text_channel( + team_name, + overwrites=team_channel_overwrites, + category=code_jam_category + ) + + # Assign team leader role + await members[0].add_roles(ctx.guild.get_role(Roles.team_leader)) + + # Assign rest of roles + jammer_role = ctx.guild.get_role(Roles.jammer) + for member in members: + await member.add_roles(jammer_role) + + await ctx.send(f":ok_hand: Team created: {team_channel.mention}") + + +def setup(bot): + bot.add_cog(CodeJams(bot)) + log.info("Cog loaded: CodeJams")
\ No newline at end of file |