Как можно решить ситуацию, когда объект не содержит атрибут 'send_model'?

Как можно исправить ошибку `AttributeError: 'MyButton' object has no attribute 'send_modal'` в коде?

Исправления будут вноситься в приведенный код ниже:
```python
class MyModal(discord.ui.Modal, title="test"):
    discord.ui.TextInput(label="fqqw", placeholder="qfwqwffw", style=discord.TextStyle.short)

class MyButton(discord.ui.View):
    @discord.ui.button(label='Закрыть', style=discord.ButtonStyle.red, emoji='❌')
    async def button_callback(ctx, self, interaction):
        modal1 = MyModal()
        await ctx.send_modal(MyModal)
```
  • 8 октября 2023 г. 13:57
Ответы на вопрос 2
Ошибка возникает потому, что объект `MyButton` не содержит атрибут `send_model`. В коде также есть несколько других ошибок.

Чтобы исправить данную ситуацию, необходимо внести следующие изменения:

```python
class MyModal(discord.ui.Modal):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.input = discord.ui.TextInput(label="fqqw", placeholder="qfwqwffw", style=discord.TextStyle.short)
        self.add_item(self.input)

    async def on_submit(self, interaction):
        await interaction.response.send_message("Input Value: " + self.input.value)

class MyButton(discord.ui.View):
    @discord.ui.button(label='Закрыть', style=discord.ButtonStyle.red, emoji='❌')
    async def button_callback(self, button, interaction):
        modal = MyModal()
        await interaction.response.send_message(
            "Click the button to open the Modal", view=modal
        )
```

Изменения, которые были внесены:

1. В классе `MyModal` добавлен конструктор `__init__`, в котором создается экземпляр `discord.ui.TextInput`. Этот экземпляр добавляется в модальное окно с помощью метода `add_item`.

2. В классе `MyModal` добавлен метод `on_submit`, который будет вызываться при отправке формы. В этом методе мы просто отправляем сообщение с содержимым введенного текста.

3. В классе `MyButton` изменена сигнатура метода `button_callback`. Убран параметр `ctx`. Вместо этого передается только `self` и `interaction`.

4. В методе `button_callback` создается экземпляр модального окна `MyModal`. Затем с помощью метода `send_message` у объекта `interaction.response` отправляется сообщение с модальным окном в качестве представления (`view`).
ctx и self - поменять их местами.
Похожие вопросы