Как внести изменения в Embed сообщение, отправленное ботом с использованием disnake?

Как можно изменить код, чтобы при нажатии на кнопку "Внести в список" бот добавлял в список упоминание нажавшего на кнопку, а при нажатии на кнопку "Вынести из списка" удалял из этого списка упоминание пользователя? Изображение сообщения, которое в данный момент отправляется.
  • 10 июля 2024 г. 9:12
Ответы на вопрос 2
Для внесения изменений в Embed сообщение, отправленное ботом с использованием disnake, можно использовать метод edit_original_message() для обновления отправленного сообщения. 

Чтобы реализовать функционал добавления и удаления упоминаний пользователя из списка при нажатии на кнопки, вам нужно использовать функцию set_handler() для добавления обработчиков нажатия на кнопки. В обработчиках вы можете добавить логику для добавления или удаления упоминания пользователя из списка и затем обновить Embed сообщение с помощью метода edit_original_message().

Пример кода для добавления функционала кнопок "Внести в список" и "Вынести из списка" и обновления Embed сообщения:

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

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

user_list = []

@bot.command()
async def send_embed(ctx):
    embed = disnake.Embed(title="Список пользователей", description='\n'.join(user_list))
    message = await ctx.send(embed=embed)
    
    async def add_user_button(ctx):
        user_list.append(ctx.author.mention)
        new_embed = disnake.Embed(title="Список пользователей", description='\n'.join(user_list))
        await message.edit(embed=new_embed)
        
    async def remove_user_button(ctx):
        if ctx.author.mention in user_list:
            user_list.remove(ctx.author.mention)
            new_embed = disnake.Embed(title="Список пользователей", description='\n'.join(user_list))
            await message.edit(embed=new_embed)
    
    add_button = disnake.Button(label="Внести в список", custom_id="add_user", style=disnake.ButtonStyle.green)
    remove_button = disnake.Button(label="Вынести из списка", custom_id="remove_user", style=disnake.ButtonStyle.red)
    
    add_button.set_handler(add_user_button)
    remove_button.set_handler(remove_user_button)
    
    await message.edit(components=[[add_button, remove_button]])

bot.run('TOKEN')
```

Пожалуйста, замените 'TOKEN' на ваш токен бота. Данный код добавляет функционал кнопок "Внести в список" и "Вынести из списка" для добавления или удаления упоминания пользователя из списка и обновления Embed сообщения.
Для редактирования есть единственный метод <a href="https://docs.disnake.dev/en/stable/api/interactions.html#disnake.InteractionResponse.edit_message" rel="nofollow">edit_message</a> , где в <i>embed </i> или <i>embeds</i> будет лежать ваш эмбед. Его нужно изменить или положить новый с измененными данными. <br/> <br/> С эмбедом можно работать через <a href="https://docs.disnake.dev/en/stable/api/messages.html#disnake.Embed" rel="nofollow">его методы</a> , а можно работать с обычным словарем через методы <a href="https://docs.disnake.dev/en/stable/api/messages.html#disnake.Embed.to_dict" rel="nofollow">Embed.to_dict</a> и <a href="https://docs.disnake.dev/en/stable/api/messages.html#disnake.Embed.from_dict" rel="nofollow">Embed.from_dict</a> . Структура у него простая и подробно описана в <a href="https://discord.com/developers/docs/resources/channel#embed-object-embed-structure" rel="nofollow">офф документации</a> . <br/> <br/> Далее пишите свою логику, которая будет искать нужный кусок текста и удалять его. Со вставкой будет проще, дописывайте в конец.
Похожие вопросы