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

discord.py如何提及服务器随机成员?代码及成员意图问题求助

解决discord.py中无法获取服务器所有成员的问题

问题原因

interaction.guild.members仅返回机器人自身,是因为discord.py v2.x版本后,即便开启了成员意图,默认也不会自动缓存服务器的所有成员——这个属性只返回已经被机器人缓存的成员。

解决步骤

1. 确认Discord开发者平台的意图设置

登录Discord开发者门户,进入你的机器人应用:

  • 切换到「Bot」标签页
  • 找到「Privileged Gateway Intents」区域,确保Server Members Intent(服务器成员意图)和Presence Intent(在线状态意图)都已开启
  • 保存更改

2. 代码层面的修复

使用guild.fetch_members()从Discord API主动拉取服务器成员列表,而非依赖本地缓存。以下是完整的tinder命令示例:

import discord
from discord import app_commands
import random

# 初始化意图
intents = discord.Intents.all()
# 显式开启成员意图(intents.all()已包含,此处写出来更清晰)
intents.members = True

bot = discord.Client(intents=intents)
tree = app_commands.CommandTree(bot)

@tree.command(name="tinder", description="随机匹配并提及服务器成员")
async def tinder_command(interaction: discord.Interaction):
    # 检查机器人是否有查看成员的权限
    if not interaction.guild.me.guild_permissions.view_channel:
        await interaction.response.send_message("我没有查看服务器成员的权限,请先给我分配对应权限!", ephemeral=True)
        return
    
    # 拉取服务器所有成员,并过滤掉机器人
    all_members = await interaction.guild.fetch_members(limit=None).flatten()
    human_members = [member for member in all_members if not member.bot]
    
    if not human_members:
        await interaction.response.send_message("服务器里没有非机器人成员哦!", ephemeral=True)
        return
    
    # 随机选择成员并提及
    random_member = random.choice(human_members)
    await interaction.response.send_message(f"你的匹配对象:{random_member.mention}")

@bot.event
async def on_ready():
    await tree.sync()
    print(f"机器人已登录:{bot.user.name}")

bot.run("你的机器人令牌")

补充说明

  • fetch_members(limit=None)会拉取服务器所有成员,小服务器可直接使用;如果是超大服务器,建议按需设置limit或分页拉取,避免触发API限流。
  • 若希望依赖缓存获取成员,可在初始化客户端时添加member_cache_flags参数,让机器人自动缓存更多成员,但这种方式在机器人刚启动时可能存在缓存不全的问题:
    bot = discord.Client(intents=intents, member_cache_flags=discord.MemberCacheFlags.all())
    

内容的提问来源于stack exchange,提问作者nevi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:40:23