Проблема с ботом Discord «отсутствует обязательный аргумент» python

#python #discord #discord.py #bots

Вопрос:

У меня проблема. Я думаю, что этот код хорошо написан, и бот включается и все такое, но когда я начинаю выполнять команду play , я получаю ошибку.

 @bot.command(name='play', aliases=['sing','p'], description="streams music")
async def play_(ctx, self, *, search: str):
    #async def play_(ctx, message, self, *, search: str):
    """Request a song and add it to the queue.
    This command attempts to join a valid voice channel if the bot is not already in one.
    Uses YTDL to automatically search and retrieve a song.
    Parameters
    ------------
    search: str [Required]
        The song to search and retrieve using YTDL. This could be a simple search, an ID or URL.
    """
    await ctx.trigger_typing()

    vc = ctx.voice_client

    if not vc:
        await ctx.invoke(self.connect_)

    player = self.get_player(ctx)

    # If download is False, source will be a dict which will be used later to regather the stream.
    # If download is True, source will be a discord.FFmpegPCMAudio with a VolumeTransformer.
    source = await YTDLSource.create_source(ctx, search, loop=self.bot.loop, download=False)

    await player.queue.put(source)
 

Ошибка заключается в следующем:

     discord.ext.commands.errors.MissingRequiredArgument: search is a required argument that is missing.
 

И я не знаю, что делать, потому что я уже пытался изменить позицию, но ошибка продолжает появляться, если кто-то знает, что это такое, пожалуйста, скажите мне

Комментарии:

1. Почему вы передаете self в качестве аргумента, если команда не находится в классе?

Ответ №1:

Для чего бы ни предназначался ваш search параметр, он не будет работать. Когда в discord.py библиотека вызывает команду, она вызывает команду следующим образом:

 command(context, word1, word2, word3)
 

Поэтому, если он вызовет вашу функцию, возникнет именованная ошибка, потому что discord никогда не передает search аргумент вашей функции. Например:

 @bot.command(name='play', aliases=['sing','p'], description="streams music")
async def play_(ctx, self, *, search: str):
    [...]
 

-поиграй, увидимся снова

 play_(context, "see", "you", "again")
 

-> Error: search is a required argument that is missing


Вместо этого ваша функция должна выглядеть следующим образом:

 @bot.command(name='play', aliases=['sing','p'], description="streams music")
async def play_(ctx, *search):
    [...]
 

Комментарии:

1. @LeoCalpe Как я уже сказал в конце, ваша функция должна принимать параметры (ctx, *search) . *search Параметр будет содержать кортеж всех слов, которые были переданы (в моем примере ("see", "you", "again") . Я не знаю, нужен ли вам self параметр, но похоже, что ваша функция не является частью класса, поэтому вам не нужно было бы указывать self . Если, если только это не часть класса, поставьте self в начале: (self, ctx, *search) .

2. Если я это сделаю, все будет в порядке, но это приведет меня к следующей ошибке: AttributeError: 'str' object has no attribute 'trigger_typing'

3. В этом случае self аргумент также не передается, поэтому попробуйте просто использовать (ctx, *search)

4. Но это дает мне эту ошибку: NameError: name 'self' is not defined

5. Я выслушаю вас и подробнее изучу это, большое вам спасибо за все;)

Ответ №2:

Почему у вас есть self в качестве параметра? Если вы находитесь в винтике, поставьте его перед ctx собой . Если это не так, удалите этот параметр. В качестве параметра передается ваш поисковый запрос self .

Комментарии:

1. Я уже сделал это, и я продолжаю получать ту же ошибку.