让机器人与所有公会的所有语音频道断开连接?不和谐.py

时间:2021-05-24 00:07:06

标签: python discord discord.py bots

所以我制作了一个不和谐的机器人,只要它在通话中发现自己一个人,它就会断开与语音通道的连接。我就是这样做的:(注意,我使用的是齿轮)

@commands.Cog.listener("on_voice_state_update")
  async def voiceStateUpdate(self, member, before, after):
    voiceClient = discord.utils.get(self.bot.voice_clients, guild = member.guild) # Bot "voice_client"

    if voiceClient.channel != None:
      if len(voiceClient.channel.members) == 1:
        await voiceClient.disconnect() # Disconnect

这很好用。但是,如果我在重新启动我的代码时忘记离开电话,我会在我的机器人重新启动时留在频道中(如预期的那样)。当我断开与呼叫的连接时,问题就出现了。机器人留在里面,只输出这个错误:(line 37, if voiceClient.channel != None:) AttributeError: 'NoneType' object has no attribute 'channel'

也许这是因为它不知道它仍在频道中? 我很困惑...谢谢你的时间。 :-)

1 个答案:

答案 0 :(得分:1)

您可以更轻松地查询语音频道。此外,您需要以不同的方式请求事件,即使您的 ("on_voice_state_update") 是正确的。

如果机器人重新启动,它会立即或在几秒/分钟后离开所有语音通道,因此您无需担心。

看看以下事件:

@commands.Cog.listener()
async def on_voice_state_update(self, member, before, after):
    voice_state = member.guild.voice_client # Get the member in the channel
    if voice_state is not None and len(voice_state.channel.members) == 1: # If bot is alone
        await voice_state.disconnect() # Disconnect

请注意,您必须启用 members Intent 才能获得 lenchannel.members。您可以在 Discord Developer Portal 中执行此操作,并且需要将意图“导入”到您的代码中。