我目前正在尝试制作一个机器人,当某个人加入时,它会加入 VC,当他们离开时,它会离开 VC。
我希望机器人仅在特定用户处于 VC 时才处于 VC,然后当所述用户断开连接时机器人将立即离开。
我遇到的问题是试图找出如何让机器人离开。
@bot.event
async def on_voice_state_update(成员,之前,之后): targetID = bot.get_user(USERID)
if after.channel is not None and member.id == targetID.id:
await member.voice.channel.connect()
这就是我用来让机器人加入的方法,似乎工作没有问题,但无论我尝试什么,我都无法弄清楚如何让机器人在同一个用户离开 VC 后离开。
如有任何帮助,我们将不胜感激,谢谢。
任何时候我能够让机器人离开,它都会在加入时立即离开,我知道这样做的原因,但我只是不知道如何防止它,或者用另一种方法让机器人仅在以下情况下离开用户离开。
bot.get_user(USERID)
返回了一个NoneType,它当然没有ID可以与member.id
进行比较。所以,我将 await
与 bot.fetch_user
一起使用。但如果它对你有效,那就这样了。这是我的代码:
VCs = {} #VC list
@bot.event
async def on_voice_state_update(member, before, after):
target = await bot.fetch_user(USERID)
if after.channel is not None and member == target:
VCs[member.id] = member.voice.channel
await member.voice.channel.connect()
elif after.channel is None and member == target:
for i in bot.voice_clients: #Check through all VCs bot is currently in
if i.channel == VCs[member.id]: #If VC is the one the user was in
VCs.pop(member.id) #Remove the VC from the list
await i.disconnect(force=False) #Disconnect from the VC