You need to enable JavaScript to run this app. Discord.py 动态获取开发者头像URL与用户名设置Embed页脚的方法
优惠活动
大模型
产品
解决方案
定价
更多

Discord.py 动态获取开发者头像URL与用户名设置Embed页脚的方法

Discord.py 动态获取开发者账号信息实现方法

内置属性基础说明

  • 不需要硬编码开发者的用户名和头像URL,commands.Bot实例自带开发者相关的信息获取能力,拿到的对象和指令触发用户ctx.author属于同一类discord.User实例,所有属性(用户名、头像地址、账号判别码)都会随你账号修改自动同步,不存在硬编码不同步的问题
  • 可直接调用的内置逻辑说明:
    • bot.owner:直接返回缓存好的开发者discord.User对象,和ctx.author的用法完全一致,可以直接提取头像地址、用户名等信息
    • 这个属性是懒加载模式,不会在机器人启动瞬间就完成数据拉取:必须等机器人和Discord网关完成连接、加载完应用信息之后才能正常读取,绝对不能把获取逻辑写在全局同步代码块的位置
    • 最稳妥的配置方式是在初始化Bot的时候直接传入你的账号ID:bot = commands.Bot(command_prefix="!", owner_id=你的Discord账号ID),后续不管你是改用户名还是换头像,这个属性返回的信息都会实时匹配Discord端的最新数据
    • 如果配置了多个开发者账号,可以通过bot.owner_ids获取所有绑定的开发者ID列表,读取用户信息的逻辑和单所有者场景完全一致

代码实现示例

按照现有代码的逻辑调整,核心是把获取开发者信息的逻辑放到指令运行的协程内部,不要放在全局初始化区域:

# 在你的信息查询指令的协程方法内部执行
async def info_command(ctx):
    # 优先读取缓存的开发者信息,避免懒加载未命中的问题
    owner = ctx.bot.owner or await ctx.bot.application_info().owner
    em = discord.Embed()
    em.set_footer(
        icon_url=owner.avatar.url,
        text=str(owner)  # 直接将User对象转字符串会自动输出 用户名#判别码 的完整格式,和预期的展示效果完全匹配
    )
    await ctx.send(embed=em)
  • 实现细节注意点:
    • Discord.py 2.x版本之后,旧版的avatar_url属性已经替换为avatar.url,继续使用旧属性会触发弃用警告
    • 不需要每次调用指令都发网络请求拉取开发者信息:只要在on_ready事件里提前执行一次await bot.application_info(),拿到的开发者对象会存在bot的内存缓存里,后续随时调用都不会重复消耗请求额度

常见报错排查

如果获取开发者信息返回None,基本是两类原因:

  • 把获取开发者信息的代码写在了机器人初始化的同步位置,这时候还没完成网关连接,对应缓存为空
  • 初始化Bot的时候没有传入owner_id,也没有在on_ready阶段提前拉取应用信息做缓存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 09:27:04