Можно ли как-то отключить Select menu discord.py, когда был выбран элемент
Селект меню
class Select_Menu(discord.ui.Select):
def __init__(self, variants, custom_id):
options = [discord.SelectOption(label=el) for el in variants]
super().__init__(placeholder="Выберите шаблон", max_values=1, min_values=1, options=options)
async def callback(self, interaction: discord.Interaction):
# self.disabled = True не работает
await interaction.respond(f"Вы выбрали {self.values[0]}", delete_after=3)
Сама слэш-команда
@bot.command()
async def flavor(ctx: discord.ApplicationContext):
check_user(ctx) # Проверка на наличие в БД
patterns = check_patterns(ctx) # Проверка на наличие в БД и получение данных
view = discord.ui.View(timeout=None)
if len(patterns) == 0:
await ctx.respond("Вам нужно создать шаблон(ы) -> **/create_pattern**", delete_after=5)
else:
select = Select_Menu(patterns, "patterns")
view.add_item(select)
await ctx.respond(view=view)
Cуть в том, что я хочу сделать так, чтобы я мог дальше создавать эти селекты в слэш команде по очереди, сначала с одиними данными (1), потом с другими (2), которые опираются на данные из предыдущего селекта, но мне надо, чтобы предыдущий селект становился нерабочим, после выбора в нем значения.
ПОЯСНЕНИЕ
Вызывается команда, появляется первый селект:
- выбираются значения
- первый селект становится неактивным
появляется второй селект:
- данные отображаются в зависимости от выбора в первом селекте
- второй селект становится неактивным и тд
Ответы (1 шт):
Автор решения: Никита
→ Ссылка
class View(discord.ui.View):
@discord.ui.select(placeholder="Выберите шаблон", max_values=1, min_values=1)
async def select_callback(self, select, interaction):
select.disabled = True # set the status of the select as disabled
select.placeholder = select.values[0]
await interaction.response.edit_message(view=self)
@bot.command()
async def flavor(ctx: discord.ApplicationContext):
check_user(ctx)
patterns = check_patterns(ctx)
if len(patterns) == 0:
await ctx.respond("Вам нужно создать шаблон(ы) -> **/create_pattern**", delete_after=5)
else:
view = View() # Сначала создаю View
view.children[0].options = [discord.SelectOption(label=el) for el in patterns] # Потом вручную добавляю параметр options
await ctx.response.send_message(view=view)
Вот так работает отключение View