Discord.py 在多个服务器上播放本地文件

Discord.py play local files on multiple server

我最近在写一个 Discord 机器人,它可以播放本地 mp3 文件。我用来播放文件的函数如下所示。

conn.play(discord.FFmpegPCMAudio("path/to/file"))
while conn.is_playing():
    time.sleep(0.1)
await conn.disconnect()

现在我正在考虑为多个服务器设置机器人。我的问题是,如果我想同时在两个不同的服务器上播放两种不同的声音,机器人目前只能按顺序播放,不能同时播放。我考虑过为每台服务器设置多个 python 实例,但对于 N 个服务器 N python 个实例来说,它看起来有点难以管理。我可以为每个服务器拥有多个 mp3 文件,所以我不会锁定任何文件。但是使用多个 python 程序看起来有点复杂。有没有更简单的解决方案?

您的问题源于使用 time.sleep()discord.py 是一个 异步 库,这意味着它处理能够同时执行多个功能以确保机器人在使用期间不会被阻塞,但是添加一个像 time.sleep() 这样的同步调用会使它在调用持续时停止操作。当您在播放 mp3 时调用 time.sleep(),它正在该函数中执行同步操作。

当您使用异步库时,最好同时寻找其他实用程序的异步版本,这样您就不会陷入在异步操作中使用阻塞同步调用的诱惑。在这种情况下,我建议您根据自己的目的使用 await asyncio.sleep(0.1)。您还需要 import asyncio 才能使用该功能。

参考文献: