Python 为什么不和谐音乐对heroku不起作用?

Python 为什么不和谐音乐对heroku不起作用?,python,heroku,discord,discord.py,youtube-dl,Python,Heroku,Discord,Discord.py,Youtube Dl,我为我的discord.py机器人制作了一个音乐功能,当我从我的机器上运行它时,一切正常,但当我将它部署到heroku时,play命令停止工作 我所尝试的: 在线搜索解决方案 调整代码,看看我是否能找出heroku出了什么问题 预期结果: 我希望机器人下载音乐,然后使用youtube dl和ffmpeg播放 实际结果: 出于某种原因,它将某个文件保存为一个很长的名称,看起来有点像youtube dl选项。 这是完整的回溯: 2020-09-19T09:59:56.637094+00:00 a

我为我的discord.py机器人制作了一个音乐功能,当我从我的机器上运行它时,一切正常,但当我将它部署到heroku时,play命令停止工作

我所尝试的:

  • 在线搜索解决方案
  • 调整代码,看看我是否能找出heroku出了什么问题
预期结果: 我希望机器人下载音乐,然后使用youtube dl和ffmpeg播放

实际结果: 出于某种原因,它将某个文件保存为一个很长的名称,看起来有点像youtube dl选项。 这是完整的回溯:

2020-09-19T09:59:56.637094+00:00 app[worker.1]: Downloading audio
2020-09-19T09:59:57.362517+00:00 app[worker.1]: ERROR: unable to open for writing: [Errno 36] File name too long: 'videoplayback-videoplaybackexpire=1600531195&ei=mtZlX7qyOcyfhwbXz42ICw&ip=3.80.84.128&id=o-ACr3otvjR8X3AKbcspCs4ohKJozzHs5FeSiCdpvKGRix&itag=248&aitags=133,134,135,136,137,160,242,243,244,247,248,278,394,395,396,397,398,399&source=youtube&requiressl=yes&mh=u9&mm=31,26&mn=sn-p5qlsndk,sn-vgqsrnel&ms=au,onr&mv=m&mvi=5&pl=12&initcwndbps=886250&vprv=1&mime=video_webm&gir=yes&clen=22705009&dur=186.unknown_video.part'
2020-09-19T09:59:57.363053+00:00 app[worker.1]: Ignoring exception in command play:
2020-09-19T09:59:57.366683+00:00 app[worker.1]: Traceback (most recent call last):
2020-09-19T09:59:57.366721+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.6/site-packages/youtube_dl/downloader/http.py", line 250, in download
2020-09-19T09:59:57.366722+00:00 app[worker.1]: ctx.tmpfilename, ctx.open_mode)
2020-09-19T09:59:57.366724+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.6/site-packages/youtube_dl/utils.py", line 2054, in sanitize_open
2020-09-19T09:59:57.366724+00:00 app[worker.1]: stream = open(encodeFilename(filename), open_mode)
2020-09-19T09:59:57.366762+00:00 app[worker.1]: OSError: [Errno 36] File name too long: 'videoplayback-videoplaybackexpire=1600531195&ei=mtZlX7qyOcyfhwbXz42ICw&ip=3.80.84.128&id=o-ACr3otvjR8X3AKbcspCs4ohKJozzHs5FeSiCdpvKGRix&itag=248&aitags=133,134,135,136,137,160,242,243,244,247,248,278,394,395,396,397,398,399&source=youtube&requiressl=yes&mh=u9&mm=31,26&mn=sn-p5qlsndk,sn-vgqsrnel&ms=au,onr&mv=m&mvi=5&pl=12&initcwndbps=886250&vprv=1&mime=video_webm&gir=yes&clen=22705009&dur=186.unknown_video.part'
2020-09-19T09:59:57.366779+00:00 app[worker.1]:
2020-09-19T09:59:57.366779+00:00 app[worker.1]: During handling of the above exception, another exception occurred:
2020-09-19T09:59:57.366780+00:00 app[worker.1]:
2020-09-19T09:59:57.366795+00:00 app[worker.1]: Traceback (most recent call last):
2020-09-19T09:59:57.366863+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.6/site-packages/discord/ext/commands/core.py", line 85, in wrapped
2020-09-19T09:59:57.366863+00:00 app[worker.1]: ret = await coro(*args, **kwargs)
2020-09-19T09:59:57.366865+00:00 app[worker.1]: File "/app/cogs/music.py", line 146, in play
2020-09-19T09:59:57.366866+00:00 app[worker.1]: ydl.download([url])
2020-09-19T09:59:57.366885+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 2019, in download
2020-09-19T09:59:57.366886+00:00 app[worker.1]: url, force_generic_extractor=self.params.get('force_generic_extractor', False))
2020-09-19T09:59:57.366887+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 808, in extract_info
2020-09-19T09:59:57.366888+00:00 app[worker.1]: return self.process_ie_result(ie_result, download, extra_info)
2020-09-19T09:59:57.366905+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 863, in process_ie_result
2020-09-19T09:59:57.366906+00:00 app[worker.1]: return self.process_video_result(ie_result, download=download)
2020-09-19T09:59:57.366907+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 1644, in process_video_result
2020-09-19T09:59:57.366908+00:00 app[worker.1]: self.process_info(new_info)
2020-09-19T09:59:57.366923+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 1926, in process_info
2020-09-19T09:59:57.366923+00:00 app[worker.1]: success = dl(filename, info_dict)
2020-09-19T09:59:57.366925+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 1865, in dl
2020-09-19T09:59:57.366925+00:00 app[worker.1]: return fd.download(name, info)
2020-09-19T09:59:57.366941+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.6/site-packages/youtube_dl/downloader/common.py", line 366, in download
2020-09-19T09:59:57.366941+00:00 app[worker.1]: return self.real_download(filename, info_dict)
2020-09-19T09:59:57.366943+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.6/site-packages/youtube_dl/downloader/http.py", line 342, in real_download
2020-09-19T09:59:57.366943+00:00 app[worker.1]: return download()
2020-09-19T09:59:57.366959+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.6/site-packages/youtube_dl/downloader/http.py", line 255, in download
2020-09-19T09:59:57.366959+00:00 app[worker.1]: self.report_error('unable to open for writing: %s' % str(err))
2020-09-19T09:59:57.366961+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.6/site-packages/youtube_dl/downloader/common.py", line 165, in report_error
2020-09-19T09:59:57.366961+00:00 app[worker.1]: self.ydl.report_error(*args, **kargs)
2020-09-19T09:59:57.366991+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 625, in report_error
2020-09-19T09:59:57.366992+00:00 app[worker.1]: self.trouble(error_message, tb)
2020-09-19T09:59:57.366992+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 595, in trouble
2020-09-19T09:59:57.366992+00:00 app[worker.1]: raise DownloadError(message, exc_info)
2020-09-19T09:59:57.366996+00:00 app[worker.1]: youtube_dl.utils.DownloadError: ERROR: unable to open for writing: [Errno 36] File name too long: 'videoplayback-videoplaybackexpire=1600531195&ei=mtZlX7qyOcyfhwbXz42ICw&ip=3.80.84.128&id=o-ACr3otvjR8X3AKbcspCs4ohKJozzHs5FeSiCdpvKGRix&itag=248&aitags=133,134,135,136,137,160,242,243,244,247,248,278,394,395,396,397,398,399&source=youtube&requiressl=yes&mh=u9&mm=31,26&mn=sn-p5qlsndk,sn-vgqsrnel&ms=au,onr&mv=m&mvi=5&pl=12&initcwndbps=886250&vprv=1&mime=video_webm&gir=yes&clen=22705009&dur=186.unknown_video.part'
2020-09-19T09:59:57.367016+00:00 app[worker.1]:
2020-09-19T09:59:57.367017+00:00 app[worker.1]: The above exception was the direct cause of the following exception:
2020-09-19T09:59:57.367017+00:00 app[worker.1]:
2020-09-19T09:59:57.367019+00:00 app[worker.1]: Traceback (most recent call last):
2020-09-19T09:59:57.367051+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.6/site-packages/discord/ext/commands/bot.py", line 903, in invoke
2020-09-19T09:59:57.367051+00:00 app[worker.1]: await ctx.command.invoke(ctx)
2020-09-19T09:59:57.367053+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.6/site-packages/discord/ext/commands/core.py", line 855, in invoke
2020-09-19T09:59:57.367053+00:00 app[worker.1]: await injected(*ctx.args, **ctx.kwargs)
2020-09-19T09:59:57.367070+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.6/site-packages/discord/ext/commands/core.py", line 94, in wrapped
2020-09-19T09:59:57.367070+00:00 app[worker.1]: raise CommandInvokeError(exc) from exc
2020-09-19T09:59:57.367092+00:00 app[worker.1]: discord.ext.commands.errors.CommandInvokeError: Command raised an exception: DownloadError: ERROR: unable to open for writing: [Errno 36] File name too long: 'videoplayback-videoplaybackexpire=1600531195&ei=mtZlX7qyOcyfhwbXz42ICw&ip=3.80.84.128&id=o-ACr3otvjR8X3AKbcspCs4ohKJozzHs5FeSiCdpvKGRix&itag=248&aitags=133,134,135,136,137,160,242,243,244,247,248,278,394,395,396,397,398,399&source=youtube&requiressl=yes&mh=u9&mm=31,26&mn=sn-p5qlsndk,sn-vgqsrnel&ms=au,onr&mv=m&mvi=5&pl=12&initcwndbps=886250&vprv=1&mime=video_webm&gir=yes&clen=22705009&dur=186.unknown_video.part'
我是通过heroku日志得到的

我的代码:

导入不一致
从discord.ext导入命令
导入youtube\u dl
从helpers.yt_search导入搜索
从discord.utils导入获取
进口舒蒂尔
导入操作系统
课堂音乐(commands.Cog):
def uuu init uuuu(自我,机器人):
self.bot=bot
self.queues={}
@commands.command(别名=['p'])
异步def播放(self、ctx、*、search\u查询):
url=搜索(搜索\查询)
def check_queue():
Queue_infle=os.path.isdir(“./Queue”)
如果队列填充为真:
DIR=os.path.abspath(os.path.realpath(“队列”))
长度=len(os.listdir(DIR))
仍然_q=长度-1
尝试:
第一个文件=os.listdir(DIR)[0]
除:
打印('不再有排队的歌曲')
self.queues.clear()
返回
main\u loc=os.path.dirname(os.path.realpath(\uu文件\uu))
song\u path=os.path.abspath(os.path.realpath(“队列”)+“\\\”+第一个\u文件)
如果长度!=0:
打印('歌曲已完成,正在播放队列中的下一首。')
打印(f“保留在队列中的歌曲:{still_q}”)
song_there=os.path.isfile(“song.mp3”)
如果你在那里:
删除操作系统(“song.mp3”)
shutil.move(宋_路,主位置)
对于os.listdir('./')中的文件:
如果文件.endswith(“.mp3”):
重命名(文件'song.mp3')
voice.play(discord.ffmpegpcaudio('song.mp3'),after=lambda e:check_queue())
voice.source=discord.PCMVolumeTransformer(voice.source)
voice.source.volume=0.3
其他:
self.queues.clear()
返回
其他:
self.queues.clear()
打印('队列中没有剩余歌曲')
song_there=os.path.isfile(“song.mp3”)
尝试:
如果你在那里:
删除操作系统(“song.mp3”)
self.queues.clear()
除许可错误为e外:
打印(“尝试删除歌曲文件,但正在播放。”)
等待ctx.channel.send(“:x:Error:音乐仍在播放。”)
返回
Queue_infle=os.path.isdir(“./Queue”)
尝试:
Queue_folder=“./Queue”
如果队列填充为真:
打印('已删除旧队列文件夹')
rmtree(队列文件夹)
除:
打印('没有旧队列文件夹')
voice=get(self.bot.voice\u客户端,guild=ctx.guild)
ytdl_选项={
“格式”:“最佳音频/最佳”,
“安静”:没错\
“后处理器”:[{
“键”:“FFmpegExtractAudio”,
“首选编解码器”:“mp3”,
“首选质量”:“192”
}],
}
使用youtube_dl.YoutubeDL(ytdl_opts)作为ydl:
打印('下载音频')
下载([url])
name=“”
对于os.listdir('./')中的文件:
如果文件.endswith('.mp3'):
名称=文件
打印(f“重命名文件{name}”)
重命名(文件'song.mp3')
voice.play(discord.ffmpegpcaudio('song.mp3'),after=lambda e:check_queue())
voice.source=discord.PCMVolumeTransformer(voice.source)
voice.source.volume=0.3
nname=name.rsplit(“-”,2)
等待ctx.channel.send(f):音符:播放{nname[0]}”)
def设置(机器人):
bot.add_cog(音乐(bot))

这一切都在一个齿轮中。

通过观看此repo获得帮助,您必须在heroku以及FFmpeg和Opus Library上安装一些构建包


请阅读。这里的问题必须是独立的。请将回溯和相关代码直接添加到您的问题中。正如我在问题中提到的,我不希望将回溯和代码添加到我的问题中,因为它们非常长!但是,如果这能帮助我找到解决方案,我会将代码编辑到问题中。我刚刚对问题进行了更改!