Discord.py Musicbot 跳过命令权限错误
Posted
技术标签:
【中文标题】Discord.py Musicbot 跳过命令权限错误【英文标题】:Discord.py Musicbot Skip Command PermissionError 【发布时间】:2020-11-24 19:57:33 【问题描述】:所以作为我开始编程后的第一个“主要”项目,我决定制作一个 Discord Bot。这里的问题是我的“跳过”命令。不知怎么的,但我不明白是怎么回事。
def play_next(ctx):
if len(songs_list) >= 2:
print(songs_list,"before del")
del songs_list[0]
print(songs_list[0], "new song")
try:
if os.path.isfile("song.mp3"):
os.remove("song.mp3")
except PermissionError:
print("permissionerror")
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download([songs_list[0]])
for file in os.listdir("./"):
if file.endswith(".mp3"):
os.rename(file, "song.mp3")
voice.play(discord.FFmpegPCMAudio("song.mp3"), after=lambda e: play_next(ctx))
voice.isplaying()
还有跳过命令:
@client.command(pass_context=True)
async def skip(ctx):
voice.stop()
voice.skip()
try:
os.remove("song.mp3")
except:
pass
play_next(ctx)
我知道这不是处理该问题的最佳方式,但我才刚刚开始编写代码,这就是我让它工作的方式。 在跳过命令中,当我不使用 voice.skip() 时,我会在控制台中打印出 PermissionError。
包含它后,我反而收到消息“VoiceClient”对象没有属性“skip”,但到目前为止一切正常。有人可以解释为什么吗? 我的意思是如果跳过不存在,那么它为什么会起作用?又是如何绕过 PermissionError 的?
【问题讨论】:
您使用哪种操作系统?在哪个位置存储您的文件?是用户可访问的目录吗? Windows 10。python 文件与“song.mp3”位于同一目录中,即使没有管理员也可以访问所有内容。在我看来,该文件似乎仍在使用中。 当您关闭主进程时,discord.FFmpegPCMAudio
是否仍在处理文件?您可以在活动监视器中检查一些 python 进程
看来确实如此。我的意思是代码有效……但我不知道为什么。
【参考方案1】:
我也在做一个 Discord 机器人作为 Python 中的第一个项目。我发现导致这种情况的原因是voice.stop()
使音频停止,但是当它停止时,after=lambda
回调开始。那么,如果你调用playNext()
,会报错,因为after=lambda
回调已经在播放,所以voice.skip()
方法抛出异常,playNext()
永远不会被调用,因为after=lambda
回调被调用了反而。至少在我的情况下,所以我希望它可以帮助你:D
权限错误是因为after=lambda
回调启动时,bot正在播放歌曲,而在播放时你尝试使用playNext()
函数导致错误。
尝试:
@client.command(pass_context=True)
async def skip(ctx):
voice.pause()
play_next(ctx)
另外,如果我的英语(不是我的母语)有任何错误,我深表歉意。
【讨论】:
以上是关于Discord.py Musicbot 跳过命令权限错误的主要内容,如果未能解决你的问题,请参考以下文章