В новых версиях disnake.py следует использовать on_button_click иначе.
@bot.listen("on_button_click")
async def button_listener(inter: disnake.MessageInteraction):
if inter.component.custom_id == 'verify_button':
member = inter.guild.get_member(inter.author.id)
verify_role = disnake.utils.get(inter.guild.roles, name='Верифицирован')
unverified_role = disnake.utils.get(inter.guild.roles, name='Не Верифицирован')
if verify_role and unverified_role:
await member.add_roles(verify_role)
await member.remove_roles(unverified_role)
welcome_channel = disnake.utils.get(member.guild.channels, name='┇?│новые-игроки')
if welcome_channel:
await welcome_channel.send(f"Добро пожаловать, {member.mention}!")
await inter.response.send_message("Вы успешно верифицировались!", ephemeral=True)
А вот как создать сообщение с кнопкой:
@bot.event
async def on_member_join(member):
verify_channel = disnake.utils.get(member.guild.channels, name='верификация')
if verify_channel:
button = disnake.ui.Button(
style=disnake.ButtonStyle.green,
label="Верифицироваться",
custom_id="verify_button"
)
action_row = disnake.ui.ActionRow(button)
await verify_channel.send(
f"{member.mention}, Нажмите на кнопку, чтобы верифицироваться.",
components=[action_row]
)
Я зашел с твинка прошёл навигацию и при нажатии на кнопку Верификация мне в консоль выдает ошибку
Суть этого кода что когда игрок заходит у него роль "Не Верифицирован" у него доступен один канал "Верификация" и там бот отправляет сообщение "@зашедший, Нажмите на кнопку, чтобы верифицироваться." И ниже кнопка Верифицироваться и когда игрок нажимает на неё то ему дается роль Участник а роль Не верифицирован убирается и канал Верификация пропадает. Вот суть прошу помочь мне решить эту проблему.