Динамический выбор из списка для бота Discord

Я отправляю пользователю модал и ожидаю от пользователя ответа, после его получения он обрабатывается и получает список (в списке не более 20 элементов), а также отправляет пользователю select с выбором из этого списка. Я получил эту ошибку:

for character in character_in_raid ['name']]
                     ^^^^^^^^^^^^^^^^^
NameError: name 'character_in_raid' is not defined

Это мой текущий код:

class logs_input(discord.ui.Modal, title = "Test"):
    tst = discord.ui.TextInput(label = "1")    
    async def on_submit(self, interaction: discord.Interaction):
        log_code = self.tst.value
        response = get_token()
        store_token(response)
        log_parse = get_logs.log_character(log_code)
        global character_in_raid
        character_in_raid = log_parse['rankedCharacters']
        for character in character_in_raid:
            print(character)
        await interaction.response.send_message(view=Select_buyer())


class Select_buyer(discord.ui.View):
        
    @discord.ui.select(
        placeholder = "Choose buyer",
        min_values=0, max_values=20, 
        options= [discord.SelectOption
            (label=character['name'], value=character['name'])
                 for character in character_in_raid ['name']]
    )

    async def buyer_select(self, interaction: discord.Interaction, select: discord.ui.Select):
        selected_values = select.values
        print(selected_values)
        await interaction.response.send_message(selected_values)

Я попробовал сделать переменную глобальной, но это не помогло. Может ли кто-нибудь помочь мне с этим? Я буду признателен за любые рекомендации. Заранее спасибо!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте это:

class _Select(discord.ui.Select):
        def __init__(self, list_options:List[discord.SelectOption]):
            super().__init__(options=list_options)

        async def callback(self, interaction: discord.Interaction):
              selected_values = self.values
              await interaction.response.send_message(selected_values)

class Select_buyer(discord.ui.View):
    def __init__(self, list_options:List[discord.SelectOption]):
        super().__init__()
        self.component=_Select(list_options)
        self.add_item(self.component)

И затем, в конце вашего класса logs_input

options = [discord.SelectOption(label=character['name'], value=character['name']) for character in character_in_raid]
await interaction.response.send_message(view=Select_buyer(list_options=options))

Добавил, ошибка осталась та же

Tirimy 08.08.2024 12:20

Обязательно замените свой Select_buyer класс на мой

broch 08.08.2024 14:47

О, это работает. Большое спасибо

Tirimy 08.08.2024 17:19

Другие вопросы по теме