discord 机器人缺少 1 个必需的仅关键字参数?

问题描述 投票:0回答:1

由于某种原因,机器人看不到 query 参数,尽管理论上它是从列表中传递的 PS:我正在制作一个音乐机器人 错误:

文件“C:\Users\pc\Desktop\Bot\Mbot\Bot.py”,第 77 行,正在播放 等待播放音乐(最后一项)

     ^^^^^^^^^^^^^^^^^^^^^

TypeError:play_music() 缺少 1 个必需的仅关键字参数:'query'

它应该按照这样的想法工作,我编写了播放命令(链接),该链接被添加到列表中以进行进一步交互,并且相同的链接用于播放音乐,但由于某种原因机器人看不到我发送的链接

我尝试用 query 替换 last_item,但机器人仍然给出相同的错误

代码:

import discord
import os
from discord.ext import commands
from discord.ui import Button,View
from discord.utils import get
import yt_dlp
import youtube_dl

intents = discord.Intents().all()
intents.message_content = True
intents.voice_states = True
intents.presences = True
bot = commands.Bot(command_prefix = '!!', intents=intents)


queue_list = []

async def play_music(ctx, *, query):
        ydl_opts = {
            'format': 'bestaudio/best',
            'postprocessors': [{
                'key': 'FFmpegExtractAudio',
                'preferredcodec': 'mp3',
                'preferredquality': '192',
            }],
        }
        ffmpeg_options = {
            'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5',
            'options': '-vn',
        }
        with youtube_dl.YoutubeDL(ydl_opts) as ydl:
            info = ydl.extract_info(query, download=False)
            url2 = info['formats'][0]['url']
        
            voice_client.play(discord.FFmpegPCMAudio(url2, **ffmpeg_options))
@bot.command()
async def join(ctx):
    await ctx.author.voice.channel.connect()

@bot.command()
async def play(ctx, *, query):
    queue_list.append(query)
    last_item = queue_list[-1]
    voice_client = ctx.voice_client
    voice_channel = ctx.author.voice.channel
    if voice_channel is None:
        await ctx.send("text1")
    elif 'youtube.com' in query or 'youtu.be' in query:
        await play_music(last_item) 
    else:
        await ctx.send('text2')

bot.run(os.getenv('TOKEN'))

discord.py youtube-dl yt-dlp
1个回答
0
投票

@bot.command()

async def play(ctx, *, query):

*
在Python中用来表示Args。 Args 用于传递非关键字、可变长度参数列表。语法是使用符号
*
来接受可变数量的参数。因此,在 arg 参数之后作为参数传递的任何内容都被视为 * args 的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.