discord.py中on_member_join事件的member.guild返回为空问题求助
解决on_member_join事件中member.guild为空的问题
核心问题排查与修复步骤
1. 必须开启Discord后台的成员特权意图
仅在代码中设置intents.members = True无法生效,需在Discord开发者平台完成配置:
- 进入你的机器人应用后台,切换到「Bot」标签页
- 在「Privileged Gateway Intents」区域,开启Server Members Intent
- 保存设置后重启机器人
2. 完善代码中的Intents配置
你当前的Intents未开启guild相关权限,这会导致无法获取Guild对象,修改如下:
import discord from discord.ext import commands TOKEN = 'token here' # 方式1:基于默认意图扩展 intents = discord.Intents.default() intents.members = True # 开启成员意图 # 方式2:手动指定所需意图 # intents = discord.Intents() # intents.guilds = True # 必须开启,否则无法获取Guild # intents.members = True bot = commands.Bot(command_prefix='🧀', intents = intents) @bot.event async def on_ready(): print(f'{bot.user.name} has connected to discord!!!') @bot.event async def on_member_join(member): print('called') print(member) print(member.guild) # 获取服务器第一个文本频道发送欢迎消息 if member.guild: channel = member.guild.text_channels[0] await channel.send(f'欢迎 {member.mention} 加入服务器!!!') bot.run(TOKEN)
3. 额外注意事项
- 确保机器人在目标服务器拥有「发送消息」权限,且能访问你选择的文本频道
- 避免依赖
text_channels[0]这种不稳定的方式,建议通过频道ID指定目标频道:channel = member.guild.get_channel(你的频道ID) if channel: await channel.send(f'欢迎 {member.mention} 加入服务器!!!')
内容的提问来源于stack exchange,提问作者AudibleDruid
相关产品推荐
相关产品推荐

