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

Disnake库Discord Bot的change_presence参数不生效问题求助

Disnake机器人状态参数不生效问题排查与解决

以下是针对你遇到的「仅name参数生效,details/state/活动图片不显示,streaming类型直播图标和details失效」问题的排查步骤和解决方案:

  • 确认Disnake版本为最新稳定版
    旧版本的Disnake可能存在Activity参数支持不全的bug,先执行升级命令:

    pip install --upgrade disnake
    

    特别注意:streaming类型活动要求url必须是Twitch或YouTube的官方直播链接,Discord仅识别这两个平台的链接,非合规链接会导致直播图标不显示,连带details参数失效。

  • 纠正Activity构造的参数写法
    不要混淆disnake.Game和disnake.Activity的用途:Game仅支持name参数,要实现details、state、图片等Rich Presence功能,必须使用disnake.Activity类。正确示例:

    await bot.change_presence(
        activity=disnake.Activity(
            type=disnake.ActivityType.streaming,
            name="直播测试",
            url="https://www.twitch.tv/your_channel",  # 必须是Twitch/YouTube直播链接
            details="正在玩某游戏",
            state="观众数:10",
            large_image="game_logo",  # 此处为Discord开发者门户上传的图片key,不是外部URL
            large_text="游戏名称",
            small_image="stream_icon",
            small_text="正在直播"
        )
    )
    

    关键:活动图片不能直接传外部URL,需在Discord开发者门户的「Rich Presence」→「Art Assets」中上传图片,使用图片的**名称(key)**作为参数。上传后需等待数分钟让Discord服务器同步,刚上传的图片无法立即生效。

  • 检查代码逻辑与执行时机

    • 避免多次调用change_presence导致参数覆盖,确保最终生效的调用包含所有需要的参数。
    • 确保状态设置代码在on_ready事件中执行(机器人登录完成后),示例:
      @bot.event
      async def on_ready():
          print(f"Logged in as {bot.user}")
          # 在这里设置状态
          await bot.change_presence(
              activity=disnake.Activity(
                  type=disnake.ActivityType.playing,
                  name="某游戏",
                  details="关卡:第5关",
                  state="难度:困难"
              )
          )
      
  • 分步测试定位问题
    先简化代码测试基础功能:

    1. 测试streaming类型:仅传入name和合规的url,确认直播图标是否显示。
    2. 测试playing类型:传入name+details+state,确认非直播类型的Rich Presence参数是否生效。
    3. 逐步添加图片参数,确认同步后的图片key是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:42:19