Discord music bot 10 секунд музыки и выключение звука
Музыка играет секунд 10-15 и выключается все время в одном месте практически
Вот логи, ошибок нет
import discord
from discord.ext import commands
import asyncio
import yt_dlp
intents = discord.Intents.default()
intents.message_content = True
client = commands.Bot(command_prefix='w!', intents=intents)
FFMPEG_PATH = "E:\\ffmpeg-2024-03-14-git-2129d66a66-full_build\\bin\\ffmpeg.exe"
discord.FFmpegPCMAudio.executable = FFMPEG_PATH
FFMPEG_OPTIONS = {
'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5',
'options': '-vn',
}
@client.event
async def on_ready():
print('Bot is online.')
@client.command()
async def join(ctx):
if not ctx.author.voice or not ctx.author.voice.channel:
await ctx.send('You are not in a voice channel!')
return
try:
voice_channel = ctx.guild.voice_client
voice_client = await voice_channel.connect()
await ctx.send(f'Joined {voice_channel}')
except discord.ClientException as e:
await ctx.send(f"Failed to connect to voice channel: {e}")
@client.command()
async def play(ctx, url):
if not ctx.author.voice or not ctx.author.voice.channel:
await ctx.send('You are not in a voice channel!')
return
voice_channel = ctx.author.voice.channel
try:
voice_client = ctx.voice_client
if voice_client is None:
voice_client = await voice_channel.connect()
ydl_opts = {
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192',
}],
'outtmpl': 'downloads/%(title)s.%(ext)s',
'quiet': True, # Меньше выводить информации в консоль
'noplaylist': True, # Не загружать плейлисты
'nocheckcertificate': True, # Не проверять сертификаты SSL
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(url, download=False)
URL = info['url']
if voice_client is not None:
voice_client.play(discord.FFmpegPCMAudio(URL))
await ctx.send(f'Now playing: {url}')
except Exception as e:
await ctx.send(f'An error occurred while playing the music: {e}')
@client.event
async def on_command_error(ctx, error):
await ctx.send(f'An error occurred: {error}')
Ответы (1 шт):
Автор решения: adolf_two
→ Ссылка
Он выполняется, но потом идет другой код и все.
Для решения проблемы вам нужно добавить задержку перед остановкой воспроизведения музыки. Для этого вы можете использовать функцию asyncio.sleep из модуля asyncio, чтобы приостановить выполнение кода на определенный период времени перед остановкой музыки.
if voice_client is not None: voice_client.play(discord.FFmpegPCMAudio(URL)) await ctx.send(f'Сейчас играет: {url}') # Добавление задержки в 10(примерно столько) секунд перед остановкой музыки await asyncio.sleep(10) voice_client.stop() await ctx.send('Музыка остановлена.') except Exception as e: await ctx.send(f'Произошла ошибка при воспроизведении музыки: {e}')
Нуууу как то так