diff options
| author | 2019-02-16 15:14:53 +0000 | |
|---|---|---|
| committer | 2019-02-16 15:14:53 +0000 | |
| commit | 5ba1a7cd14fa12c10e2635c55be5025ae08f16b9 (patch) | |
| tree | 4c88eac5e7b3f28c682e57f2ab2b5e45d362c41d | |
| parent | Merge pull request #301 from Refisio/rules_command (diff) | |
| parent | Merge branch 'add-team-creator' of github.com:python-discord/bot into add-tea... (diff) | |
Merge pull request #311 from python-discord/add-team-creator
Add team creation command
| -rw-r--r-- | bot/__main__.py | 11 | ||||
| -rw-r--r-- | bot/cogs/jams.py | 83 | ||||
| -rw-r--r-- | bot/constants.py | 1 | ||||
| -rw-r--r-- | config-default.yml | 1 |
4 files changed, 91 insertions, 5 deletions
diff --git a/bot/__main__.py b/bot/__main__.py index 568285cc3..6928a3960 100644 --- a/bot/__main__.py +++ b/bot/__main__.py @@ -38,11 +38,11 @@ else: log.warning("Timed out while waiting for RabbitMQ") # Internal/debug -bot.load_extension("bot.cogs.logging") -bot.load_extension("bot.cogs.security") bot.load_extension("bot.cogs.events") bot.load_extension("bot.cogs.filtering") +bot.load_extension("bot.cogs.logging") bot.load_extension("bot.cogs.modlog") +bot.load_extension("bot.cogs.security") # Commands, etc bot.load_extension("bot.cogs.antispam") @@ -60,12 +60,13 @@ if not DEBUG_MODE: # Feature cogs bot.load_extension("bot.cogs.alias") -bot.load_extension("bot.cogs.deployment") bot.load_extension("bot.cogs.defcon") +bot.load_extension("bot.cogs.deployment") bot.load_extension("bot.cogs.eval") +bot.load_extension("bot.cogs.free") bot.load_extension("bot.cogs.fun") -bot.load_extension("bot.cogs.superstarify") bot.load_extension("bot.cogs.information") +bot.load_extension("bot.cogs.jams") bot.load_extension("bot.cogs.moderation") bot.load_extension("bot.cogs.off_topic_names") bot.load_extension("bot.cogs.reddit") @@ -73,11 +74,11 @@ bot.load_extension("bot.cogs.reminders") bot.load_extension("bot.cogs.site") bot.load_extension("bot.cogs.snakes") bot.load_extension("bot.cogs.snekbox") +bot.load_extension("bot.cogs.superstarify") bot.load_extension("bot.cogs.tags") bot.load_extension("bot.cogs.token_remover") bot.load_extension("bot.cogs.utils") bot.load_extension("bot.cogs.wolfram") -bot.load_extension("bot.cogs.free") if has_rmq: bot.load_extension("bot.cogs.rmq") diff --git a/bot/cogs/jams.py b/bot/cogs/jams.py new file mode 100644 index 000000000..e68aa3d2f --- /dev/null +++ b/bot/cogs/jams.py @@ -0,0 +1,83 @@ +import logging + +from discord import Member, PermissionOverwrite, utils +from discord.ext import commands + +from bot.constants import Roles +from bot.decorators import with_role + +log = logging.getLogger(__name__) + + +class CodeJams: + """ + Manages 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] + ): + """ + Create a team channel in the Code Jams category, assign roles and then add + overwrites for the team. + + The first user passed will always be the team leader. + """ + 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") diff --git a/bot/constants.py b/bot/constants.py index ab62cd79d..5b9b45c1c 100644 --- a/bot/constants.py +++ b/bot/constants.py @@ -372,6 +372,7 @@ class Roles(metaclass=YAMLGetter): owner: int verified: int helpers: int + team_leader: int class Guild(metaclass=YAMLGetter): diff --git a/config-default.yml b/config-default.yml index 747fa7fab..110dd12dd 100644 --- a/config-default.yml +++ b/config-default.yml @@ -134,6 +134,7 @@ guild: verified: 352427296948486144 helpers: 267630620367257601 rockstars: &ROCKSTARS_ROLE 458226413825294336 + team_leader: 501324292341104650 filter: |