async def sonacount(self, ctx: utils.Context): """Talks the bot through a setup""" key_display_function = lambda k: getattr(ctx.guild.get_role(k), 'mention', 'none') menu = utils.SettingsMenuIterableBase( cache_key='role_sona_count', key_display_function=key_display_function, value_display_function=str) menu.add_convertable_value( "What role do you want to set the sona count for?", commands.RoleConverter) menu.add_convertable_value( "How many sonas should people with this role be able to create?", int) menu.iterable_add_callback = utils.SettingsMenuOption.get_set_iterable_add_callback( database_name="role_list", column_name="role_id", cache_key="role_sona_count", database_key="SonaCount") menu.iterable_delete_callback = utils.SettingsMenuOption.get_set_iterable_delete_callback( database_name="role_list", column_name="role_id", cache_key="role_sona_count", database_key="SonaCount") await menu.start(ctx, clear_reactions_on_loop=True)
async def interactions(self, ctx: utils.Context): """Talks the bot through a setup""" key_display_function = lambda k: getattr(ctx.guild.get_role(k), 'mention', 'none') menu = utils.SettingsMenuIterableBase( cache_key='role_interaction_cooldowns', key_display_function=key_display_function, value_display_function=lambda v: utils.TimeValue(v).clean) menu.add_convertable_value( "What role do you want to set the interaction for?", commands.RoleConverter) menu.add_convertable_value( "How long should this role's cooldown be (eg `5m`, `15s`, etc)?", utils.TimeValue) menu.iterable_add_callback = utils.SettingsMenuOption.get_set_iterable_add_callback( database_name="role_list", column_name="role_id", cache_key="role_interaction_cooldowns", database_key="Interactions", serialize_function=lambda x: int(x.duration)) menu.iterable_delete_callback = utils.SettingsMenuOption.get_set_iterable_delete_callback( database_name="role_list", column_name="role_id", cache_key="role_interaction_cooldowns", database_key="Interactions") await menu.start(ctx, clear_reactions_on_loop=True)
async def buyabletemproles(self, ctx: utils.Context): """Talks the bot through a setup""" key_display_function = lambda k: getattr(ctx.guild.get_role(k), 'mention', 'none') menu = utils.SettingsMenuIterableBase( cache_key='buyable_temporary_roles', key_display_function=key_display_function, value_display_function=lambda v: f"{v['price']} for {utils.TimeValue(v['duration']).clean}") menu.add_convertable_value( "What role would you like to add to the shop?", commands.RoleConverter) menu.add_convertable_value("How much should the role cost?", int) menu.add_convertable_value( "How long should this role's cooldown be (eg `5m`, `15s`, etc)?", utils.TimeValue) def add_callback(menu: utils.SettingsMenu, ctx: utils.Context): async def callback(menu: utils.SettingsMenu, role: discord.Role, price: int, duration: utils.TimeValue): async with ctx.bot.database() as db: await db( """INSERT INTO buyable_temporary_roles (guild_id, role_id, price, duration) VALUES ($1, $2, $3, $4) ON CONFLICT (guild_id, role_id) DO UPDATE SET price=excluded.price, duration=excluded.duration""", role.guild.id, role.id, price, duration.duration) ctx.bot.guild_settings[ ctx.guild.id]['buyable_temporary_roles'][role.id] = { 'price': price, 'duration': duration.duration } return callback menu.iterable_add_callback = add_callback def delete_callback(menu: utils.SettingsMenu, ctx: utils.Context, role_id: int): async def callback(menu: utils.SettingsMenu): async with ctx.bot.database() as db: await db( """DELETE FROM buyable_temporary_roles WHERE guild_id=$1 AND role_id=$2""", ctx.guild.id, role_id) ctx.bot.guild_settings[ ctx.guild.id]['buyable_temporary_roles'].pop(role_id) return callback menu.iterable_delete_callback = delete_callback await menu.start(ctx, clear_reactions_on_loop=True) self.bot.dispatch("shop_message_update", ctx.guild)
async def removerolesonmute(self, ctx: utils.Context): """Talks the bot through a setup""" key_display_function = lambda k: getattr(ctx.guild.get_role(k), 'mention', 'none') menu = utils.SettingsMenuIterableBase( cache_key='removed_on_mute_roles', key_display_function=key_display_function, value_display_function=str) menu.add_convertable_value( "What role do you want to be removed on mute?", commands.RoleConverter) menu.iterable_add_callback = utils.SettingsMenuOption.get_set_iterable_add_callback( database_name="role_list", column_name="role_id", cache_key="removed_on_mute_roles", database_key="RemoveOnMute") menu.iterable_delete_callback = utils.SettingsMenuOption.get_set_iterable_delete_callback( database_name="role_list", column_name="role_id", cache_key="removed_on_mute_roles", database_key="RemoveOnMute") await menu.start(ctx, clear_reactions_on_loop=True)
async def disableinteractions(self, ctx: utils.Context): """Talks the bot through a setup""" key_display_function = lambda k: getattr(ctx.guild.get_channel(k), 'mention', 'none') menu = utils.SettingsMenuIterableBase( cache_key='disabled_interaction_channels', key_display_function=key_display_function, value_display_function=str) menu.add_convertable_value( "What channel you want the interaction commands to be disabled in?", commands.TextChannelConverter) menu.iterable_add_callback = utils.SettingsMenuOption.get_set_iterable_add_callback( database_name="channel_list", column_name="channel_id", cache_key="disabled_interaction_channels", database_key="DisabledInteractionChannel") menu.iterable_delete_callback = utils.SettingsMenuOption.get_set_iterable_delete_callback( database_name="channel_list", column_name="channel_id", cache_key="disabled_interaction_channels", database_key="DisabledInteractionChannel") await menu.start(ctx, clear_reactions_on_loop=True)
async def buyableroles(self, ctx: utils.Context): """Talks the bot through a setup""" key_display_function = lambda k: getattr(ctx.guild.get_role(k), 'mention', 'none') menu = utils.SettingsMenuIterableBase( cache_key='buyable_roles', key_display_function=key_display_function, value_display_function=str) menu.add_convertable_value( "What role would you like to add to the shop?", commands.RoleConverter) menu.add_convertable_value("How much should the role cost?", int) menu.iterable_add_callback = utils.SettingsMenuOption.get_set_iterable_add_callback( database_name="role_list", column_name="role_id", cache_key="buyable_roles", database_key="BuyableRoles") menu.iterable_delete_callback = utils.SettingsMenuOption.get_set_iterable_delete_callback( database_name="role_list", column_name="role_id", cache_key="buyable_roles", database_key="BuyableRoles") await menu.start(ctx, clear_reactions_on_loop=True)