Skip to content

Commit f26a6fc

Browse files
fix(commands): fixes for docs slash command (#408)
1 parent 41ec5fe commit f26a6fc

File tree

1 file changed

+35
-6
lines changed

1 file changed

+35
-6
lines changed

src/discord_bot/views.py

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,40 @@ class DocsCommandDefaultProjects:
2626
def __init__(self):
2727
self.projects = get_json(url='https://app.lizardbyte.dev/dashboard/readthedocs/projects.json')
2828
self.projects_options = []
29+
# Track used values to prevent duplicates
30+
used_values = set()
31+
self.value_to_project_map = {}
32+
33+
counter = 0
2934
for project in self.projects:
3035
try:
3136
parent_project = project['subproject_of']['name']
3237
except (KeyError, TypeError):
3338
parent_project = None
3439

40+
# Extract repository name to use as value
41+
original_value = project['repository']['url'].rsplit('/', 1)[-1].rsplit('.git', 1)[0]
42+
value = original_value
43+
44+
# make sure the value is unique
45+
value = f"{original_value}-{counter}"
46+
47+
# Add to used values set
48+
used_values.add(value)
49+
50+
# Store mapping of modified value to original project identifier
51+
self.value_to_project_map[value] = original_value
52+
3553
self.projects_options.append(
36-
discord.SelectOption(label=project['name'],
37-
value=project['repository']['url'].rsplit('/', 1)[-1].rsplit('.git', 1)[0],
38-
description=f"Subproject of {parent_project}" if parent_project else None)
54+
discord.SelectOption(
55+
label=project['name'],
56+
value=value,
57+
description=f"Subproject of {parent_project}" if parent_project else None
58+
)
3959
)
4060

61+
counter += 1
62+
4163

4264
class DocsCommandView(discord.ui.View):
4365
"""
@@ -62,8 +84,12 @@ def __init__(self, ctx: discord.ApplicationContext):
6284
self.docs_project = None
6385
self.docs_version = None
6486

87+
# Create projects and store the mapping
88+
projects_handler = DocsCommandDefaultProjects()
89+
self.project_value_map = projects_handler.value_to_project_map
90+
6591
# reset the first select menu because it remembers the last selected value
66-
self.children[0].options = DocsCommandDefaultProjects().projects_options
92+
self.children[0].options = projects_handler.projects_options
6793

6894
# check selections completed
6995
def check_completion_status(self) -> Tuple[bool, discord.Embed]:
@@ -175,7 +201,10 @@ async def callback(self, select: Select, interaction: discord.Interaction):
175201
child.options = [discord.SelectOption(label='0')]
176202

177203
if child == self.children[1]: # choose docs version
178-
readthedocs = self.children[0].values[0]
204+
selected_value = self.children[0].values[0]
205+
206+
# Get the original project identifier from the mapping
207+
readthedocs = self.project_value_map.get(selected_value, selected_value)
179208

180209
versions = get_json(
181210
url=f'https://app.lizardbyte.dev/dashboard/readthedocs/versions/{readthedocs}.json')
@@ -189,7 +218,7 @@ async def callback(self, select: Select, interaction: discord.Interaction):
189218
description=f"Docs for {version['slug']} {version['type']}"
190219
))
191220

192-
child.options = options
221+
child.options = options[:25] # limit to 25 options
193222

194223
index += 1
195224

0 commit comments

Comments
 (0)