@Cupik

Не показывает окно с выбором?

В питоне шарю плохо, сообщение выводит я меню с выбором нет. Что делать? Ошибки вообще нет

# -*- coding: utf-8 -*-
import disnake
import discord
from disnake.ext import commands
from disnake import TextInputStyle

TOKEN=''

bot = commands.Bot(
    command_prefix='!',
    sync_commands_debug=True
)


class RecruitementModal(disnake.ui.Modal):
    def init(self, arg):
        self.arg = arg  # arg - это аргумент, который передается в конструкторе класса RecruitementSelect
        """
        Также можно сделать так:
                components = [
            disnake.ui.TextInput(label="Ваше имя", placeholder="Введите ваше имя", custom_id="name"),
            disnake.ui.TextInput(label="Ваш возраст", placeholder="Введите ваш возраст", custom_id="age")
            disnake.ui.TextInput(
                label="Расскажите о себе и почему именно вы?",
                placeholder="Расскажи о себе здесь",
                custom_id="info",
                style=disnake.TextInputStyle.paragraph,
                min_length=10,
                max_length=500,
            )
        ]
        """
        components = [
            disnake.ui.TextInput(label="Ваше имя", placeholder="Введите ваше имя", custom_id="name"),
            disnake.ui.TextInput(label="Ваш возраст", placeholder="Введите ваш возраст", custom_id="age")
        ]
        if self.arg == "moderator":
            title = "Набор на должность модератора"
        else:
            title = "Набор на должность ведущего"
        super().init(title=title, components=components, custom_id="recruitementModal")

    async def callback(self, interaction: disnake.ModalInteraction) -> None:
        name = interaction.text_values["name"]
        age = interaction.text_values["age"]
        embed = disnake.Embed(color=0x2F3136, title="Заявка отправлена!")
        embed.description = f"{interaction.author.mention}, Благодарим вас за заявку! " \
                            f"Если вы нам подходите, администрация свяжется с вами в ближайшее время."
        embed.set_thumbnail(url=interaction.author.display_avatar.url)
        await interaction.response.send_message(embed=embed, ephemeral=True)
        channel = interaction.guild.get_channel(1083668696460955718)  # Вставить ID канала куда будут отправляться заявки
        await channel.send(f"Заявка на должность {self.arg} от {name} {interaction.author.mention} ({age} лет)")

class RecruitementSelect(disnake.ui.Select):
    def init(self):
        options = [
            disnake.SelectOption(label="Модератор", value="moderator", description="Модератор сервера"),
            disnake.SelectOption(label="Ведущий", value="eventsmod", description="Ведущий мероприятий"),
        ]
        super().init(
            placeholder="Выбери желаемую роль", options=options, min_values=0, max_values=100, custom_id="recruitement"
        )

    async def callback(self, interaction: disnake.MessageInteraction):
        if not interaction.values:
            await interaction.response.defer()
        else:
            await interaction.response.send_modal(RecruitementModal(interaction.values[0]))

class Recruitement(commands.Cog):
    def init(self, bot):
        self.bot = bot
        self.persistents_views_added = False



    @bot.slash_command()
    async def recruit(self, ctx):
        view = disnake.ui.View()
        view.add_item(RecruitementSelect())
        await ctx.channel.send('чё хотим?')

    @commands.Cog.listener()
    async def on_connect(self):
        if self.persistents_views_added:
            return

        view = disnake.ui.View(timeout=None)
        view.add_item(RecruitementSelect())
        self.bot.add_view(view,
                          message_id='1096726050911821896')  # Вставить ID сообщения, которое отправится после использования с команда !recruit

bot.run(TOKEN)
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 1
@theIIo3ep
Конечно, я не эксперт. Но как я понимаю, эта команда в когах. Что видно из class Recruitement(commands.Cog).

А как мне известно в когах используют немного другую схему.
Вместо @bot.slash_command() пишут @commands.slash_command()

Хотя, если бы Вы были в редакторе VS code, ошибку сразу бы показало.

Попробуйте, может быть сработает :).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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