@NecromancerZerratul
Начинающий прогер

Как сделать, чтобы после выбора в disnake.ui.StringSelect отображалось имя меню?

Нигде не могу найти функцию, чтобы возвращала в первоначальный вид меню после выбора. Либо я слепой, либо лыжи не едут. Где эта функция находится. Либо если нет функции, то можете подсказать что делать?
Вот мой код. Выскакивает это меню с выбором игры. После выбора, появляется сообщение с новым меню где нужно выбрать категорию игры, ну а там дальше происходят свои функции. После этого второе меню с сообщением удаляется. И по идеи должно быть так чтобы первая меню сбрасывало твой выбор. Но никак не могу придумать как это сделать. Если использую edit_original_response то выводит ошибку.

class DropdownMenu(disnake.ui.StringSelect):

    def __init__ (self):
        options = [
            disnake.SelectOption(label = "Starcraft 2"),
            disnake.SelectOption(label = "Overwatch 2"),
            disnake.SelectOption(label = "League of Legends"),
            disnake.SelectOption(label = "Counter-Strike"),
            disnake.SelectOption(label = "Dota 2"),
            disnake.SelectOption(label = "Другое")
        ]

        super().__init__(
            placeholder = "Игры",
            min_values = 0,
            max_values = 1,
            options = options
        )

    async def callback(self, inter: disnake.MessageInteraction):
        
        if self.values[0] == "Starcraft 2":
            await inter.response.send_message(f"Выберите категорию {self.values[0]}", view = DropdownView(1))
        elif self.values[0] == "Overwatch 2":
            await inter.response.send_message(f"Выберите категорию {self.values[0]}", view = DropdownView(2))
        elif self.values[0] == "League of Legends":
            await inter.response.send_message(f"Выберите категорию {self.values[0]}", view = DropdownView(3))
        elif self.values[0] == "Counter-Strike":
            await inter.response.send_message(f"Выберите категорию {self.values[0]}", view = DropdownView(4))
        elif self.values[0] == "Dota 2":
            await inter.response.send_message(f"Выберите категорию {self.values[0]}", view = DropdownView(5))
        elif self.values[0] == "Другое":
            await inter.response.send_message(f"Выберите категорию {self.values[0]}", view = DropdownView(6))

class DropdownViewMenu(disnake.ui.View):

    def __init__(self):
        super().__init__(timeout = None)
        self.add_item(DropdownMenu())

class DropdownView(disnake.ui.View):

    def __init__(self, count):
        super().__init__(timeout = 120)
        if count == 1:
            self.add_item(DropdownStarCraft())
        elif count == 2:
            self.add_item(DropdownOverwatch())
        elif count == 3:
            self.add_item(DropdownLoL())
        elif count == 4:
            self.add_item(DropdownCS())
        elif count == 5:
            self.add_item(DropdownDota())
        elif count == 6:
            self.add_item(DropdownOther())

@bot.slash_command(name = "setting", description = "Для настройки голосового канала")
async def setting(inter: disnake.CommandInter):
    await inter.send("Настройка канала", delete_after = 3)
    await inter.send("Выберите игру в которую хотите пойти", view=DropdownViewMenu())
  • Вопрос задан
  • 38 просмотров
Решения вопроса 1
fenrir1121
@fenrir1121 Куратор тега discord.py
Начни с документации
Нигде не могу найти функцию, чтобы возвращала в первоначальный вид меню после выбора.
Потому что нет такой функции. Из первого меню создаете второе, из второго пересоздаете первое.

Если использую edit_original_response то выводит ошибку.
Если я правильно вас понял, вы после операций во втором сообщении хотите поправить первое. Второе о первом вообще ничего не знает. До вызова inter.response.send_message можно получить сообщение из inter.message, сохранить id и затем его отредактировать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы