当我运行代码时,出现“AttributeError:“Context”对象没有属性响应”错误,还有其他方法可以让它运行吗?

问题描述 投票:0回答:1

所以我使用discord.py 创建一个简单的discord 模式。但是每当我运行代码时,我都会收到一个 attributeError ,指出“上下文”对象没有响应属性。我知道这是真的,但我需要通过函数传递交互来发送模态。

其他人建议在我的代码中添加 “await interaction.interaction.response.defer(ephemeral = True)”,但这似乎也不起作用。我想知道是否有其他方法可以使其发挥作用。我对模态感到困惑。请告诉我他们是否有不同的工作方式。

这是我的代码:

import discord
from discord.ext import commands
from discord import ui


intents = discord.Intents.default()
intents.message_content = True

client = commands.Bot(command_prefix="?",intents=intents.all())


@client.event
async def on_ready():
    print(f'We have logged in as {client.user}')


@client.command()
async def check(ctx):
    await ctx.send("What's up chat")

@client.command()
async def banana(ctx):
    await ctx.send("banana")

@client.command(name="modaltest")
async def modaltest(interaction: discord.Interaction):
    class MyModal(ui.Modal,title="Whatsup"):
        answer=discord.ui.TextInput(label="(LABEL_",style=discord.TextStyle.short, placeholder="Yes",default="Yes/No",required=True)
        async def on_submit(self, interaction: discord.Interaction):
            await interaction.response.send_message("It's time")
    await interaction.interaction.response.defer(ephemeral=True)
    await interaction.response.send_modal(MyModal())




client.run('MTIxODQ3Mzg2ODY1MDQ4MzczMw.G8d8uK.vj-ccD6EXDXBRS7QBTYs3AcVTBGDK366ElpJFk')

这是输出:

[2024-04-06 19:57:56] [INFO    ] discord.gateway: Shard ID None has connected to Gateway (Session ID: 81799a7cbd347820290acba7203ba543).
We have logged in as Test bot#2666
[2024-04-06 19:58:07] [ERROR   ] discord.ext.commands.bot: Ignoring exception in command modaltest
Traceback (most recent call last):
  File "C:\Users\abhyu\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\discord\ext\commands\core.py", line 235, in wrapped
    ret = await coro(*args, **kwargs)
  File "C:\Users\abhyu\Desktop\python\main2.py", line 33, in modaltest
    await interaction.interaction.response.defer(ephemeral=True)
AttributeError: 'NoneType' object has no attribute 'response'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\abhyu\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\discord\ext\commands\bot.py", line 1350, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\abhyu\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\discord\ext\commands\core.py", line 1029, in invoke
    await injected(*ctx.args, **ctx.kwargs)  # type: ignore
  File "C:\Users\abhyu\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\discord\ext\commands\core.py", line 244, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'NoneType' object has no attribute 'response'

如果有人有办法实际运行模态,或者我的代码有问题,请告诉我!

(哦,还有一个问题,如何从模态中获取用户提交的输入)

python discord.py
1个回答
0
投票

首先,我不知道你最后一行中的它是否是真正的令牌,但永远不会在线分享它,因为它可以用来控制你的机器人。我建议您立即重置您的令牌,因为如果您不这样做,所有带有机器人的服务器都可能会受到损害。

现在看看错误: 在第 33 行你写了

await interaction.interaction.response.defer(ephemeral=True)

但必须如此

await interaction.response.defer(ephemeral=True)

另外,下面这是我的工作模式,但该类不在命令本身中:

class Modal(discord.ui.Modal):
    def __init__(self, *args, **kwargs) -> None:
        super().__init__(*args, **kwargs)

        self.add_item(discord.ui.TextInput(label="Short Input"))
        self.add_item(discord.ui.TextInput(label="Long Input", style=discord.TextStyle.long))

    async def on_submit(self, interaction: discord.Interaction):
        embed1=discord.Embed(title="Modal Results", description=f'|- **Short Input:** ```{self.children[0].value}``` |- **Long Input:** ```{self.children[1].value}```', color=discord.Colour.purple())
        await interaction.response.send_message(embed=embed1, ephemeral=True)

在这种情况下,您将获得输入

{self.children[0].value}

{self.children[1].value}

可以在嵌入中看到的 f 字符串中使用,发送 on_submit

希望我能帮上忙!如果出现任何其他问题或提供的代码不起作用,请随时与我联系。

© www.soinside.com 2019 - 2024. All rights reserved.