Discord bot问题“缺少必需的参数”python

Posted

技术标签:

【中文标题】Discord bot问题“缺少必需的参数”python【英文标题】:Discord bot issue "is a required argument missing" python 【发布时间】:2021-08-23 22:12:48 【问题描述】:

我有问题。我认为这段代码写得很好,机器人启动了一切,但是当我去执行逗号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.

而且我不知道该怎么做,因为我已经尝试改变位置,但是如果有人知道它是什么,就会不断出现错误,请告诉我

【问题讨论】:

如果命令不在类中,为什么要将 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):
    [...]

【讨论】:

@LeoCalpe 正如我最后所说,你的函数应该采用参数(ctx, *search)*search 参数将包含所有传递的单词的元组(在我的示例中为 ("see", "you", "again")。我不知道您是否需要 self 参数,但看起来您的函数不是类的一部分,所以你不需要指定self。如果,除非,它是一个类的一部分,把self放在开头:(self, ctx, *search) 如果我这样做很好,但它会给我以下错误:AttributeError: 'str' object has no attribute 'trigger_typing' 在这种情况下,也没有传递self 参数,因此请尝试仅使用(ctx, *search) 但它给了我这个错误:NameError: name 'self' is not defined 我会听你的,研究更多,非常感谢你所做的一切;)【参考方案2】:

为什么你有self作为参数?如果您使用 cog,请将其放在 ctx 之前。如果不是,请删除该参数。您的搜索词作为self 参数传递。

【讨论】:

我已经完成了,但我一直收到同样的错误。

以上是关于Discord bot问题“缺少必需的参数”python的主要内容,如果未能解决你的问题,请参考以下文章

请求缺少必需的参数,包含无效的参数值

Cloudinary 错误:“错误”:“消息”:“缺少必需的参数 - 时间戳”

缺少必需的参数(laravel 8.8.0)

Cloudinary\Error:缺少必需的参数 - 文件 - Express 和 Postman

如果请求缺少必需的参数,我应该使用啥 HTTP 状态响应代码?

域路由错误 Laravel 中缺少必需的参数