Помогите Написал код а он не работает, при вводе -play (Сыллка) выдает ошибку
Вот код:
import discord
from discord.ext import commands
import pafy
import logging
import youtube_dl
logging.basicConfig(filename='bot.log', level=logging.INFO)
TOKEN = 'token'
PREFIX = '-'
intents = discord.Intents.all()
intents.members = True
bot = commands.Bot(command_prefix=PREFIX, intents=intents)
@bot.event
async def on_ready():
print(f'Logged in as {bot.user}')
@bot.event
async def on_message(message):
if message.content.lower() == 'привет':
await message.channel.send('Привет!')
await bot.process_commands(message)
@bot.command()
async def play(ctx, url: str):
if not ctx.author.voice:
return await ctx.send("Вы не подключены к голосовому каналу!")
voice_channel = ctx.author.voice.channel
if ctx.voice_client is None:
vc = await voice_channel.connect()
else:
await ctx.voice_client.move_to(voice_channel)
vc = ctx.voice_client
video = pafy.new(url)
best = video.getbestaudio()
source = await discord.FFmpegOpusAudio.from_probe(best.url, method='fallback')
vc.play(source)
@bot.command()
async def leave(ctx):
if ctx.voice_client:
await ctx.guild.voice_client.disconnect()
else:
await ctx.send("Бот не подключен к голосовому каналу.")
logging.info('Bot Online')
bot.run("Код мой ")
Вот ошибка:
Traceback (most recent call last):
File "C:\Users\timny\AppData\Local\Programs\Python\Python312\Lib\site-packages\discord\ext\commands\core.py", line 235, in wrapped
ret = await coro(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\timny\bot.py", line 38, in play
video = pafy.new(url)
^^^^^^^^^^^^^
File "C:\Users\timny\AppData\Local\Programs\Python\Python312\Lib\site-packages\pafy\pafy.py", line 124, in new
return Pafy(url, basic, gdata, size, callback, ydl_opts=ydl_opts)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\timny\AppData\Local\Programs\Python\Python312\Lib\site-packages\pafy\backend_youtube_dl.py", line 31, in __init__
super(YtdlPafy, self).__init__(*args, **kwargs)
File "C:\Users\timny\AppData\Local\Programs\Python\Python312\Lib\site-packages\pafy\backend_shared.py", line 62, in __init__
self.videoid = extract_video_id(video_url)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\timny\AppData\Local\Programs\Python\Python312\Lib\site-packages\pafy\backend_shared.py", line 51, in extract_video_id
raise ValueError(err % url)
ValueError: Need 11 character video id or the URL of the video. Got (https://www.youtube.com/watch?v=bNfibDU7IE4)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\timny\AppData\Local\Programs\Python\Python312\Lib\site-packages\discord\ext\commands\bot.py", line 1366, in invoke
await ctx.command.invoke(ctx)
File "C:\Users\timny\AppData\Local\Programs\Python\Python312\Lib\site-packages\discord\ext\commands\core.py", line 1029, in invoke
await injected(*ctx.args, **ctx.kwargs) # type: ignore
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\timny\AppData\Local\Programs\Python\Python312\Lib\site-packages\discord\ext\commands\core.py", line 244, in wrapped
raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: ValueError: Need 11 character video id or the URL of the video. Got (https://www.youtube.com/watch?v=bNfibDU7IE4)
UPD: даже при команде -play (id видео)
(по типу bNfibDU7IE4 - вместо полной ссылки) всё равно выдает ошибку. Бот заходит, но не включает видео.
Ответы (1 шт):
Автор решения: mrgervant
→ Ссылка
В документации говорится, что в pafy.new()
можно передать:
url (str) – The YouTube url or 11 character video id of the video
Ошибка же сообщает о том, что ожидалась не полная ссылка, а 11-значный id видео. Возможно происходит конфликт с библиотекой discord
, поэтому воспользуйтесь вторым вариантом и передайте id видео по типу bNfibDU7IE4
.
Из полной ссылки предварительно можно вытащить id так:
url = url.split('=')[1]
video = pafy.new(url)