• Как отключить кнопку в on_timeout disnake?

    yunikeil
    @yunikeil
    Один из вариантов, это при отправке сообщения сохранять его объект. А в 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())
    Ответ написан
    Комментировать
  • Действие присваивания, элементу динамического массива, внутри функции, присваивает это значение всем копиям массива. Что делать?

    yunikeil
    @yunikeil Автор вопроса
    Просто заменил с запись указателя, циклом, проблема решена
    #include <iostream>
    #include <Windows.h>
    using std::cout;
    using std::cin;
    using std::endl;
    
    void prog(int** a) {
    
    
        int** g = new int* [3];
        for (int i = 0; i < 3; ++i)
            g[i] = new int[3];
    
        int** gg = new int* [3];
        for (int i = 0; i < 3; ++i)
            gg[i] = new int[3];
    
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
                g[i][j] = a[i][j];
            }
        }
    
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
                gg[i][j] = a[i][j];
            }
        }
    
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
                cout << a[i][j] << " ";
            }
            cout << endl;
        }
     
        g[1][1] = 1;
        cout << endl;
    
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
                cout << g[i][j] << " ";
            }
            cout << endl;
        }
        cout << endl;
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
                cout << gg[i][j] << " ";
            }
            cout << endl;
        }
        cout << endl;
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
                cout << a[i][j] << " ";
            }
            cout << endl;
        }
    }
    
    int main() {
        setlocale(0, "");
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
    
        int** meza = new int* [3];
        for (int i = 0; i < 3; ++i)
            meza[i] = new int[3];
    
        for (int i = 0; i < 3; ++i)
            for (int j = 0; j < 3; ++j)
                meza[i][j] = 0;
    
        prog(meza);
    
        cout << "\n\nEnd of program, xx: " << endl;
        return 0;
    }
    Ответ написан
    Комментировать