Disnake开发的Discord机器人重启后原生角色名称恢复,如何通过代码设置原生角色名称?
Disnake开发的Discord机器人重启后原生角色名称恢复,如何通过代码设置原生角色名称?
嘿,我完全懂你遇到的麻烦——每次重启机器人后,那个和机器人同名的原生角色总会自动变回原来的名字,之前手动修改的结果全白费了对吧?别担心,咱们可以通过Disnake的代码让机器人启动后自动把这个原生角色改成你想要的名称,彻底解决这个问题。
解决思路
核心逻辑很简单:等机器人启动完成后,找到它在服务器里的原生角色(就是那个默认和机器人同名的角色),然后调用API修改它的名称。咱们可以把这个操作放在机器人的on_ready事件里,确保每次启动都会执行。
代码实现
下面是完整的示例代码,你可以直接套用,只需要修改几个参数即可:
import disnake from disnake.ext import commands # 初始化机器人,记得开启所有必要的意图 bot = commands.Bot(command_prefix="!", intents=disnake.Intents.all()) # -------------------------- 自定义参数 -------------------------- TARGET_ROLE_NAME = "你的机器人专属角色名" # 改成你想要的角色名称 # 如果只针对特定服务器修改,就取消下面这行注释并填入服务器ID # TARGET_GUILD_ID = 123456789012345678 # ---------------------------------------------------------------- @bot.event async def on_ready(): print(f"机器人已登录:{bot.user}") # 遍历机器人加入的所有服务器 for guild in bot.guilds: # 如果指定了目标服务器,就跳过其他服务器 if 'TARGET_GUILD_ID' in locals() and guild.id != TARGET_GUILD_ID: continue # 获取机器人在当前服务器的成员对象 bot_member = guild.me # 找到原生角色:名称和机器人用户名一致的那个角色 native_role = next((role for role in bot_member.roles if role.name == bot.user.name), None) if native_role: try: # 修改角色名称 await native_role.edit(name=TARGET_ROLE_NAME) print(f"✅ 已将服务器「{guild.name}」的原生角色修改为「{TARGET_ROLE_NAME}」") except disnake.Forbidden: print(f"❌ 权限不足,无法修改服务器「{guild.name}」的角色,请确保机器人有「管理角色」权限") except Exception as e: print(f"❌ 修改服务器「{guild.name}」角色时出错:{str(e)}") else: print(f"⚠️ 在服务器「{guild.name}」中未找到与机器人同名的原生角色") # 运行机器人,替换成你的机器人令牌 bot.run("你的机器人令牌")
关键注意事项
- 权限要求:机器人必须拥有「管理角色」的权限,否则无法修改角色名称。你可以在邀请机器人时勾选这个权限,或者在服务器的角色设置中给机器人的角色分配该权限。
- 意图设置:要确保在Discord开发者面板中开启了「Server Members Intent」(服务器成员意图),否则机器人无法获取自己的角色信息。
- 服务器范围:如果你的机器人加入了多个服务器,而你只想修改特定服务器的角色,就取消代码中
TARGET_GUILD_ID的注释,填入目标服务器的ID即可。
这样一来,每次机器人重启后,都会自动把原生角色改成你指定的名称,再也不用手动修改啦!
备注:内容来源于stack exchange,提问作者Sergey Atroshkin
相关产品推荐
相关产品推荐

