diff options
| -rw-r--r-- | arthur/exts/cloudflare/zones.py | 75 |
1 files changed, 29 insertions, 46 deletions
diff --git a/arthur/exts/cloudflare/zones.py b/arthur/exts/cloudflare/zones.py index bad25c7..0e8212a 100644 --- a/arthur/exts/cloudflare/zones.py +++ b/arthur/exts/cloudflare/zones.py @@ -4,64 +4,48 @@ from discord.ext import commands from arthur.apis.cloudflare import zones from arthur.bot import KingArthur +from arthur.config import CONFIG from arthur.utils import generate_error_message class ZonesView(discord.ui.View): """This view allows users to select and purge the zones specified.""" - OPTIONS = [ - discord.SelectOption(label="pythondiscord.com", emoji="🌐"), - discord.SelectOption(label="pythondiscord.org", emoji="🌐"), - discord.SelectOption(label="pydis.com", emoji="🌐"), - discord.SelectOption(label="pydis.org", emoji="🌐") - ] - - def __init__(self) -> None: + def __init__(self, domains: dict[str, str]) -> None: super().__init__() + self.domains = domains + + for domain, zone_id in self.domains.items(): + self.children[0].add_option(label=domain, value=domain, description=zone_id, emoji="🌐") + async def interaction_check(self, interaction: discord.Interaction) -> bool: """Ensure the user has the DevOps role.""" - return KingArthur._is_devops(interaction) + return CONFIG.devops_role in [r.id for r in interaction.user.roles] @discord.ui.select( - placeholder="The zone(s) which should be purged...", - min_values=1, - max_values=4, - options=OPTIONS, - # This is needed in order to identify the drop down later on - # because discord.Item.type is NotImplemented - custom_id="select" + placeholder="Select a zone to purge...", ) async def select_zones( - self, dropdown: discord.ui.Select, - interaction: discord.Interaction + self, dropdown: discord.ui.Select, interaction: discord.Interaction ) -> None: """Drop down menu contains the list of zones.""" - pass + zone_name = dropdown.values[0] - @discord.ui.button(label="Purge zones!", style=discord.ButtonStyle.primary) - async def purge_zones( - self, - button: discord.ui.Button, - interaction: discord.Interaction - ) -> None: - """Button to purge the zones.""" - for zone_name in [child for child in self.children if child._provided_custom_id][0].values: - pydis_zones = await zones.list_zones(zone_name) - required_id = pydis_zones[zone_name] - purge_attempt_response = await zones.purge_zone(required_id) - if purge_attempt_response["success"]: - message = ":white_check_mark:" - message += " **Cache cleared!** " - message += f"The Cloudflare cache for `{zone_name}` was cleared." - else: - description_content = f"The cache for `{zone_name}` couldn't be cleared.\n" - if errors := purge_attempt_response["errors"]: - for error in errors: - description_content += f"`{error['code']}`: {error['message']}\n" - message = generate_error_message(description=description_content, emote=":x:") - await interaction.response.send(message) + required_id = self.domains[zone_name] + purge_attempt_response = await zones.purge_zone(required_id) + if purge_attempt_response["success"]: + message = ":white_check_mark:" + message += " **Cache cleared!** " + message += f"The Cloudflare cache for `{zone_name}` was cleared." + else: + description_content = f"The cache for `{zone_name}` couldn't be cleared.\n" + if errors := purge_attempt_response["errors"]: + for error in errors: + description_content += f"`{error['code']}`: {error['message']}\n" + message = generate_error_message(description=description_content, emote=":x:") + + await interaction.response.send_message(message) class Zones(commands.Cog): @@ -78,11 +62,10 @@ class Zones(commands.Cog): @zones.command(name="purge") async def purge(self, ctx: commands.Context) -> None: """Command to clear the Cloudflare cache of the specified zone.""" - view = ZonesView() - await ctx.send( - ":cloud: Pick which zone(s) that should have their cache purged", - view=view - ) + cf_zones = await zones.list_zones() + + view = ZonesView(cf_zones) + await ctx.send(":cloud: Pick which zone(s) that should have their cache purged", view=view) def setup(bot: KingArthur) -> None: |