Помогите с Python ошибка
Всем привет делаю бота для Discord на Python используя библиотеку disnake.py и у меня есть код на верификацию игрока вот код
bot.event
async def on_button_click(button):
if button.custom_id == 'verify_button':
member = button.guild.get_member(button.user.id)
role = disnake.utils.get(button.guild.roles, name='Верифицирован')
if role:
await member.add_roles(role)
welcome_channel = disnake.utils.get(member.guild.channels, name='┇👋│новые-игроки') # Имя канала для отправки приветственного сообщения
if welcome_channel:
await welcome_channel.send(f"Добро пожаловать, {member.mention}!")
Я зашел с твинка прошёл навигацию и при нажатии на кнопку Верификация мне в консоль выдает ошибку
Traceback (most recent call last):
File "C:\Users\Admin\AppData\Local\Programs\Python\Python313\Lib\site-packages\disnake\client.py", line 703, in _run_event
await coro(*args, **kwargs)
File "C:\Users\Admin\bot\bot.py", line 41, in on_button_click
if button.custom_id == 'verify_button':
^^^^^^^^^^^^^^^^
AttributeError: 'MessageInteraction' object has no attribute 'custom_id'
Суть этого кода что когда игрок заходит у него роль "Не Верифицирован" у него доступен один канал "Верификация" и там бот отправляет сообщение "@зашедший, Нажмите на кнопку, чтобы верифицироваться." И ниже кнопка Верифицироваться и когда игрок нажимает на неё то ему дается роль Участник а роль Не верифицирован убирается и канал Верификация пропадает. Вот суть прошу помочь мне решить эту проблему.
В новых версиях 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]
)
Ну так тебе пишет красным по чёрному, что в объекте button нет никакого custom_id. Выведи на экран, что у тебя в объекте button содержится (print(button)) и разбирайся. В чём проблема? Возможно, судя по трёхсекундному поиску в гугле, надо button.component.custom_id.
Или при создании кнопки ты не присваиваешь custom_id.