У меня есть код:
import disnake
from disnake.ext import commands
from disnake import TextInputStyle
intents = disnake.Intents.default()
intents.message_content = True
intents.guilds = True
intents.members = True
bot = commands.Bot(command_prefix="!", intents=intents)
TARGET_CHANNEL_ID = 1241843585632964629 # Замените на ваш канал
ROLE_ID = 1241850021914214531 # Замените на ID вашей роли
EMBED_MESSAGE_ID = None # Переменная для хранения ID эмбед-сообщения
@bot.slash_command()
async def tags(inter: disnake.AppCmdInter):
await inter.response.send_modal(modal=MyModal(inter.user.id))
"""Sends a Modal to create a tag."""
class AcceptRejectView(disnake.ui.View):
def __init__(self, user_id):
super().__init__(timeout=None)
self.user_id = user_id
@disnake.ui.button(label="Принять", style=disnake.ButtonStyle.green)
async def accept_button(self, button: disnake.ui.Button, interaction: disnake.MessageInteraction):
guild = interaction.guild
member = guild.get_member(self.user_id)
role = guild.get_role(ROLE_ID)
if member and role:
await member.add_roles(role)
await interaction.response.send_message(f"Вы приняли предложение! Роль {role.name} выдана пользователю.",
ephemeral=True)
else:
await interaction.response.send_message("Не удалось выдать роль. Пользователь или роль не найдены.",
ephemeral=True)
@disnake.ui.button(label="Отклонить", style=disnake.ButtonStyle.red)
async def reject_button(self, button: disnake.ui.Button, interaction: disnake.MessageInteraction):
guild = interaction.guild
member = guild.get_member(self.user_id)
if member:
await member.send("Ваша заявка была отклонена.")
await interaction.response.send_message("Вы отклонили предложение! Пользователю отправлено уведомление.",
ephemeral=True)
else:
await interaction.response.send_message("Не удалось отправить уведомление. Пользователь не найден.",
ephemeral=True)
class MyModal(disnake.ui.Modal):
def __init__(self, user_id):
self.user_id = user_id
components = [
disnake.ui.TextInput(
label="Ваша ссылка",
placeholder="",
custom_id="description",
style=TextInputStyle.paragraph,
),
]
super().__init__(title="Регистрация", components=components)
async def callback(self, interaction: disnake.ModalInteraction):
user_input = interaction.text_values["description"]
embed = disnake.Embed(
title="Регистрация",
description=f"Ваша ссылка: {user_input}",
color=disnake.Color.blurple()
)
target_channel = bot.get_channel(TARGET_CHANNEL_ID)
if target_channel:
view = AcceptRejectView(self.user_id)
await target_channel.send(embed=embed, view=view)
await interaction.response.send_message("Сообщение отправлено в целевой канал!", ephemeral=True)
else:
await interaction.response.send_message("Целевой канал не найден.", ephemeral=True)
@bot.event
async def on_ready():
global EMBED_MESSAGE_ID
print(f'Logged in as {bot.user}!')
# Отправка эмбед-сообщения и добавление реакции
target_channel = bot.get_channel(TARGET_CHANNEL_ID)
if target_channel:
embed = disnake.Embed(
title="Нажмите на реакцию",
description="Добавьте реакцию на это сообщение для регистрации",
color=disnake.Color.blurple()
)
message = await target_channel.send(embed=embed)
EMBED_MESSAGE_ID = message.id
await message.add_reaction("✅")
@bot.event
async def on_reaction_add(reaction, user):
if user.bot:
return
if reaction.message.id == EMBED_MESSAGE_ID and str(reaction.emoji) == "✅":
("тут должна быть строчка которая вызывает MyModal")
И мне нужно чтобы после ивента
if reaction.message.id == EMBED_MESSAGE_ID and str(reaction.emoji) == "✅":
была команда которая вызывала бы class MyModal