Как внести изменения в 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 сообщения.
Для редактирования есть единственный метод edit_message , где в embed  или embeds будет лежать ваш эмбед. Его нужно изменить или положить новый с измененными данными. 

С эмбедом можно работать через его методы , а можно работать с обычным словарем через методы Embed.to_dict и Embed.from_dict . Структура у него простая и подробно описана в офф документации .

Далее пишите свою логику, которая будет искать нужный кусок текста и удалять его. Со вставкой будет проще, дописывайте в конец.
Похожие вопросы