Один из вариантов, это при отправке сообщения сохранять его объект. А в timeout использоваться message.edit. Для нахождения нужного сообщения, можно перед Context.send использовать генерацию случайного набора символов и сохранять рядом с объектом сообщения + передавать в конструктор View. Как вариант тут хорошо подойдёт словарь, в котором ключ = случайный набор символов, а значения ключа - объект сообщения.
messages: dict = {
"18hsdijq": message,
...
}
Вот пример реализации на nexctcord, без использования словаря. Такой вариант не будет работать при нескольких отправленных сообщения одновременно.
class Confirm(nextcord.ui.View):
def __init__(self):
super().__init__()
self.timeout = 10
self.value = None
self.message = None
@nextcord.ui.button(label="Confirm", style=nextcord.ButtonStyle.green)
async def confirm(self, button: nextcord.ui.Button, interaction: nextcord.Interaction):
await interaction.response.send_message("Confirming", ephemeral=True)
self.value = True
@nextcord.ui.button(label="Cancel", style=nextcord.ButtonStyle.grey)
async def cancel(self, button: nextcord.ui.Button, interaction: nextcord.Interaction):
await interaction.response.send_message("Cancelling", ephemeral=True)
self.value = False
async def on_timeout(self):
for item in [self.confirm, self.cancel]:
item.disabled = True
await message.edit(view=self)
# Код из другого класса, для создания сообщения
@commands.command()
async def msg(self, ctx: Context):
if ctx.author.id not in self.bot.OWNERS:
return
global message
message = await ctx.send(content="Confirm", view=Confirm())