Артём Таптыков
Гуру
(4060)
2 месяца назад
Ваш код выглядит почти правильно, но есть несколько проблем, которые нужно исправить:
1. Библиотека `youtube_dl` немного изменена и не будет работать напрямую с `discord.py`. Вместо нее лучше использовать `yt-dlp`, которая является форком `youtube_dl`.
2. Метод `youtube_dl(url)` не существует. Нужно создать `YoutubeDL` объект с соответствующими параметрами.
3. Чтобы использовать аудиофайл, необходимо передавать путь к аудиофайлу, а не URL.
Вот исправленный вариант вашего кода:
```python
import discord
import os
import yt_dlp as youtube_dl
import logging
import asyncio
from discord.ext import commands
logging.basicConfig(filename='bot.log', level=logging.INFO)
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix="!", intents=intents)
@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
ydl_opts = {
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192',
}],
'outtmpl': 'downloads/%(title)s.%(ext)s',
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(url, download=True)
filename = ydl.prepare_filename(info)
vc.play(discord.FFmpegPCMAudio(executable="ffmpeg", source=filename))
@bot.command()
async def leave(ctx):
if ctx.voice_client:
await ctx.guild.voice_client.disconnect()
else:
await ctx.send("Бот не подключен к голосовому каналу.")
bot.run('YOUR_TOKEN')
```
В этом коде:
1. Мы используем `yt-dlp` для скачивания аудио с YouTube.
2. `FFmpegPCMAudio` используется для воспроизведения скачанного аудиофайла.
3. `intents.message_content = True` добавлено для получения контента сообщений.
Не забудьте заменить `'YOUR_TOKEN'` на ваш реальный токен бота. Также убедитесь, что у вас установлен `ffmpeg` и он доступен в пути выполнения программы.
```import discord import random import os import openai import youtube_dl import logging import requests import sys import asyncio logging.basicConfig(filename='bot.log', level=logging.INFO) from discord import FFmpegPCMAudio from discord.ext.commands import Bot from discord.utils import get from discord.ext import commands intents = discord.Intents.default().all() bot = commands.Bot(command_prefix="!", intents=intents) bot.remove_command('help') intents.presences = True intents.members = True intents.message_content = True intents.typing = False