diff --git a/redbot/cogs/bank/bank.py b/redbot/cogs/bank/bank.py index e424abd6a..41bfeb261 100644 --- a/redbot/cogs/bank/bank.py +++ b/redbot/cogs/bank/bank.py @@ -43,36 +43,39 @@ class Bank(commands.Cog): @is_owner_if_bank_global() @checks.guildowner_or_permissions(administrator=True) - @commands.group(autohelp=True) + @commands.group() async def bankset(self, ctx: commands.Context): """Base command for bank settings.""" - if ctx.invoked_subcommand is None: - cur_setting = await bank.is_global() - if cur_setting: - group = bank._config - else: - if not ctx.guild: - return - group = bank._config.guild(ctx.guild) - group_data = await group.all() - bank_name = group_data["bank_name"] - bank_scope = _("Global") if cur_setting else _("Server") - currency_name = group_data["currency"] - default_balance = group_data["default_balance"] - max_balance = group_data["max_balance"] - settings = _( - "Bank settings:\n\nBank name: {bank_name}\nBank scope: {bank_scope}\n" - "Currency: {currency_name}\nDefault balance: {default_balance}\n" - "Maximum allowed balance: {maximum_bal}\n" - ).format( - bank_name=bank_name, - bank_scope=bank_scope, - currency_name=currency_name, - default_balance=humanize_number(default_balance), - maximum_bal=humanize_number(max_balance), - ) - await ctx.send(box(settings)) + @bankset.command(name="showsettings") + async def bankset_showsettings(self, ctx: commands.Context): + """Show the current bank settings.""" + cur_setting = await bank.is_global() + if cur_setting: + group = bank._config + else: + if not ctx.guild: + return + group = bank._config.guild(ctx.guild) + group_data = await group.all() + bank_name = group_data["bank_name"] + bank_scope = _("Global") if cur_setting else _("Server") + currency_name = group_data["currency"] + default_balance = group_data["default_balance"] + max_balance = group_data["max_balance"] + + settings = _( + "Bank settings:\n\nBank name: {bank_name}\nBank scope: {bank_scope}\n" + "Currency: {currency_name}\nDefault balance: {default_balance}\n" + "Maximum allowed balance: {maximum_bal}\n" + ).format( + bank_name=bank_name, + bank_scope=bank_scope, + currency_name=currency_name, + default_balance=humanize_number(default_balance), + maximum_bal=humanize_number(max_balance), + ) + await ctx.send(box(settings)) @bankset.command(name="toggleglobal") @checks.is_owner() diff --git a/redbot/cogs/economy/economy.py b/redbot/cogs/economy/economy.py index d99f74967..ee3bc830d 100644 --- a/redbot/cogs/economy/economy.py +++ b/redbot/cogs/economy/economy.py @@ -655,34 +655,39 @@ class Economy(commands.Cog): @commands.group() async def economyset(self, ctx: commands.Context): """Manage Economy settings.""" + + @economyset.command(name="showsettings") + async def economyset_showsettings(self, ctx: commands.Context): + """ + Shows the current economy settings + """ guild = ctx.guild - if ctx.invoked_subcommand is None: - if await bank.is_global(): - conf = self.config - else: - conf = self.config.guild(ctx.guild) - await ctx.send( - box( - _( - "----Economy Settings---\n" - "Minimum slot bid: {slot_min}\n" - "Maximum slot bid: {slot_max}\n" - "Slot cooldown: {slot_time}\n" - "Payday amount: {payday_amount}\n" - "Payday cooldown: {payday_time}\n" - "Amount given at account registration: {register_amount}\n" - "Maximum allowed balance: {maximum_bal}" - ).format( - slot_min=humanize_number(await conf.SLOT_MIN()), - slot_max=humanize_number(await conf.SLOT_MAX()), - slot_time=humanize_number(await conf.SLOT_TIME()), - payday_time=humanize_number(await conf.PAYDAY_TIME()), - payday_amount=humanize_number(await conf.PAYDAY_CREDITS()), - register_amount=humanize_number(await bank.get_default_balance(guild)), - maximum_bal=humanize_number(await bank.get_max_balance(guild)), - ) + if await bank.is_global(): + conf = self.config + else: + conf = self.config.guild(guild) + await ctx.send( + box( + _( + "----Economy Settings---\n" + "Minimum slot bid: {slot_min}\n" + "Maximum slot bid: {slot_max}\n" + "Slot cooldown: {slot_time}\n" + "Payday amount: {payday_amount}\n" + "Payday cooldown: {payday_time}\n" + "Amount given at account registration: {register_amount}\n" + "Maximum allowed balance: {maximum_bal}" + ).format( + slot_min=humanize_number(await conf.SLOT_MIN()), + slot_max=humanize_number(await conf.SLOT_MAX()), + slot_time=humanize_number(await conf.SLOT_TIME()), + payday_time=humanize_number(await conf.PAYDAY_TIME()), + payday_amount=humanize_number(await conf.PAYDAY_CREDITS()), + register_amount=humanize_number(await bank.get_default_balance(guild)), + maximum_bal=humanize_number(await bank.get_max_balance(guild)), ) ) + ) @economyset.command() async def slotmin(self, ctx: commands.Context, bid: int): diff --git a/redbot/cogs/mod/settings.py b/redbot/cogs/mod/settings.py index 914f67c02..2948c9a8e 100644 --- a/redbot/cogs/mod/settings.py +++ b/redbot/cogs/mod/settings.py @@ -18,49 +18,51 @@ class ModSettings(MixinMeta): @checks.guildowner_or_permissions(administrator=True) async def modset(self, ctx: commands.Context): """Manage server administration settings.""" - if ctx.invoked_subcommand is None: - guild = ctx.guild - # Display current settings - data = await self.config.guild(guild).all() - delete_repeats = data["delete_repeats"] - ban_mention_spam = data["ban_mention_spam"] - respect_hierarchy = data["respect_hierarchy"] - delete_delay = data["delete_delay"] - reinvite_on_unban = data["reinvite_on_unban"] - dm_on_kickban = data["dm_on_kickban"] - default_days = data["default_days"] - msg = "" - msg += _("Delete repeats: {num_repeats}\n").format( - num_repeats=_("after {num} repeats").format(num=delete_repeats) - if delete_repeats != -1 - else _("No") + + @modset.command(name="showsettings") + async def modset_showsettings(self, ctx: commands.Context): + """Show the current server administration settings.""" + guild = ctx.guild + data = await self.config.guild(guild).all() + delete_repeats = data["delete_repeats"] + ban_mention_spam = data["ban_mention_spam"] + respect_hierarchy = data["respect_hierarchy"] + delete_delay = data["delete_delay"] + reinvite_on_unban = data["reinvite_on_unban"] + dm_on_kickban = data["dm_on_kickban"] + default_days = data["default_days"] + msg = "" + msg += _("Delete repeats: {num_repeats}\n").format( + num_repeats=_("after {num} repeats").format(num=delete_repeats) + if delete_repeats != -1 + else _("No") + ) + msg += _("Ban mention spam: {num_mentions}\n").format( + num_mentions=_("{num} mentions").format(num=ban_mention_spam) + if ban_mention_spam + else _("No") + ) + msg += _("Respects hierarchy: {yes_or_no}\n").format( + yes_or_no=_("Yes") if respect_hierarchy else _("No") + ) + msg += _("Delete delay: {num_seconds}\n").format( + num_seconds=_("{num} seconds").format(num=delete_delay) + if delete_delay != -1 + else _("None") + ) + msg += _("Reinvite on unban: {yes_or_no}\n").format( + yes_or_no=_("Yes") if reinvite_on_unban else _("No") + ) + msg += _("Send message to users on kick/ban: {yes_or_no}\n").format( + yes_or_no=_("Yes") if dm_on_kickban else _("No") + ) + if default_days: + msg += _("Default message history delete on ban: Previous {num_days} days\n").format( + num_days=default_days ) - msg += _("Ban mention spam: {num_mentions}\n").format( - num_mentions=_("{num} mentions").format(num=ban_mention_spam) - if ban_mention_spam - else _("No") - ) - msg += _("Respects hierarchy: {yes_or_no}\n").format( - yes_or_no=_("Yes") if respect_hierarchy else _("No") - ) - msg += _("Delete delay: {num_seconds}\n").format( - num_seconds=_("{num} seconds").format(num=delete_delay) - if delete_delay != -1 - else _("None") - ) - msg += _("Reinvite on unban: {yes_or_no}\n").format( - yes_or_no=_("Yes") if reinvite_on_unban else _("No") - ) - msg += _("Send message to users on kick/ban: {yes_or_no}\n").format( - yes_or_no=_("Yes") if dm_on_kickban else _("No") - ) - if default_days: - msg += _( - "Default message history delete on ban: Previous {num_days} days\n" - ).format(num_days=default_days) - else: - msg += _("Default message history delete on ban: Don't delete any\n") - await ctx.send(box(msg)) + else: + msg += _("Default message history delete on ban: Don't delete any\n") + await ctx.send(box(msg)) @modset.command() @commands.guild_only() diff --git a/redbot/cogs/permissions/permissions.py b/redbot/cogs/permissions/permissions.py index ec739a0f9..0b9c0b218 100644 --- a/redbot/cogs/permissions/permissions.py +++ b/redbot/cogs/permissions/permissions.py @@ -224,13 +224,15 @@ class Permissions(commands.Cog): @permissions.group(name="acl", aliases=["yaml"]) async def permissions_acl(self, ctx: commands.Context): """Manage permissions with YAML files.""" - if ctx.invoked_subcommand is None or ctx.invoked_subcommand == self.permissions_acl: - # Send a little guide on YAML formatting - await ctx.send( - _("Example YAML for setting rules:\n") - + box( - textwrap.dedent( - """\ + + @permissions_acl.command(name="yamlexample") + async def permissions_acl_yaml_example(self, ctx: commands.Context): + """Sends an example of the yaml layout for permissions""" + await ctx.send( + _("Example YAML for setting rules:\n") + + box( + textwrap.dedent( + """\ COMMAND: ping: 12345678901234567: true @@ -241,10 +243,10 @@ class Permissions(commands.Cog): 12345678901234567: false default: false """ - ), - lang="yaml", - ) + ), + lang="yaml", ) + ) @checks.is_owner() @permissions_acl.command(name="setglobal") diff --git a/redbot/cogs/trivia/trivia.py b/redbot/cogs/trivia/trivia.py index d3fa819db..d2bfb251c 100644 --- a/redbot/cogs/trivia/trivia.py +++ b/redbot/cogs/trivia/trivia.py @@ -61,23 +61,26 @@ class Trivia(commands.Cog): @checks.mod_or_permissions(administrator=True) async def triviaset(self, ctx: commands.Context): """Manage Trivia settings.""" - if ctx.invoked_subcommand is None: - settings = self.config.guild(ctx.guild) - settings_dict = await settings.all() - msg = box( - _( - "Current settings\n" - "Bot gains points: {bot_plays}\n" - "Answer time limit: {delay} seconds\n" - "Lack of response timeout: {timeout} seconds\n" - "Points to win: {max_score}\n" - "Reveal answer on timeout: {reveal_answer}\n" - "Payout multiplier: {payout_multiplier}\n" - "Allow lists to override settings: {allow_override}" - ).format(**settings_dict), - lang="py", - ) - await ctx.send(msg) + + @triviaset.command(name="showsettings") + async def triviaset_showsettings(self, ctx: commands.Context): + """Show the current trivia settings.""" + settings = self.config.guild(ctx.guild) + settings_dict = await settings.all() + msg = box( + _( + "Current settings\n" + "Bot gains points: {bot_plays}\n" + "Answer time limit: {delay} seconds\n" + "Lack of response timeout: {timeout} seconds\n" + "Points to win: {max_score}\n" + "Reveal answer on timeout: {reveal_answer}\n" + "Payout multiplier: {payout_multiplier}\n" + "Allow lists to override settings: {allow_override}" + ).format(**settings_dict), + lang="py", + ) + await ctx.send(msg) @triviaset.command(name="maxscore") async def triviaset_max_score(self, ctx: commands.Context, score: int): diff --git a/redbot/core/core_commands.py b/redbot/core/core_commands.py index 56a96868e..c39fe73bf 100644 --- a/redbot/core/core_commands.py +++ b/redbot/core/core_commands.py @@ -453,19 +453,22 @@ class Core(commands.Cog, CoreLogic): commands that support it). The default is to use embeds. """ - if ctx.invoked_subcommand is None: - text = _("Embed settings:\n\n") - global_default = await self.bot._config.embeds() - text += _("Global default: {}\n").format(global_default) - if ctx.guild: - guild_setting = await self.bot._config.guild(ctx.guild).embeds() - text += _("Guild setting: {}\n").format(guild_setting) - if ctx.channel: - channel_setting = await self.bot._config.channel(ctx.channel).embeds() - text += _("Channel setting: {}\n").format(channel_setting) - user_setting = await self.bot._config.user(ctx.author).embeds() - text += _("User setting: {}").format(user_setting) - await ctx.send(box(text)) + + @embedset.command(name="showsettings") + async def embedset_showsettings(self, ctx: commands.Context): + """Show the current embed settings.""" + text = _("Embed settings:\n\n") + global_default = await self.bot._config.embeds() + text += _("Global default: {}\n").format(global_default) + if ctx.guild: + guild_setting = await self.bot._config.guild(ctx.guild).embeds() + text += _("Guild setting: {}\n").format(guild_setting) + if ctx.channel: + channel_setting = await self.bot._config.channel(ctx.channel).embeds() + text += _("Channel setting: {}\n").format(channel_setting) + user_setting = await self.bot._config.user(ctx.author).embeds() + text += _("User setting: {}").format(user_setting) + await ctx.send(box(text)) @embedset.command(name="global") @checks.is_owner() @@ -939,45 +942,48 @@ class Core(commands.Cog, CoreLogic): @commands.group(name="set") async def _set(self, ctx: commands.Context): """Changes [botname]'s settings.""" - if ctx.invoked_subcommand is None: - if ctx.guild: - guild_data = await ctx.bot._config.guild(ctx.guild).all() - guild = ctx.guild - admin_role_ids = guild_data["admin_role"] - admin_role_names = [r.name for r in guild.roles if r.id in admin_role_ids] - admin_roles_str = ( - humanize_list(admin_role_names) if admin_role_names else "Not Set." - ) - mod_role_ids = guild_data["mod_role"] - mod_role_names = [r.name for r in guild.roles if r.id in mod_role_ids] - mod_roles_str = humanize_list(mod_role_names) if mod_role_names else "Not Set." - guild_settings = _("Admin roles: {admin}\nMod roles: {mod}\n").format( - admin=admin_roles_str, mod=mod_roles_str - ) - else: - guild_settings = "" - prefixes = await ctx.bot._prefix_cache.get_prefixes(ctx.guild) - global_data = await ctx.bot._config.all() - locale = global_data["locale"] - regional_format = global_data["regional_format"] or _("Same as bot's locale") - - prefix_string = " ".join(prefixes) - settings = _( - "{bot_name} Settings:\n\n" - "Prefixes: {prefixes}\n" - "{guild_settings}" - "Locale: {locale}\n" - "Regional format: {regional_format}" - ).format( - bot_name=ctx.bot.user.name, - prefixes=prefix_string, - guild_settings=guild_settings, - locale=locale, - regional_format=regional_format, + @_set.command("showsettings") + async def set_showsettings(self, ctx: commands.Context): + """ + Show the current settings for [botname]. + """ + if ctx.guild: + guild_data = await ctx.bot._config.guild(ctx.guild).all() + guild = ctx.guild + admin_role_ids = guild_data["admin_role"] + admin_role_names = [r.name for r in guild.roles if r.id in admin_role_ids] + admin_roles_str = humanize_list(admin_role_names) if admin_role_names else "Not Set." + mod_role_ids = guild_data["mod_role"] + mod_role_names = [r.name for r in guild.roles if r.id in mod_role_ids] + mod_roles_str = humanize_list(mod_role_names) if mod_role_names else "Not Set." + guild_settings = _("Admin roles: {admin}\nMod roles: {mod}\n").format( + admin=admin_roles_str, mod=mod_roles_str ) - for page in pagify(settings): - await ctx.send(box(page)) + else: + guild_settings = "" + + prefixes = await ctx.bot._prefix_cache.get_prefixes(ctx.guild) + global_data = await ctx.bot._config.all() + locale = global_data["locale"] + regional_format = global_data["regional_format"] or _("Same as bot's locale") + + prefix_string = " ".join(prefixes) + settings = _( + "{bot_name} Settings:\n\n" + "Prefixes: {prefixes}\n" + "{guild_settings}" + "Locale: {locale}\n" + "Regional format: {regional_format}" + ).format( + bot_name=ctx.bot.user.name, + prefixes=prefix_string, + guild_settings=guild_settings, + locale=locale, + regional_format=regional_format, + ) + for page in pagify(settings): + await ctx.send(box(page)) @checks.guildowner_or_permissions(administrator=True) @_set.command(name="deletedelay") @@ -2550,9 +2556,14 @@ class Core(commands.Cog, CoreLogic): @checks.admin_or_permissions(manage_channels=True) async def ignore(self, ctx: commands.Context): """Add servers or channels to the ignore list.""" - if ctx.invoked_subcommand is None: - for page in pagify(await self.count_ignored(ctx)): - await ctx.maybe_send_embed(page) + + @ignore.command(name="list") + async def ignore_list(self, ctx: commands.Context): + """ + List the currently ignored servers and channels + """ + for page in pagify(await self.count_ignored(ctx)): + await ctx.maybe_send_embed(page) @ignore.command(name="channel") async def ignore_channel( @@ -2588,9 +2599,6 @@ class Core(commands.Cog, CoreLogic): @checks.admin_or_permissions(manage_channels=True) async def unignore(self, ctx: commands.Context): """Remove servers or channels from the ignore list.""" - if ctx.invoked_subcommand is None: - for page in pagify(await self.count_ignored(ctx)): - await ctx.maybe_send_embed(page) @unignore.command(name="channel") async def unignore_channel(