discord.py框架下bot.owner_id返回None问题如何解决
问题产生原因
- discord.py框架下的Bot实例默认不会在初始化阶段主动拉取应用所有者信息,未提前拉取的情况下
bot.owner_id默认为None - 初始化Bot时没有手动传入
owner_id配置参数,框架不会自动填充该字段 - 调用
bot.owner_id的时机早于Bot完成和Discord服务器的连接认证(例如在on_ready事件触发前调用),还未拉取到对应的应用元数据 - 如果你配置的是多所有者参数
owner_ids而不是单所有者的owner_id,bot.owner_id也会固定返回None,需要读取bot.owner_ids集合获取所有者ID列表
排查修复方案
- 方案1:初始化Bot时硬编码传入所有者ID,稳定性最高,不需要额外网络请求
代码示例:# 替换为你自己的Discord用户ID bot = commands.Bot(command_prefix="!", intents=your_intents, owner_id=123456789012345678) - 方案2:在使用
bot.owner_id前先主动拉取应用信息,适合不想硬编码ID的场景,拉取后会自动缓存到Bot实例中
修复后的指令代码示例:@bot.command(aliases=["bi"]) async def bot_info(ctx): # 未缓存owner_id时先拉取应用信息 if not bot.owner_id: app_info = await bot.application_info() bot.owner_id = app_info.owner.id # 后续原有逻辑 embed.add_field(name="Owner ID", value=str(bot.owner_id)) - 方案3:排查调用逻辑的执行时机,确保所有读取
bot.owner_id的操作都在on_ready事件触发之后执行 - 方案4:如果是多所有者场景,将取值逻辑改为读取
bot.owner_ids,初始化时传入集合格式的多所有者ID:bot = commands.Bot(command_prefix="!", intents=your_intents, owner_ids={123456789, 987654321})
内容的提问来源于stack exchange,提问作者benz
相关产品推荐
相关产品推荐

