如何使Discord漫游器在语音通道中停留特定mp3文件的时间?

时间:2019-07-29 22:39:15

标签: python python-3.6 discord.py

我一直在为我的个人不和谐服务器开发一个机器人,到目前为止,它播放的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在语音通道上花费的时间。谢谢。抱歉,我的代码太草率,这只是一个个人项目,我没想到有人会看到它。

2 个答案:

答案 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))

播放音频文件后,机器人将自动断开连接。