如何用Python开发Discord机器人查询用户所在服务器?
解决Discord机器人查询用户所在服务器的问题
嘿,我来帮你搞定这个功能!先看看你代码里几个需要修正的小问题,然后咱们实现核心的查询逻辑:
先修正代码里的基础错误
你当前的代码有几个语法和逻辑问题,先理顺这些:
- 导入模块拼写错误:
discord.exr应该是discord.ext - 重复初始化客户端:你同时创建了
commands.Bot和discord.Client,后者会覆盖前者,导致命令功能失效,咱们只需要保留commands.Bot就够了 on_ready函数语法错误:缺少括号和冒号,应该写成async def on_ready():
实现查询用户服务器的核心逻辑
discord.Member对象自带一个guilds属性,它会返回该用户加入的所有服务器(Guild实例)的列表。咱们只需要遍历这个列表,提取每个服务器的名称,然后拼接成字符串回复即可。
下面是修正后的完整代码:
import discord from discord.ext import commands # 初始化Bot客户端,指定命令前缀并开启必要权限 client = commands.Bot(command_prefix="chk!", intents=discord.Intents.all()) @client.command() async def check(ctx, member: discord.Member): # 获取用户所在的所有服务器名称 server_names = [guild.name for guild in member.guilds] # 处理用户无共享服务器的情况 if not server_names: await ctx.send(f"{member.name} 没有和机器人共享任何服务器,或者机器人无法获取相关信息") else: # 拼接服务器名称为字符串并发送 servers_str = " ".join(server_names) await ctx.send(f"{member.name}所在的服务器:{servers_str}") @client.event async def on_ready(): print('Bot Successfully Started.') # 替换成你的机器人令牌 client.run('your_bot_token_here')
额外注意事项
- 确保你的机器人在Discord开发者门户的机器人页面开启了服务器成员特权(Server Members Intent),否则可能无法获取用户的服务器列表。
- 如果被查询用户和机器人没有共同服务器,
member.guilds会返回空列表,所以咱们加了判断逻辑,避免发送空内容的回复。
内容的提问来源于stack exchange,提问作者OctaNebula
相关产品推荐
相关产品推荐

