Как можно получить содержание сообщения в disnake.interaction?

Как получить доступ к содержимому сообщения, к которому была добавлена кнопка, в disnake.py? Я создал класс кнопки и хочу получить содержимое сообщения при нажатии на кнопку, однако используемый метод `interaction.original_message` не возвращает обычный объект сообщения, к которому можно применять методы классического сообщения. Как можно решить эту проблему?
  • 21 января 2024 г. 19:38
Ответы на вопрос 2
В disnake (библиотека для Discord API, которая является форком discord.py), когда вы нажимаете на кнопку, создается объект `MessageInteraction`. Этот объект содержит информацию о интеракции, которая была инициирована через нажатие на кнопку.

Чтобы получить содержимое сообщения, к которому была прикреплена кнопка, вам нужно обратиться к свойству `message` объекта интеракции. Пример кода может выглядеть так:

```python
import disnake
from disnake.ext import commands

class MyButton(disnake.ui.Button):
    def __init__(self, label: str, custom_id: str):
        super().__init__(label=label, custom_id=custom_id)
    
    async def callback(self, interaction: disnake.MessageInteraction):
        # Получаем содержимое сообщения через свойство message
        message_content = interaction.message.content
        # Теперь message_content содержит текст сообщения, к которому была прикреплена кнопка
        await interaction.response.send_message(f"Содержимое сообщения: {message_content}", ephemeral=True)

bot = commands.Bot(command_prefix="!")

@bot.event
async def on_ready():
    print(f"Logged in as {bot.user}!")

@bot.command()
async def button(ctx):
    button = MyButton(label="Нажми меня", custom_id="my_button")
    view = disnake.ui.View()
    view.add_item(button)
    await ctx.send("Нажмите на кнопку чтобы получить содержимое сообщения.", view=view)

bot.run("YOUR_TOKEN")
```

В этом примере при нажатии кнопки функция `callback()` класса `MyButton` вызывает `interaction.message.content` чтобы получить содержимое текста оригинального сообщения. Затем она отправляет сообщение с этим содержимым обратно в чат. Обратите внимание, что отправленное сообщение будет видно только пользователю, который нажал на кнопку (`ephemeral=True`).

Пожалуйста, убедитесь, что вы используете актуальные версии библиотеки и вы полагаетесь на последнюю документацию disnake, так как API может изменяться со временем.
original_message это корутина. Соответственно рабочий код будет как вы сами и написали будет 
message = await interaction.original_message()
При этом в приложенном коде нет await

При любых подобных проблемах делайте print(type(obj)) и смотрите по документации что вам вернулось.
Похожие вопросы