aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bot/__main__.py11
-rw-r--r--bot/cogs/jams.py83
-rw-r--r--bot/constants.py1
-rw-r--r--config-default.yml1
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: