From 0e962c81407326220b7cca6872c34b2503008670 Mon Sep 17 00:00:00 2001 From: wlinator Date: Sat, 3 Aug 2024 14:41:23 -0400 Subject: [PATCH] chore: Add moderation module configuration commands --- config/JSON/strings.json | 51 +++++++++++++++++----------------- modules/config/__init__.py | 13 +++++++-- modules/config/c_moderation.py | 17 ++++++++++++ 3 files changed, 53 insertions(+), 28 deletions(-) create mode 100644 modules/config/c_moderation.py diff --git a/config/JSON/strings.json b/config/JSON/strings.json index 1ea8acf..4b291b3 100644 --- a/config/JSON/strings.json +++ b/config/JSON/strings.json @@ -26,6 +26,29 @@ "config_birthday_channel_set": "birthday announcements will be sent in {0}.", "config_birthday_module_already_disabled": "the birthday module was already disabled.", "config_birthday_module_disabled": "the birthday module was successfully disabled.", + "config_boost_channel_set": "boost announcements will be sent in {0}.", + "config_boost_image_field": "New Image URL:", + "config_boost_image_original": "Original (default)", + "config_boost_image_updated": "the boost image has been updated.", + "config_boost_module_already_disabled": "the boost module was already disabled.", + "config_boost_module_disabled": "the boost module was successfully disabled.", + "config_boost_template_field": "New Template:", + "config_boost_template_updated": "the boost message template has been updated.", + "config_example_next_footer": "An example will be sent next.", + "config_level_channel_set": "all level announcements will be sent in {0}.", + "config_level_current_channel_set": "members will receive level announcements in their current channel.", + "config_level_module_already_enabled": "the Lumi XP system was already enabled.", + "config_level_module_disabled": "the Lumi XP system was successfully disabled.", + "config_level_module_disabled_warning": "Warning: this module is disabled, please do '/config levels enable'", + "config_level_module_enabled": "the Lumi XP system was successfully enabled.", + "config_level_template": "Template:", + "config_level_template_updated": "the level template was successfully updated.", + "config_level_type_example": "Example:", + "config_level_type_generic": "level announcements will be **generic messages**.", + "config_level_type_generic_example": "📈 | **lucas** you have reached **Level 15**.", + "config_level_type_whimsical": "level announcements will be **sarcastic comments**.", + "config_level_type_whimsical_example": "📈 | **lucas** Lol it took you this long to reach **Level 15**.", + "config_modlog_channel_set": "moderation logs will be sent in {0}.", "config_show_author": "{0} Configuration", "config_show_birthdays": "Birthdays", "config_show_boost_announcements": "Boost announcements", @@ -44,28 +67,6 @@ "config_welcome_module_disabled": "the greeting module was successfully disabled.", "config_welcome_template_field": "New Template:", "config_welcome_template_updated": "the welcome message template has been updated.", - "config_example_next_footer": "An example will be sent next.", - "config_boost_channel_set": "boost announcements will be sent in {0}.", - "config_boost_module_already_disabled": "the boost module was already disabled.", - "config_boost_module_disabled": "the boost module was successfully disabled.", - "config_boost_template_updated": "the boost message template has been updated.", - "config_boost_template_field": "New Template:", - "config_boost_image_updated": "the boost image has been updated.", - "config_boost_image_field": "New Image URL:", - "config_boost_image_original": "Original (default)", - "config_level_channel_set": "all level announcements will be sent in {0}.", - "config_level_current_channel_set": "members will receive level announcements in their current channel.", - "config_level_module_disabled": "the Lumi XP system was successfully disabled.", - "config_level_module_already_enabled": "the Lumi XP system was already enabled.", - "config_level_module_enabled": "the Lumi XP system was successfully enabled.", - "config_level_type_whimsical": "level announcements will be **sarcastic comments**.", - "config_level_type_generic": "level announcements will be **generic messages**.", - "config_level_type_example": "Example:", - "config_level_type_whimsical_example": "📈 | **lucas** Lol it took you this long to reach **Level 15**.", - "config_level_type_generic_example": "📈 | **lucas** you have reached **Level 15**.", - "config_level_template": "Template:", - "config_level_template_updated": "the level template was successfully updated.", - "config_level_module_disabled_warning": "Warning: this module is disabled, please do '/config levels enable'", "daily_already_claimed_author": "Already Claimed", "daily_already_claimed_description": "you can claim your daily reward again .", "daily_already_claimed_footer": "Daily reset is at 7 AM EST", @@ -81,10 +82,12 @@ "error_birthdays_disabled_author": "Birthdays Disabled", "error_birthdays_disabled_description": "birthdays are disabled in this server.", "error_birthdays_disabled_footer": "Contact a mod to enable them.", + "error_boost_image_url_invalid": "the image URL must end with `.jpg` or `.png`.", "error_bot_missing_permissions_author": "Bot Missing Permissions", "error_bot_missing_permissions_description": "Lumi lacks the required permissions to run this command.", "error_command_cooldown_author": "Command Cooldown", "error_command_cooldown_description": "try again in **{0:02d}:{1:02d}**.", + "error_image_url_invalid": "invalid image URL.", "error_invalid_duration": "Invalid duration: {0}", "error_invalid_duration_author": "Invalid Duration", "error_invalid_duration_description": "Please provide a valid duration between 1 minute and 30 days.", @@ -176,7 +179,5 @@ "xp_lb_field_value": "level: **{0}**\nxp: `{1}/{2}`", "xp_level": "Level {0}", "xp_progress": "Progress to next level", - "xp_server_rank": "Server Rank: #{0}", - "error_image_url_invalid": "invalid image URL.", - "error_boost_image_url_invalid": "the image URL must end with `.jpg` or `.png`." + "xp_server_rank": "Server Rank: #{0}" } diff --git a/modules/config/__init__.py b/modules/config/__init__.py index 5e4837f..b40e0c6 100644 --- a/modules/config/__init__.py +++ b/modules/config/__init__.py @@ -9,6 +9,7 @@ from modules.config import ( c_greet, c_boost, c_level, + c_moderation, set_prefix, xp_reward, ) @@ -78,7 +79,7 @@ class Config(commands.Cog): CONFIG GROUPS The 'config' group consists of many different configuration types, each being guild-specific and guild-only. All commands in this group are exclusively available as slash-commands. - Only members with "manage guild" permissions can access commands in this group. + Only administrators can access commands in this group. - Birthdays - Welcome @@ -93,7 +94,7 @@ class Config(commands.Cog): "config", "server config commands.", guild_only=True, - default_member_permissions=discord.Permissions(manage_guild=True), + default_member_permissions=discord.Permissions(administrator=True), ) @config.command(name="show") @@ -102,7 +103,7 @@ class Config(commands.Cog): birthday_config = config.create_subgroup(name="birthdays") - @config.command(name="birthdays") + @config.command(name="channel") async def config_birthdays_channel(self, ctx, channel: discord.TextChannel): await c_birthday.set_birthday_channel(ctx, channel) @@ -172,6 +173,12 @@ class Config(commands.Cog): async def config_level_template(self, ctx, text: str): await c_level.set_level_template(ctx, text) + modlog = config.create_subgroup(name="moderation") + + @modlog.command(name="log") + async def config_moderation_log_channel(self, ctx, channel: discord.TextChannel): + await c_moderation.set_mod_log_channel(ctx, channel) + def setup(client): client.add_cog(Config(client)) diff --git a/modules/config/c_moderation.py b/modules/config/c_moderation.py new file mode 100644 index 0000000..949ad0d --- /dev/null +++ b/modules/config/c_moderation.py @@ -0,0 +1,17 @@ +import discord +from lib.embed_builder import EmbedBuilder +from lib.constants import CONST +from services.moderation.modlog_service import ModLogService + + +async def set_mod_log_channel(ctx, channel: discord.TextChannel): + mod_log = ModLogService() + mod_log.set_modlog_channel(ctx.guild.id, channel.id) + + embed = EmbedBuilder().create_success_embed( + ctx=ctx, + author_text=CONST.STRINGS["config_author"], + description=CONST.STRINGS["config_modlog_channel_set"].format(channel.mention), + ) + + return await ctx.respond(embed=embed)