首页 > 编程问答 >从列表中动态选择不和谐机器人

从列表中动态选择不和谐机器人

时间:2024-08-08 16:12:53浏览次数:10  
标签:python discord.py

我向用户发送一个模态并期望用户的响应,收到它后,对其进行处理并接收一个列表(列表中的元素不超过 20 个),并且还向用户发送一个带有选择的选择从这个列表中。我收到此错误:

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)

我尝试将变量设置为全局变量,但没有帮助。谁能帮我这个?我将不胜感激任何指导。提前致谢!


问题在于尝试在定义 Select_buyer 类的代码运行时访问 character_in_raid 变量,但该变量是在稍后创建 Select_buyer 类的实例时才设置的。

以下是解决此问题的方法:

  1. character_in_raid 作为参数传递给 Select_buyer ,并在 Select 选项中使用该参数。
class logs_input(discord.ui.Modal, title="Test"):
    # ... (your existing code) ...

    async def on_submit(self, interaction: discord.Interaction):
        # ... (your existing code) ...
        view = Select_buyer(character_in_raid)  # Pass the list to the view
        await interaction.response.send_message(view=view)


class Select_buyer(discord.ui.View):
    def __init__(self, character_list, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.character_list = character_list  # Store the list

        # Create select options dynamically
        options = [discord.SelectOption(label=char['name'], value=char['name']) 
                   for char in self.character_list]
        self.buyer_select.options = options  # Assign options to the select

    @discord.ui.select(
        placeholder="Choose buyer",
        min_values=0, max_values=20,
    )
    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)

在此解决方案中:

  • 我们将 character_in_raid 作为参数传递给 Select_buyer __init__ 方法。
  • __init__ 方法中,我们将传递的列表存储在 self.character_list 中。
  • 然后,我们在 __init__ 方法中创建 SelectOption 列表,并使用 self.character_list 填充它。
  • 最后,我们将创建的选项列表分配给 self.buyer_select.options

  • buyer_select 回调函数中访问 character_in_raid ,因为它在交互发生时可用。

class logs_input(discord.ui.Modal, title="Test"):
    # ... (your existing code) ...


class Select_buyer(discord.ui.View):
    @discord.ui.select(
        placeholder = "Choose buyer",
        min_values=0, max_values=20, 
    )
    async def buyer_select(self, interaction: discord.Interaction, select: discord.ui.Select):
        # Access the character_in_raid list from the logs_input instance
        character_in_raid = interaction.client.get_application().get_modal("Test").character_in_raid

        # Create options dynamically using the retrieved list
        options = [discord.SelectOption(label=char['name'], value=char['name']) 
                   for char in character_in_raid]
        select.options = options  # Update the select options

        selected_values = select.values
        print(selected_values)
        await interaction.response.send_message(selected_values)

在此解决方案中:

  • 我们在 buyer_select 回调函数中访问 character_in_raid
  • 我们使用 interaction.client.get_application().get_modal("Test").character_in_raid logs_input 实例获取 character_in_raid 列表。
  • 然后,我们像以前一样创建 SelectOption 列表,并使用检索到的列表填充它。
  • 最后,我们使用新的选项列表更新 select.options

这两种方法都可以解决的问题。 选择最适合的解决方案取决于的代码结构和个人喜好。

标签:python,discord.py
From: 78846808

相关文章

  • Python 熊猫迭代
    代码:#Importcarsdataimportpandasaspdcars=pd.read_csv('cars.csv',index_col=0)#Adaptforloopforlab,rowincars.iterrows():print(f"{[lab]}:{row['cars_per_cap']}")输出:['US']:809['A......
  • 【第九节】python中xml解析和json编解码
    目录一、PythonXML解析1.1什么是XML1.2Python对XML的解析方法1.3SAX解析xml1.4xml.dom解析xml1.6ElementTree解析XML二、Python编解码json2.1什么是json2.2使用json库2.3使用第三方库Demjson一、PythonXML解析1.1什么是XML        XML,......
  • 从 python 设置运算符符号到方法名称的映射是什么?它们与文档不匹配
    我创建了自己的Customset类,它实现了python集合的几乎所有方法。当我使用此自定义集的实例时,许多集合运算符都会失败。它们会失败,并显示类似以下内容的内容:TypeError:unsupportedoperandtype(s)for-:'Customset'andCustomset'orTypeError:'<='......
  • 21.python函数(return)
    return一、return语句1、return是指定一个返回值2、在python中创建一个函数,可以用return语句指定返回的的值,这个返回值可以是任意的类型3、return语句在同一个函数中可以出现多次,但是只有有一个得到执行,就会直接结束函数的执行。return后面的语句不执行了4、return的格式re......
  • 【Python代码】如何根据出生日期计算出年龄?
    哈喽,大家好,木易巷来啦!假设我们有一个包含出生日期的Excel文件,需要计算每个人的年龄,你会怎么做呢?具体情况如下图:今天木易巷分享通过Python及其强大的pandas库,来实现从Excel文件中读取日期数据,计算年龄,并将结果存储回Excel文件中的过程。话不多说,开干!▍1、环境准备在开......
  • python 无法解密重音字符(如 è),我该怎么办?
    我正在解决这个ctf,您必须使用PyCryptodome模块通过DES加密消息。消息是“Launghezzadiquestafrasenonèdivisibileper8”(意大利语)。我无法将此消息转换为字节,因为重音字符不包含在utf-8中(我认为这就是解释)。有人可以帮我加密消息吗?fromCrypto.Util.Paddingimp......
  • Python笔记
    Python1变量1、什么是变量变量是关联一个对象的标识符变量可以绑定一个对象,并可以通过变量名使用这个对象2、变量的命名方法:以字母或下划线开头,后面跟字母、下划线或者数字3、python中的关键字不能用作变量名4、变量无类型,对象有类型5、在交互模式下查看当前作用域内的......
  • 如何在python中使用jdbc jar文件连接informix数据库
    有什么想法如何使用jdbcjar文件连接到informix数据库吗?在python我尝试了jaydebeapi,当我执行时:conn=jaydebeapi.connect('com.informix.jdbc.IfxDriver',myurl,['user','pass'],jdbc_driver_path)...然后从表中选择数据的其余代码当我执行myscript.py它只......
  • Python爬虫实战:实时微信推送奥运奖牌榜信息
    最近奥运会正在巴黎如火如荼地进行。为了能第一时间获得我国运动健儿的获奖情况,我给大家分享一个python爬虫项目——实时微信推送奥运奖牌榜信息。爬虫每隔5分钟抓取一次奥林匹克官网奖牌榜数据,对比上次抓取的数据,如果奖牌数量或者排名有变化,就将新的获奖信息推送到......
  • 基于Python实现可视化分析中国500强排行榜数据的设计与实现
    基于Python实现可视化分析中国500强排行榜数据的设计与实现“DesignandImplementationofVisualAnalysisforChina’sTop500CompaniesRankingDatausingPython”完整下载链接:基于Python实现可视化分析中国500强排行榜数据的设计与实现文章目录基于Python......