簡體   English   中英

沒有調用StreamPlayer“之后”功能

[英]StreamPlayer “after” function isn't being called

我正在創建一個可以播放音樂的Discord機器人,但我有點受阻,因為當該機器人完成播放音樂時,它應該離開當前的語音通道。 但這並沒有發生,盡管我遵循了“ 常見問題”頁面上的指示,但是根本沒有調用我的after函數vc.disconnect

vc = await bot.join_voice_channel(ctx.message.author.voice_channel)
player = await vc.create_ytdl_player(arg.split(' ')[1], after=vc.disconnect)
player.start()

問題是vc.disconnect是協程。 您需要以不同的方式處理它,因為語音播放器只是一個Thread ,因此after調用不會等待協程。

根據docs ,這是應該如何處理的:

def my_after():
    coro = vc.disconnect()
    fut = asyncio.run_coroutine_threadsafe(coro, client.loop)
    try:
        fut.result()
    except:
        pass

player = await voice.create_ytdl_player(url, after=my_after)
player.start()

同樣如docs所述,以下警告:

警告

此功能只是3.5.1+和3.4.4+的一部分。 如果您沒有使用這些Python版本,請使用discord.compat.

這意味着,如果您正在運行Python 3.4.0-3.4.3或3.5.0, my_after需要將my_after更改為此:

def my_after():
    from discord.compat import run_coroutine_threadsafe
    coro = vc.disconnect()
    fut = run_coroutine_threadsafe(coro, client.loop)
    try:
        fut.result()
    except:
        pass

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM