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

Discord价格机器人调用client.user.edit报错:修改用户名过于频繁

Discord机器人修改昵称触发频率限制问题(间隔5分钟仍报错)

问题描述

开发的Discord价格机器人通过API获取价格后更新机器人昵称,反复收到以下报错:

discord.errors.HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body In username: You are changing your username or Discord Tag too fast. Try again later.

调用间隔约5分钟,已确认机器人拥有修改昵称权限,且Discord通用API限制为每分钟50次,远低于当前调用频率,但问题仍存在。相关代码:

@client.event
async def on_ready():
    while True:
        response = await getPrice()
        priceChange = response['priceChange']['h24']
        if(priceChange > 0):
            await client.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name=f'24H ↗ {priceChange}%'))
        else:
            await client.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name=f'24H ↙ {priceChange}%'))
        await client.user.edit(username = '$' + str(response['priceUsd']))
        print(response)
        await asyncio.sleep(300)

问题原因

你混淆了Discord的两种限制:

  • 通用API调用限制(每分钟50次)和全局用户名修改的专属限制是独立的。全局用户名属于账号级别的标识,Discord为防止滥用设置了远严格于普通API的冷却时间(通常是几小时甚至更久),即使间隔5分钟,多次修改后依然会触发该限制。

解决方案

1. 改用服务器内昵称更新(推荐)

放弃修改全局用户名,改为更新机器人在目标服务器内的昵称。服务器昵称的修改限制宽松很多,适合频繁更新价格的场景:

  • 先获取目标服务器的对象,再获取机器人在该服务器的成员实例,最后调用edit(nick=...)修改昵称。

修改后的示例代码:

@client.event
async def on_ready():
    # 替换为你的目标服务器ID
    target_guild_id = 123456789012345678
    target_guild = client.get_guild(target_guild_id)
    
    if not target_guild:
        print("未找到目标服务器,请检查服务器ID是否正确")
        return
        
    while True:
        response = await getPrice()
        priceChange = response['priceChange']['h24']
        
        # 合并状态设置代码,简化逻辑
        activity_name = f'24H ↗ {priceChange}%' if priceChange > 0 else f'24H ↙ {priceChange}%'
        await client.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name=activity_name))
        
        # 修改服务器内昵称
        bot_member = target_guild.get_member(client.user.id)
        if bot_member:
            await bot_member.edit(nick=f'${response["priceUsd"]}')
        else:
            print("无法获取机器人在服务器中的成员实例")
            
        print(response)
        await asyncio.sleep(300)

2. 若必须修改全局用户名

  • 大幅拉长更新间隔(比如每6小时以上更新一次)
  • 仅当价格变动超过设定阈值(比如±1%)时才触发更新,减少修改次数

注意事项

确保机器人在目标服务器中拥有修改昵称的权限,可在服务器设置的「角色权限」中开启「更改昵称」选项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:07:47