python-3.x 属性错误:"Context"对象没有属性"response"|www.example.comdiscord.py

6kkfgxo0  于 2023-02-26  发布在  Python
关注(0)|答案(1)|浏览(150)
`import discord
from discord.ext import commands
import time
import json
import platform
from discord import ui

class MyModal(ui.Modal):
    added = ui.TextInput(label='What did you add', placeholder='## What did you add...', style=discord.TextStyle.long)
    removed = ui.TextInput(label='What did you remove', placeholder='## What did you remove...', style=discord.TextStyle.long)

class Client(commands.Bot):

    client = commands.Bot(command_prefix='!', intents=discord.Intents().all())
    async def on_ready(self):
        print('Logged in as: ' + self.user.name)
        print('Bot ID:' + str(self.user.id))
        print('Discord Version: ' + discord.__version__)
        print('Python Version: ' + str(platform.python_version()))

client = Client.client

@client.command(name="modal")
async def modal(interaction: discord.Interaction):
    await interaction.response.send_modal(MyModal)

client.run(TOKEN)`

我关注了一个youtube tutorial,我没有写所有相同的东西。
基本上,我想在输入命令(带前缀)时实现一个不一致的模态:'模态'我写的像视频中的家伙:
等待交互。响应。发送模态(MyModal())
因为这对他有效,我想我也会为我自己工作。
我也试过:
client.tree.command
但错误是"命令'modal'是找不到",同样的async def on_ready(self)也不工作,但我不认为这在这个问题的问题。程序正在检测'! modal'命令,但没有显示实际的模态。
属性错误:"Context"对象没有属性"response",我在那里没有上下文,因此不应将其检测为上下文。我知道上下文没有"response",但我在那里有交互。

  • 我需要帮助,因为我想不通。
ttcibm8c

ttcibm8c1#

我看了你的问题,其实很容易解决。
首先,你在~commands.Bot类中定义了一个~commands.Bot变量,你的bot类应该是这样的:

class MyBot(commands.Bot):
    
    def __init__(self, *args, **kwargs) -> None:
        super().__init__(*args, **kwargs)

client = MyBot(...) # replace the ... with the args and kwargs you are going to use

模态类中一切正常,但错误在响应中。正如您的问题描述所述,您正在尝试使用!modal来调用它,对吗?您必须知道~commands.Context不能将模态作为响应发送,模态只能由~Interaction.response.send_modal调用(在应用程序命令和视图中)此外,您将使用discord.Interaction响应定义client.command,将@client.command()替换为@client.tree.command(),并且在发送时丢失了titleModal上的括号,请按以下方式进行修复:

@client.tree.command()
async def modal(interaction: discord.Interaction) -> None:
    await interaction.response.send_modal(Modal(title="Your Title"))

请记住,您将需要同步命令,这可能需要1小时。要同步它们,我强烈建议使用这样的命令:

@client.command()
async def sync(ctx: commands.Context) -> None:
    synced = await client.tree.sync()
    await ctx.reply("Synced {} commands".format(len(synced)))

任何其他疑问请在评论中提出

  • 编辑:*

您实际上忘记了模态上的回调:

class Modal(ui.Modal):
    
    ...

    async def callback(self, interaction: discord.Interaction) -> None:

        embed = discord.Embed(title="Modal Results", description = f"Added: {self.added.value}\nRemoved: {self.removed.value}") # you can remove the `.value` on `self.added` and `self.removed` if error is raised.

        await interaction.response.send_message(embeds=[embed], ephemeral=True)

相关问题