You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 12:42:50