如何通过用户名断开用户连接?求技术实现帮助
通过用户名断开Discord用户连接的实现方案
嘿,我刚好折腾过类似的需求,给你捋捋具体怎么实现——看你提到了@client.event,应该是用Discord.py开发Bot对吧?
首先得明确:Discord.py里没有直接通过用户名调用Disconnect()的方法,得先找到对应用户的成员对象,再执行断开/踢人操作。下面分两种场景给你代码示例:
一、自动触发的事件场景(比如用户上线时检查并断开)
如果你想要在某个事件触发时(比如用户上线)自动匹配用户名并断开,代码可以这么写:
import discord from discord.ext import commands # 必须开启成员意图,不然Bot拿不到服务器成员列表 intents = discord.Intents.default() intents.members = True intents.presences = True # 监听用户状态变化需要这个 client = commands.Bot(command_prefix='!', intents=intents) @client.event async def on_member_update(before, after): # 目标用户名(建议加上#xxxx的 discriminator,避免重名误操作) target_full_username = "username#1234" # 当用户状态变为在线时检查匹配 if str(after) == target_full_username and before.status != after.status: try: # 这里是断开语音连接,如果要踢人出服务器,换成 await after.kick(reason="触发自动断开") await after.disconnect(reason="触发自动断开条件") print(f"已成功断开用户 {after.display_name} 的语音连接") except discord.Forbidden: print("Bot没有权限执行这个操作,请检查权限设置") except discord.HTTPException as e: print(f"操作失败:{str(e)}") # 启动Bot client.run("你的Bot Token")
二、管理员手动触发的命令场景
如果需要管理员手动输入用户名来断开用户,写个命令更实用:
# 接上面的代码,添加这个命令 @client.command() @commands.has_permissions(kick_members=True) # 限制只有有踢人权限的管理员能调用 async def disconnect_user(ctx, username: str, discriminator: str = None): # 查找目标成员 if discriminator: # 精确匹配用户名+ discriminator target_member = discord.utils.get(ctx.guild.members, name=username, discriminator=discriminator) else: # 模糊匹配用户名(不推荐,容易重名误操作) target_member = discord.utils.find(lambda m: m.name.lower() == username.lower(), ctx.guild.members) if not target_member: await ctx.send(f"找不到用户 {username},建议带上#xxxx的后缀") return try: # 断开语音连接 await target_member.disconnect(reason=f"管理员 {ctx.author.display_name} 发起操作") await ctx.send(f"已断开 {target_member.display_name} 的语音连接") # 如果要踢人出服务器,换成下面这行: # await target_member.kick(reason=f"管理员 {ctx.author.display_name} 发起踢人") # await ctx.send(f"已将 {target_member.display_name} 踢出服务器") except discord.Forbidden: await ctx.send("我没有权限执行这个操作,请给我分配管理成员或踢人权限") except discord.HTTPException as e: await ctx.send(f"操作失败:{str(e)}")
关键注意事项
- 必须开启成员意图:在Discord开发者后台的Bot页面,找到"Privileged Gateway Intents",开启"Server Members Intent"和"Presence Intent",不然Bot获取不到成员列表。
- 权限要求:Bot需要有管理成员或踢人的服务器权限,否则会触发
Forbidden错误。 - 避免重名误操作:Discord允许同名用户,一定要优先用
用户名#xxxx的完整格式匹配,不要只匹配用户名。 - 区分操作类型:
disconnect()是断开语音连接,kick()是踢出服务器,根据你的需求选对应的方法。
内容的提问来源于stack exchange,提问作者JeduMiSePalacinke
相关产品推荐
相关产品推荐

