如何使用discord.py机器人断开语音频道用户连接及相关报错解决
问题修正方案
错误根源
- 你的
client是全局Bot实例,没有直接的guild属性,discord.py中Bot可接入多个服务器,不存在全局绑定的单个服务器对象 - 你不需要从
client层级获取成员对象,on_voice_state_update事件已经传入了当前触发事件的member实例,直接操作该实例即可
修正后代码
@client.event async def on_voice_state_update(member, before, after): print(member) # 匹配目标用户 if str(member) == "The_person_I_want_to_ban#his_code": # 先判断用户当前处于语音频道中,避免空值报错 if member.voice: await member.voice.disconnect()
优化建议
- 更稳妥的用户匹配方式是使用用户ID判断:
if member.id == 目标用户的数字ID,不会因为用户修改昵称、标签导致匹配失效 - 机器人需要提前在对应服务器获取「移动成员」权限,否则调用断开连接方法会抛出权限异常
- 如果需要限定仅在指定服务器生效,可以补充服务器ID判断:
if member.guild.id == 你的服务器数字ID
内容的提问来源于stack exchange,提问作者Kewei Chen
相关产品推荐
相关产品推荐

