#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. Я уже сделал это, и я продолжаю получать ту же ошибку.