• Как передать автора модального окна в view?

    @prostovladikxd Автор вопроса
    interaction.author не работает: https://youtu.be/PNuKgFH_WXI
    Ответ написан
    Комментировать
  • Как сделать чтобы кнопки работали после перезапуска бота?

    @prostovladikxd Автор вопроса
    class moderamViewBot(commands.Bot):
        def __init__(self):
            super().__init__(command_prefix=commands.when_mentioned)
            self.persistent_views_added = False
    
        async def on_ready(self):
            print ('bot started')
            if not self.persistent_views_added:
                self.add_view(moderamView())
                self.persistent_views_added = True
    
    bot = moderamViewBot()
    
    
    conn = sqlite3.connect("users.db")
    cursor = conn.cursor()
    
    cursor.execute(
        """
        CREATE TABLE IF NOT EXISTS users (
            id INTEGER PRIMARY KEY,
            balance INTEGER
        )
        """
    )
    conn.commit()
    
    
    @bot.slash_command(name="givebalance", description="Выдать баланс")
    async def givebalance(interaction: disnake.ApplicationCommandInteraction, member: disnake.Member, balanc: int):
        user_id = member.id
        cursor.execute("SELECT * FROM users WHERE id=?", (user_id,))
        cursor.execute(f"UPDATE users SET balance=balance+{balanc} WHERE id=?", (user_id,))
        cursor.execute("SELECT * FROM users WHERE id=?", (user_id,))
        conn.commit()
        embed=disnake.Embed(title=f"Пользователю {member} было выдано {balanc} руб", description="", color=0x00BFFF)
        await interaction.response.send_message(embed=embed, ephemeral=True)
        embed=disnake.Embed(title=f"Вам было выдано {balanc}руб на баланс", description="", color=0x00BFFF)
        await member.send(embed=embed)
    
    @bot.slash_command(name="start", description="Личный Кабинет", dm_permission=True)
    async def start(interaction: disnake.ApplicationCommandInteraction):
        user_id = interaction.user.id
        cursor.execute("SELECT * FROM users WHERE id=?", (user_id,))
        user = cursor.fetchone()
    
        if user is None:
            cursor.execute("INSERT INTO users VALUES (?, 0)", (user_id,))
            conn.commit()
    
        embed=disnake.Embed(title=f"Ваш ID: {user[0]}\nБаланс: {user[1]}", description="", color=0x00BFFF)
        embed.add_field(name="Полезная Информация", value=" - подать объявление\n - Пополнить баланс\n - Вывод баланса\n - Тех.поддержка", inline=False)
        await interaction.response.send_message(embed=embed, ephemeral=True, view=profileView())
    
    
    
    class profileView(disnake.ui.View):
        def __init__(self):
            super().__init__(timeout=None)
    
        @disnake.ui.button(style=disnake.ButtonStyle.primary, emoji='', custom_id="but:1")
        async def b1_button_callback(self, button, interaction):
            embed=disnake.Embed(title=f"Выберите тип товара", description="", color=0x00BFFF)
            embed.add_field(name="Подсказка:", value="1️⃣ - аккаунты\n2️⃣ - вирты\n3️⃣ - Прочие услуги", inline=False)
            await interaction.response.send_message(embed=embed, ephemeral=True, view=opredView())
    
        @disnake.ui.button(style=disnake.ButtonStyle.green, emoji="", custom_id="but:2")
        async def b2_button_callback(self, button, interaction):
            await interaction.response.send_message("Кнопка нажата", ephemeral=True)
    
        @disnake.ui.button(style=disnake.ButtonStyle.secondary, emoji="", custom_id="but:3")
        async def b3_button_callback(self, button, interaction):
            await interaction.response.send_message("Кнопка нажата", ephemeral=True)
    
    class opredView(disnake.ui.View):
        def __init__(self):
            super().__init__(timeout=None)
    
        @disnake.ui.button(style=disnake.ButtonStyle.primary, emoji='1️⃣', custom_id="but:4")
        async def b4_button_callback(self, button, interaction):
            await interaction.response.send_modal(modal=akkModal())
        @disnake.ui.button(style=disnake.ButtonStyle.primary, emoji='2️⃣', custom_id="but:5")
        async def b5_button_callback(self, button, interaction):
            await interaction.response.send_modal(modal=virtModal())
        @disnake.ui.button(style=disnake.ButtonStyle.primary, emoji='3️⃣', custom_id="but:6")
        async def b6_button_callback(self, button, interaction):
            await interaction.response.send_modal(modal=allModal())
    
    
    
    class akkModal(disnake.ui.Modal):
        def __init__(self):
            components = [
                disnake.ui.TextInput(
                    label="ИГРА | ПРИЛОЖЕНИЕ | ПРОЕКТ",
                    placeholder="Пример: GTA 5 RP Сервер: Milton",
                    custom_id="1",
                    style=TextInputStyle.short,
                ),
                disnake.ui.TextInput(
                    label="ОПИСАНИЕ",
                    placeholder="Укажите описание аккаунта",
                    custom_id="2",
                    style=TextInputStyle.short,
                ),
                disnake.ui.TextInput(
                    label="ЦЕНА",
                    placeholder="Пример: 1500р",
                    custom_id="3",
                    style=TextInputStyle.short,
                ),
                disnake.ui.TextInput(
                    label="ДАННЫЕ",
                    placeholder="Логин: ... | Пароль: ... | Прочие данные: ...",
                    custom_id="4",
                    style=TextInputStyle.short,
                ),
            ]
            super().__init__(
                title=" | ЗАПОЛНИТЕ ДАННЫЕ",
                custom_id="create_tag",
                components=components,
            )
    
        async def callback(self, interaction: disnake.ModalInteraction):
            author = interaction.user
            objects = interaction.text_values["1"]
            opisanye = interaction.text_values["2"]
            cena_input = interaction.text_values["3"]
            login = interaction.text_values["4"]
            cena_input = ''.join(filter(str.isdigit, cena_input))
            cena = int(cena_input)
            await interaction.response.send_message("Объявление успешно отправлено!", ephemeral=True)
            embed=disnake.Embed(title=f"АККАУНТЫ", description=f"Продавец {author.mention}", color=0x00BFFF)
            embed.add_field(name=f"Игра | Приложение | Проект: {objects}", value="", inline=False)
            embed.add_field(name=f"Описание Аккаунта: {opisanye}", value="", inline=False)
            embed.add_field(name=f"Цена: {cena}", value="", inline=False)
            channel = bot.get_channel(1230041959305838663) #id канала куда будут приходить объявления на проверку модераторам
            await channel.send(embed=embed, view=moderamView(author, objects, opisanye, cena, login))
    
    
    class moderamView(disnake.ui.View):
        def __init__(self, author, objects, opisanye, cena, login):
            super().__init__(timeout=None)
            self.author = author
            self.button_pressed = False
            self.objects = objects
            self.opisanye = opisanye
            self.cena = cena
            self.login = login
    
        @disnake.ui.button(label="Одобрить", style=disnake.ButtonStyle.green, custom_id="but:7")
        async def b7_button_callback(self, button, interaction):
            if self.button_pressed == False:
                await interaction.response.send_message(f'Объявление {self.author.mention} рассмотрено', ephemeral=True)
                embed=disnake.Embed(title="Ваше объявление было успешно рассмотрено! Статус: Одобрено", description="", color=0x00BFFF)
                embed.add_field(name="Информация об объявлении:", value=f"Тип товара: Аккаунты\nИгра | Приложение | Проект: {self.objects}\nОписание аккаунта: {self.opisanye}\nЦена: {self.cena}", inline=False)
                await self.author.send(embed=embed)
                embed=disnake.Embed(title=f"АККАУНТЫ", description=f"", color=0x00BFFF)
                embed.add_field(name=f"Игра | Приложение | Проект: {self.objects}", value="", inline=False)
                embed.add_field(name=f"Описание Аккаунта: {self.opisanye}", value="", inline=False)
                embed.add_field(name=f"Цена: {self.cena}", value="", inline=False)
                login = self.login
                author = self.author
                objects = self.objects
                opisanye = self.opisanye
                cena = self.cena
                channel = bot.get_channel(1230041959305838663)#id канала со всеми одобреными объявлениями
                await channel.send(embed=embed, view=buyView(author, objects, opisanye, cena, login))
                self.button_pressed = True
    
                self.children[0].label = "❌"
                self.children[0].style = disnake.ButtonStyle.grey
                self.children[1].label = "❌"
                self.children[1].style = disnake.ButtonStyle.grey
                await interaction.message.edit(view=self)
    
            else:
                return
            
        @disnake.ui.button(label="Отклонить", style=disnake.ButtonStyle.red, custom_id="but:8")
        async def b8_button_callback(self, button, interaction):
            if self.button_pressed == False:
                await interaction.response.send_message(f'Объявление {self.author.mention} рассмотрено', ephemeral=True)
                embed=disnake.Embed(title="Ваше объявление было успешно рассмотрено! Статус: Отклонено", description="", color=0x00BFFF)
                embed.add_field(name="Информация об объявлении:", value=f"Тип товара: Аккаунты\nИгра | Приложение | Проект: {self.objects}\nОписание аккаунта: {self.opisanye}\nЦена: {self.cena}", inline=False)
                await self.author.send(embed=embed)
                self.button_pressed = True
    
                self.children[0].label = "❌"
                self.children[0].style = disnake.ButtonStyle.grey
                self.children[1].label = "❌"
                self.children[1].style = disnake.ButtonStyle.grey
                await interaction.message.edit(view=self)
    
            else:
                return

    вот исходный код, если посмотреть - то я думаю станет понятно зачем нужны параметры, а передать мне их нужно в 9 строку
    self.add_view(moderamView())
    Ответ написан