@S1harell

Как импортировать создателя модуля?

Как можно импортировать создателя модуля так, чтобы при нажатии на кнопку "Одобрить", выдавалась роль именно игроку создавшему модуль, а не тому, кто нажал на кнопку

# ————————————————————————————————————————————————————————————————————————————————————————————————————————————
# (1) Панель регистрации

@bot.command()
async def panel(interaction: discord.Integration):
    await interaction.channel.send(view=Registr())


# (2) Кнопка

class Registr(discord.ui.View):
    def __init__(self)->None:
        super().__init__(timeout=None)

    @discord.ui.button(label="Загрегистрироваться", style=discord.ButtonStyle.success)
    async def on_button_click(self, interaction: discord.Interaction, button: discord.ui.Button):
        await interaction.response.send_modal(Registr_Modal())


# (3) Модуль

class Registr_Modal(discord.ui.Modal):
    def __init__(self):
        super().__init__(title="Регистрация")

        self.A = discord.ui.TextInput(label="Ваш ник в Minecraft", style=short)
        self.add_item(self.A)
        self.B = discord.ui.TextInput(label="Сколько вам лет?", style=short)
        self.add_item(self.B)
        self.C = discord.ui.TextInput(label="Оцените свою адекватность от 1 до 10", style=short)
        self.add_item(self.C)
        self.D = discord.ui.TextInput(label="Откуда вы узнали о сервере", style=short)
        self.add_item(self.D)
        self.E = discord.ui.TextInput(label="Что для вас важно для игры на сервере", style=paragraph)
        self.add_item(self.E)

    async def on_submit(self, interaction: discord.Interaction) -> None:
        me = interaction.guild.get_member()
        channel = bot.get_channel(1081988053305938020)
        embed = discord.Embed(
            title = "Анкетаㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ",
            description = f"**Анкета игрока {interaction.user.mention}**\n"
            f"Ник - {self.A.value}\n"
            f"Возраст - {self.B.value}\n"
            f"Адекватность - {self.C.value}\n"
            f"Сайт - {self.D.value}\n"
            f"Важно - {self.E.value}",
        )
        await interaction.response.send_message("Я отправил ваше резюме на проверку\nСпасибо за регистрацию", ephemeral=True)
        await channel.send(embed=embed, view=Button1())


# (4) Кнопка

class Button1(discord.ui.View):
    def __init__(self) -> None:
        super().__init__(timeout=None)

    @discord.ui.button(label="Одобрить", style=discord.ButtonStyle.success)
    async def a(self, interaction: discord.Interaction, button: discord.ui.Button):

        await interaction.response.send_message("1")

    @discord.ui.button(label="Отклонить", style=discord.ButtonStyle.red)
    async def b(self, interaction: discord.Interaction, button: discord.ui.Button):
        
        await interaction.response.send_message("2")

    @discord.ui.button(label="Отклонить без права на апелляцию", style=discord.ButtonStyle.red)
    async def c(self, interaction: discord.Interaction, button: discord.ui.Button):

        await interaction.author.add_roles(interaction.guild.get_role(1089157878910287933))
        await interaction.message.delete()


# ————————————————————————————————————————————————————————————————————————————————————————————————————————————
  • Вопрос задан
  • 46 просмотров
Решения вопроса 1
ghqstlysoul
@ghqstlysoul
Discord: ghqstlysoul
Сохранять в БД информацию о авторке модалки и айди сообщения присланной модалки, при нажатии на кнопку искать в БД это сообщение, находить по нему автора, после чего выдавать роль по полученной информации:

member = disnake.Guild.get_member()
role = disnake.Guild.get_role()
await member.add_roles(role)


По другому это сделать нельзя, кэш бота не сохраняет в себе информацию о авторах модалки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы