我一直在为我的个人不和谐服务器开发一个机器人,到目前为止,它播放的mp3都是固定长度的,因此我会根据mp3的长短告诉机器人该机器人休眠一段时间。现在,通过我的新命令,将播放不同长度的mp3,但我不确定从这里开始。您可以在我的代码中看到如何使其进入睡眠状态,但这将不再起作用,因为mp3可能很长或很短。我试图找出一种方法,通过python获取有关mp3的信息,并告诉它在mp3的长度内休眠。有人可以帮我解决这个问题或为我指明正确的方向吗?谢谢。
过去,我尝试在vc.wait中使用一条命令,但该bot不断加入,然后立即离开。 sleep命令非常适合我过去的使用,所以我只使用了它。
@client.command(pass_context=True)
async def tts(ctx):
#get message content and send to google text to speech api
msg = ctx.message.content
tts = gTTS(msg[5:])
#here is where the mp3 is made and saved
tts.save('message.mp3')
#find length of mp3
channel = ctx.message.author.voice.channel
vc = await channel.connect()
source = FFmpegPCMAudio('./message.mp3')
player = vc.play(source)
#the method I've been using for mp3s, increasing or decreasing manually
#per command based on mp3 length. This is the command that I now need to be
#dynamic. Replace 15 with length of mp3.
await asyncio.sleep(15)
await vc.disconnect(force=True)
我什么也没想到,但是我希望在正确的方向找到帮助或推动,以便在现场找到mp3的长度,并相应地调整bot在语音通道上花费的时间。谢谢。抱歉,我的代码太草率,这只是一个个人项目,我没想到有人会看到它。
答案 0 :(得分:1)
根据here个语音客户端的文档,您可以在vc.play(source)
中创建一个回调函数,也许是这样的:
async def playCallback(error):
await vc.disconnect(force=True)
.
.
.
player = vc.player(source, after=playCallback)
让我知道是否可行-编码愉快!
答案 1 :(得分:0)
通过更改这些行:
source = FFmpegPCMAudio('./message.mp3')
player = vc.play(source)
使用这些行:
vc.play(discord.FFmpegPCMAudio('./message.mp3'), after=lambda e: print('done', e))
播放音频文件后,机器人将自动断开连接。