aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arthur/exts/cloudflare/zones.py75
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: