由于某种原因,机器人看不到 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'))
@bot.command()
async def play(ctx, *, query):
*
在Python中用来表示Args。 Args 用于传递非关键字、可变长度参数列表。语法是使用符号 *
来接受可变数量的参数。因此,在 arg 参数之后作为参数传递的任何内容都被视为 * args 的一部分。