Ejemplo n.º 1
0
    async def misc(self, ctx:utils.Context):
        """
        Misc setup.
        """

        menu = utils.SettingsMenu()
        settings_mention = utils.SettingsMenuOption.get_guild_settings_mention
        menu.add_multiple_options(
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set coin emoji (currently {0})".format(settings_mention(c, 'coin_emoji', 'coins')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="What do you want to set the coin emoji to?",
                        asking_for="coin emoji",
                        converter=str,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'coin_emoji'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set suggestions channel (currently {0})".format(settings_mention(ctx, 'suggestion_channel_id')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="What do you want to set the suggestion channel to?",
                        asking_for="suggestion channel",
                        converter=commands.TextChannelConverter,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'suggestion_channel_id'),
            ),
        )
        await menu.start(ctx)
Ejemplo n.º 2
0
    async def usersettings(self, ctx:utils.Context):
        """
        Run the bot setup.
        """

        # Make sure it's only run as its own command, not a parent
        if ctx.invoked_subcommand is not None:
            return

        # Create settings menu
        menu = utils.SettingsMenu()
        settings_mention = utils.SettingsMenuOption.get_user_settings_mention
        menu.bulk_add_options(
            ctx,
            {
                'display': lambda c: "Set setting (currently {0})".format(settings_mention(c, 'setting_id')),
                'converter_args': [("What do you want to set the setting to?", "setting channel", commands.TextChannelConverter)],
                'callback': utils.SettingsMenuOption.get_set_user_settings_callback('user_settings', 'setting_id'),
            },
        )
        try:
            await menu.start(ctx)
            await ctx.send("Done setting up!")
        except utils.errors.InvokedMetaCommand:
            pass
Ejemplo n.º 3
0
    async def usersettings(self, ctx:utils.Context):
        """
        User settings.
        """

        # Make sure it's only run as its own command, not a parent
        if ctx.invoked_subcommand is not None:
            return

        # Create settings menu
        menu = utils.SettingsMenu()
        settings_mention = utils.SettingsMenuOption.get_user_settings_mention
        menu.add_multiple_options(
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Receive DM on paint removal (currently {0})".format(settings_mention(c, 'dm_on_paint_remove')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="Do you want to receive a DM when paint is removed from you?",
                        asking_for="paint DM",
                        converter=utils.converters.BooleanConverter,
                        emojis=[self.TICK_EMOJI, self.CROSS_EMOJI],
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_user_settings_callback('user_settings', 'dm_on_paint_remove'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Allow paint from other users (currently {0})".format(settings_mention(c, 'allow_paint')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="Do you want to allow other users to paint you?",
                        asking_for="paint enable",
                        converter=utils.converters.BooleanConverter,
                        emojis=[self.TICK_EMOJI, self.CROSS_EMOJI],
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_user_settings_callback('user_settings', 'allow_paint'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Allow interaction pings (currently {0})".format(settings_mention(c, 'receive_interaction_ping')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="Do you want to be pinged when users run interactions on you?",
                        asking_for="interaction ping",
                        converter=utils.converters.BooleanConverter,
                        emojis=[self.TICK_EMOJI, self.CROSS_EMOJI],
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_user_settings_callback('user_settings', 'receive_interaction_ping'),
            ),
        )
        try:
            await menu.start(ctx)
            await ctx.send("Done setting up!")
        except utils.errors.InvokedMetaCommand:
            pass
Ejemplo n.º 4
0
    async def setup(self, ctx:utils.Context):
        """
        Run the bot setup.
        """

        # Make sure it's only run as its own command, not a parent
        if ctx.invoked_subcommand is not None:
            return

        menu = utils.SettingsMenu()
        menu.add_multiple_options(
            utils.SettingsMenuOption(
                ctx=ctx,
                display="Custom role settings",
                callback=self.bot.get_command("setup customroles"),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display="Moderation settings",
                callback=self.bot.get_command("setup moderation"),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display="Fursona settings",
                callback=self.bot.get_command("setup fursonas"),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display="Interaction cooldowns",
                callback=self.bot.get_command("setup interactions"),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display="Shop settings",
                callback=self.bot.get_command("setup shop"),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display="Command disabling",
                callback=self.bot.get_command("setup botcommands"),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display="Misc settings",
                callback=self.bot.get_command("setup misc"),
            ),
        )
        try:
            await menu.start(ctx)
            await ctx.send("Done setting up!")
        except utils.errors.InvokedMetaCommand:
            pass
Ejemplo n.º 5
0
    async def setup(self, ctx: utils.Context):
        """
        Run the bot setup.
        """

        # Make sure it's only run as its own command, not a parent
        if ctx.invoked_subcommand is not None:
            return

        # Create settings menu
        menu = utils.SettingsMenu()
        settings_mention = utils.SettingsMenuOption.get_guild_settings_mention
        menu.bulk_add_options(
            ctx,
            {
                'display':
                lambda c: "Remove old roles (currently {0})".format(
                    settings_mention(c, 'remove_old_roles')),
                'converter_args':
                [("Do you want to remove old roles when you get a new one?",
                  "old role removal", utils.converters.BooleanConverter)],
                'callback':
                utils.SettingsMenuOption.get_set_guild_settings_callback(
                    'guild_settings', 'remove_old_roles'),
            },
            {
                'display': "Role gain settings",
                'callback': self.bot.get_command("setup roles"),
            },
            {
                'display': "Blacklisted channel settings",
                'callback': self.bot.get_command("setup blacklistedchannels"),
            },
            {
                'display': "Blacklisted role settings",
                'callback': self.bot.get_command("setup blacklistedroles"),
            },
            {
                'display': "Blacklisted VC role settings",
                'callback': self.bot.get_command("setup blacklistedvcroles"),
            },
        )
        try:
            await menu.start(ctx)
            await ctx.send("Done setting up!")
        except utils.errors.InvokedMetaCommand:
            pass
Ejemplo n.º 6
0
    async def customroles(self, ctx:utils.Context):
        """
        Custom roles setup.
        """

        menu = utils.SettingsMenu()
        settings_mention = utils.SettingsMenuOption.get_guild_settings_mention
        menu.add_multiple_options(
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set custom role master (currently {0})".format(settings_mention(c, 'custom_role_id')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="What do you want to set this role to? Users with this role are able to make/manage their own custom role name and colour.",
                        asking_for="custom role master",
                        converter=commands.RoleConverter,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'custom_role_id'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set custom role position (currently below {0})".format(settings_mention(c, 'custom_role_position_id')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="What do you want to set this role to? Give a role that newly created custom roles will be created _under_.",
                        asking_for="custom role position",
                        converter=commands.RoleConverter,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'custom_role_position_id'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set custom role name xfix (currently `{0}`)".format(c.bot.guild_settings[c.guild.id].get('custom_role_xfix', None) or ':(Custom)'),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="What do you want your custom role suffix to be? If your name ends with a colon (eg `(Custom):`) then it'll be added to the role as a prefix rather than a suffix.",
                        asking_for="custom role suffix",
                        converter=str,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'custom_role_xfix'),
            ),
        )
        await menu.start(ctx)
Ejemplo n.º 7
0
    async def shop(self, ctx:utils.Context):
        """
        Shop submenu.
        """

        menu = utils.SettingsMenu()
        settings_mention = utils.SettingsMenuOption.get_guild_settings_mention
        menu.add_multiple_options(
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set paintbrush price (currently {0})".format(settings_mention(c, 'paintbrush_price')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="How much do you want a paintbrush to cost? Set to 0 to disable paint being sold on the shop.",
                        asking_for="paint price",
                        converter=int,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'paintbrush_price'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set cooldown token price (currently {0})".format(settings_mention(c, 'cooldown_token_price')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="How much do you want 100 cooldown tokens to cost? Set to 0 to disable cooldown tokens being sold on the shop.",
                        asking_for="paint price",
                        converter=int,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'cooldown_token_price'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set up buyable roles (currently {0} set up)".format(len(c.bot.guild_settings[c.guild.id].get('buyable_roles', list()))),
                callback=self.bot.get_command("setup buyableroles"),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set up buyable temporary roles (currently {0} set up)".format(len(c.bot.guild_settings[c.guild.id].get('buyable_temporary_roles', list()))),
                callback=self.bot.get_command("setup buyabletemproles"),
            ),
        )
        await menu.start(ctx)
        self.bot.dispatch("shop_message_update", ctx.guild)
Ejemplo n.º 8
0
    async def setup(self, ctx:utils.Context):
        """
        Run the bot setup.
        """

        # Make sure it's only run as its own command, not a parent
        if ctx.invoked_subcommand is not None:
            return

        # Create settings menu
        menu = utils.SettingsMenu()
        settings_mention = utils.SettingsMenuOption.get_guild_settings_mention
        menu.bulk_add_options(
            ctx,
            {
                'display': lambda c: "Set quote channel (currently {0})".format(settings_mention(c, 'quote_channel_id')),
                'converter_args': [("What do you want to set the quote channel to?", "quote channel", commands.TextChannelConverter)],
                'callback': utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'quote_channel_id'),
            },
            {
                'display': lambda c: "Set reactions needed for quote (currently {0})".format(settings_mention(c, 'quote_reactions_needed')),
                'converter_args': [("How many reactions should a message get to get quoted?", "reactions needed", int)],
                'callback': utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'quote_reactions_needed'),
            },
            {
                'display': lambda c: "Set automatic nickname fixer (currently {0})".format(c.bot.guild_settings[c.guild.id]['automatic_nickname_update']),
                'converter_args': [("Do you want to enable automatic nickname fixing?", "auto nickname", utils.converters.BooleanConverter)],
                'callback': utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'automatic_nickname_update'),
            },
            {
                'display': lambda c: "Set nickname change ban role (currently {0})".format(settings_mention(c, 'nickname_banned_role_id')),
                'converter_args': [("Which role should be set to stop users changing their nickname?", "nickname change ban role", commands.RoleConverter)],
                'callback': utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'nickname_banned_role_id'),
            },
            {
                'display': "Set up VC max members",
                'callback': self.bot.get_command("setup vcmaxmembers"),
            },
        )
        try:
            await menu.start(ctx)
            await ctx.send("Done setting up!")
        except utils.errors.InvokedMetaCommand:
            pass
Ejemplo n.º 9
0
    async def botcommands(self, ctx:utils.Context):
        """
        Bot command blacklisting setup.
        """

        menu = utils.SettingsMenu()
        menu.add_multiple_options(
            utils.SettingsMenuOption(
                ctx=ctx,
                display='Disable sona commands for channels',
                callback=self.bot.get_command('setup disablesona')
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display='Disable interaction commands for channels',
                callback=self.bot.get_command('setup disableinteractions')
            ),
        )
        await menu.start(ctx)
Ejemplo n.º 10
0
    async def fursonas(self, ctx:utils.Context):
        """
        Fursonas submenu.
        """

        menu = utils.SettingsMenu()
        settings_mention = utils.SettingsMenuOption.get_guild_settings_mention
        menu.add_multiple_options(
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Allow NSFW fursonas (currently {0})".format(settings_mention(c, 'nsfw_is_allowed')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="Do you want to allow NSFW fursonas?",
                        asking_for="allow NSFW",
                        converter=utils.converters.BooleanConverter,
                        emojis=[self.TICK_EMOJI, self.CROSS_EMOJI],
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'nsfw_is_allowed'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set fursona modmail channel (currently {0})".format(settings_mention(c, 'fursona_modmail_channel_id')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="What channel do you want to set fursona modmail to go to?",
                        asking_for="fursona modmail",
                        converter=commands.TextChannelConverter,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'fursona_modmail_channel_id'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set fursona decline archive channel (currently {0})".format(settings_mention(c, 'fursona_decline_archive_channel_id')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="What channel do you want declined fursonas to go to?",
                        asking_for="fursona decline archive",
                        converter=commands.TextChannelConverter,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'fursona_decline_archive_channel_id'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set fursona accept archive channel (currently {0})".format(settings_mention(c, 'fursona_accept_archive_channel_id')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="What channel do you want accepted fursonas to go to?",
                        asking_for="fursona accept archive",
                        converter=commands.TextChannelConverter,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'fursona_accept_archive_channel_id'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set NSFW fursona accept archive channel (currently {0})".format(settings_mention(c, 'fursona_accept_nsfw_archive_channel_id')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="What channel do you want accepted NSFW fursonas to go to?",
                        asking_for="NSFW fursona accept archive",
                        converter=commands.TextChannelConverter,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'fursona_accept_nsfw_archive_channel_id'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display="Set max sona counts by role",
                callback=self.bot.get_command("setup sonacount"),
            ),
        )
        await menu.start(ctx)
Ejemplo n.º 11
0
    async def modlogs(self, ctx:utils.Context):
        """
        Modlogs setup.
        """

        menu = utils.SettingsMenu()
        settings_mention = utils.SettingsMenuOption.get_guild_settings_mention
        menu.add_multiple_options(
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set kick archive channel (currently {0})".format(settings_mention(c, 'kick_modlog_channel_id')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="What channel do you want kicks to be logged to?",
                        asking_for="kicked users archive",
                        converter=commands.TextChannelConverter,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'kick_modlog_channel_id'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set ban archive channel (currently {0})".format(settings_mention(c, 'ban_modlog_channel_id')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="What channel do you want bans to be logged to?",
                        asking_for="banned users archive",
                        converter=commands.TextChannelConverter,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'ban_modlog_channel_id'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set mute archive channel (currently {0})".format(settings_mention(c, 'mute_modlog_channel_id')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="What channel do you want mutes to be logged to?",
                        asking_for="muted users archive",
                        converter=commands.TextChannelConverter,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'mute_modlog_channel_id'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set warn archive channel (currently {0})".format(settings_mention(c, 'warn_modlog_channel_id')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="What channel do you want warns to be logged to?",
                        asking_for="warned users archive",
                        converter=commands.TextChannelConverter,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'warn_modlog_channel_id'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set edited message archive channel (currently {0})".format(settings_mention(c, 'edited_message_modlog_channel_id')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="What channel do you want edited message logs to be logged to?",
                        asking_for="edited message archive",
                        converter=commands.TextChannelConverter,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'edited_message_modlog_channel_id'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set deleted message archive channel (currently {0})".format(settings_mention(c, 'deleted_message_modlog_channel_id')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="What channel do you want deleted message logs to go to?",
                        asking_for="deleted message archive",
                        converter=commands.TextChannelConverter,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'deleted_message_modlog_channel_id'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set voice update log channel (currently {0})".format(settings_mention(c, 'voice_update_modlog_channel_id')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="What channel do you want user voice state updates to be logged to?",
                        asking_for="VC update archive",
                        converter=commands.TextChannelConverter,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'voice_update_modlog_channel_id'),
            ),
        )
        await menu.start(ctx)
Ejemplo n.º 12
0
    async def moderation(self, ctx:utils.Context):
        """
        Moderation setup.
        """

        # Make sure it's only run as its own command, not a parent
        if ctx.invoked_subcommand is not None:
            return

        # Create settings menu
        menu = utils.SettingsMenu()
        settings_mention = utils.SettingsMenuOption.get_guild_settings_mention
        menu.add_multiple_options(
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set verified role (currently {0})".format(settings_mention(c, 'verified_role_id')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="What do you want to set the verified role to?",
                        asking_for="verified role",
                        converter=commands.RoleConverter,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'verified_role_id'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set mute role (currently {0})".format(settings_mention(c, 'muted_role_id')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="What do you want to set the mute role to?",
                        asking_for="mute role",
                        converter=commands.RoleConverter,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'muted_role_id'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set roles which are removed on mute (currently {0})".format(len(c.bot.guild_settings[c.guild.id].get('removed_on_mute_roles', []))),
                callback=self.bot.get_command("setup removerolesonmute"),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set moderator role (currently {0})".format(settings_mention(c, 'guild_moderator_role_id')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt="What do you want to set the moderator role to?",
                        asking_for="moderator role",
                        converter=commands.RoleConverter,
                    ),
                ],
                callback=utils.SettingsMenuOption.get_set_guild_settings_callback('guild_settings', 'guild_moderator_role_id'),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display="Set moderator action archive channels",
                callback=self.bot.get_command("setup modlogs"),
            ),
        )
        await menu.start(ctx)
Ejemplo n.º 13
0
    async def setup(self, ctx: utils.Context):
        """
        Set up individual settings for each guild.
        """

        menu = utils.SettingsMenu()
        settings_mention = utils.SettingsMenuOption.get_guild_settings_mention
        menu.add_multiple_options(
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set max template count (currently {0})".
                format(settings_mention(c, 'max_template_count')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt=
                        "How many templates should this guild be able to create?",
                        asking_for="max template count",
                        converter=int,
                    ),
                ],
                callback=utils.SettingsMenuOption.
                get_set_guild_settings_callback("guild_settings",
                                                "max_template_count"),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c:
                "Set max template field count (currently {0})".format(
                    settings_mention(c, 'max_template_field_count')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt=
                        "How many fields should each template in this guild be able to have?",
                        asking_for="max template field count",
                        converter=int,
                    ),
                ],
                callback=utils.SettingsMenuOption.
                get_set_guild_settings_callback("guild_settings",
                                                "max_template_field_count"),
            ),
            utils.SettingsMenuOption(
                ctx=ctx,
                display=lambda c: "Set max profile count (currently {0})".
                format(settings_mention(c, 'max_template_profile_count')),
                converter_args=[
                    utils.SettingsMenuConverter(
                        prompt=
                        "How many profiles should each template in this guild be able to create?",
                        asking_for="max profile count",
                        converter=int,
                    ),
                ],
                callback=utils.SettingsMenuOption.
                get_set_guild_settings_callback("guild_settings",
                                                "max_template_profile_count"),
            ),
        )
        try:
            await menu.start(ctx)
            await ctx.send("Done setting up!")
        except utils.errors.InvokedMetaCommand:
            pass