一个月前,我用discord.py为一个discord服务器制作了一个音乐机器人。直到一周前它工作得很好,但是现在当我使用join
命令时,bot无法连接到语音通道。下面是命令的代码:
class MonClient(discord.Client):
async def on_ready(self):
self.voice = None # contains the <VoiceClient> object created by <chan.connect> in the join command
async def on_message(self,message):
if message.author.bot:
pass
elif message.content[0] == "!": # the command prefix is "!"
parts = message.content.split(" ")
command = parts[0][1:]
if command == "join":
if message.author.voice != None and self.voice == None:
chan = message.author.voice.channel
await message.channel.send("before connecting to voice channel")
self.voice = await chan.connect()
await message.channel.send("after connecting to voice channel")
else:
await message.channel.send("Bot already connected to voice channel or user not connected to voice channel")
更准确地说,机器人在连接到语音通道之前成功发送了"在文本通道中,然后通过Discord UI显示它已加入语音通道(其图像显示在连接到语音通道的成员列表中,有连接到语音通道的声音)。但第二条信息"连接到语音频道后"从未发送。我们仍然可以使用bot的其他命令,但是变量self.voice
仍然包含None
,所以显然bot不能播放音乐。
我假设异步connect
方法无限期地停止某些东西,但我无法理解什么,因为没有错误消息,甚至没有文档描述的TimeoutError。互联网连接似乎很好,正如我所说的,机器人工作了两三个星期,所以现在我真的不知道如何更好地理解是什么阻止了连接。
对于类似的问题,Stackoverflow上还有其他一些问题,但提出的答案与我的问题无关:一个答案提出了另一种方法来获取要连接的语音通道对象,但我已经得到了好的对象,因为机器人至少显示连接到语音通道;另一个答案与@client.command()
行有关,我不使用。
确保您的库是最新的,discord最近做了更改。
pip install -U discord