Итак, я написал бот Discord на Python и добавил голосовую поддержку к нему несколько месяцев назад. В настоящее время я работаю на Heroku, и все заработало, когда я изначально писал бота, используя сборку Opus для Heroku. Однако в настоящее время при запуске бота на Heroku бот подключается к голосовому каналу, и тогда бот будет думать, что он все еще не подключен, даже если он явно визуально подключен в интерфейсе Discord.
Я уже пробовал использоватьразные сборки опуса безрезультатно. В данный момент я использую: https://elements.heroku.com/buildpacks/xrisk/heroku-opus
Я также использую последнюю версию следующих библиотек
discord.py[voice]
beautifulsoup4
bs4
aiohttp
Pillow
aiofiles
imageio
youtube_dl
Это команда для подключения только бота,и есть дубликат этого в коде, используемом для воспроизведения самого аудио. В обоих случаях наблюдается одинаковое поведение.
@commands.command(pass_context=True, aliases=["disconnect"])
async def join(self, ctx):
can_send = await check_can_use(ctx, "join")
if not can_send:
return
global voice
try:
channel = ctx.message.author.voice.channel
voice = get(self.bot.voice_clients, guild=ctx.guild)
# Connect bot to voice channel
if voice and voice.is_connected():
await voice.move_to(channel)
else:
voice = await channel.connect()
print(f"Connected to {channel}\n")
await ctx.send(f"**Connected to {channel}**")
except Exception as e:
print(e)
print("Must be in voice channel")
await ctx.send("**Must be in voice channel**")
При локальном запуске на моем компьютере бот подключается правильно и отправляет сообщение о подключении к серверу. При запуске на Heroku бот просто останавливается при подключении к голосовому чату.
Строка:
print(f"Connected to {channel}\n")
никогда не запускается. Бот зависает после запуска
voice = await channel.connect()
Я могу напечатать голосовой объект, поэтому я знаю, что
voice = get(self.bot.voice_clients, guild=ctx.guild)
работает как положено.
Исключение такжене запускается, пока бот не будет прерван. Выход которого можно увидеть здесь https://pastebin.com/y97Ggvr0.