Бот Python Discord присоединяется к голосовому каналу, но звук не воспроизводитсяPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Бот Python Discord присоединяется к голосовому каналу, но звук не воспроизводится

Сообщение Anonymous »

Я делал бота для сервера Discord, и бот присоединится к голосовому вызову и добавит песню в очередь. Однако он не воспроизводит никаких звуков. В консоли ошибок нет, а звук загружается в очередь, просто звука от бота нет.
Вот код:

Код: Выделить всё

import discord
from discord.ext import commands
from yt_dlp import YoutubeDL

class music_cog(commands.Cog):
def __init__(self, bot):
self.bot = bot
self.is_playing = False
self.is_paused = False

self.music_queue = []
self.YDL_OPTIONS = {'format': 'bestaudio', 'noplaylist': 'True'}
self.FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}

self.vc = None

def search_yt(self, item):
with YoutubeDL(self.YDL_OPTIONS) as ydl:
try:
info = ydl.extract_info("ytsearch:%s" % item, download=False)['entries'][0]
except Exception:
return False
return {'source': info['formats'][0]['url'], 'title': info['title']}

def play_next(self):
if len(self.music_queue) > 0:
self.is_playing = True

m_url = self.music_queue[0][0]['source']

self.music_queue.pop(0)

#self.vc.play(discord.FFmpegPCMAudio(m_url, **self.FFMPEG_OPTIONS), after=lambda e: self.play_next())
self.vc.play(discord.FFmpegPCMAudio(executable="C:/ffmpeg/bin/ffmpeg.exe", source=m_url, **self.FFMPEG_OPTIONS),after=lambda e: self.play_next())

else:
self.is_playing = False

async def play_music(self, ctx):
if len(self.music_queue) > 0:
self.is_playing = True
m_url = self.music_queue[0][0]['source']

if self.vc == None or not self.vc.isconnected():
self.vc = await self.music_queue[0][1].connect()

if self.vc == None:
await ctx.send("Could not connect to voice channel")
return
else:
await self.vc.move_to(self.music_queue[0][1])

self.music_queue.pop(0)

self.vc.play(discord.FFmpegPCMAudio(m_url, **self.FFMPEG_OPTIONS), after=lambda e:self.play_next())

else:
self.is_playing = False

@commands.command(name="play", aliases=["p"], help="Play the selected song from yt")
async def play(self, ctx, *args):
query = " ".join(args)

voice_channel = ctx.author.voice.channel
if voice_channel is None:
await ctx.send("Connected to a voice channel")
elif self.is_paused:
self.vc.resume()
else:
song = self.search_yt(query)
if type(song) == type(True):
await ctx.send("Could not download the song.  Incorrect format, try a different keyword")
else:
await ctx.send("Song added to queue")
self.music_queue.append([song, voice_channel])

if self.is_playing == False:
await self.play_music(ctx)

@commands.command(name="pause", help="Pause the current song being played")
async def pause(self, ctx, *args):
if self.is_playing:
self.is_playing = False
self.is_paused = True
self.vc.pause()
elif self.is_paused:
self.is_playing = True
self.is_paused = False
self.vc.resume()

@commands.command(name="resume", aliases=["r"], help="Resume playing the current song")
async def resume(self, ctx, *args):
if self.is_paused:
self.is_playing = True
self.is_paused = False
self.vc.resume()

@commands.command(name="skip", aliases = ["s"], help="Skip the current song being played")
async def skip(self, ctx, *args):
if self.vc != None and self.vc:
self.vc.stop()
await self.play_music(ctx)

@commands.command(name="queue", aliases=["q"], help="View the queue")
async def queue(self, ctx, *args):
retval = ''

for i in range(0, len(self.music_queue)):
if i > 4:
break
retval += self.music_queue[i][0]['title'] + '\n'

if retval != "":
await ctx.send(retval)
else:
await ctx.send("No music in the queue")

@commands.command(name="clear", aliases=["c", "bin"], help="Stops current song and clears the queue")
async def clear(self, ctx, *args):
if self.vc != None and self.is_playing:
self.vc.stop()
self.music_queue = []
await ctx.send("music queue cleared")

@commands.command(name="leave", aliases=["disconnect", "l", "d"], help="kick the bot from the VC")
async def skip(self, ctx, *args):
self.is_playing = False
self.is_paused = False
await self.vc.disconnect()
Извините, если это легко увидеть, но я относительно новичок в этом деле


Подробнее здесь: https://stackoverflow.com/questions/792 ... -is-played
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»