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

请求:为Discord机器人添加特定服务器专属Autorole功能

正确的Discord机器人自动角色(指定服务器生效)实现代码

我来帮你搞定这个自动角色功能,你之前的代码主要有几个问题:比如在on_member_join事件里误用了ctx、服务器判断逻辑混乱,还有角色获取的方式不对。下面是修正后的完整代码,我会顺便把关键注意点说明白:

import discord
from discord.ext import commands

# 必须配置意图,否则无法触发成员加入事件
intents = discord.Intents.default()
intents.members = True  # 开启成员意图,这一步很重要!

client = commands.Bot(command_prefix="你的机器人前缀", intents=intents)

# 在这里设置你要生效的服务器ID和自动添加的角色ID
TARGET_GUILD_ID = 753667215710224574
TARGET_ROLE_ID = 770262439937048577

@client.event
async def on_member_join(member: discord.Member):
    # 判断用户加入的是不是指定服务器
    if member.guild.id == TARGET_GUILD_ID:
        # 从当前服务器里获取目标角色(角色是属于服务器的,这样获取更准确)
        target_role = member.guild.get_role(TARGET_ROLE_ID)
        
        if target_role:
            try:
                # 给成员添加角色
                await member.add_roles(target_role)
                print(f"成功给 {member.display_name} 添加了 {target_role.name} 角色")
            except discord.Forbidden:
                print("警告:机器人没有添加角色的权限,请检查机器人的权限设置!")
            except discord.HTTPException:
                print("添加角色时出现HTTP错误,请稍后重试!")
        else:
            print(f"错误:服务器 {member.guild.name} 中找不到ID为 {TARGET_ROLE_ID} 的角色")
    # 如果不是指定服务器,就啥也不做

# 替换成你的机器人令牌
client.run("你的机器人Token")

几个关键注意事项:

  • 开启成员意图:现在Discord要求必须在开发者门户的机器人页面开启「服务器成员意图」,同时代码里也要设置intents.members = True,不然on_member_join事件根本不会触发。
  • 不要用ctx:on_member_join事件的参数只有member,通过member.guild就能拿到用户加入的服务器,不需要ctx。
  • 角色获取方式:用member.guild.get_role()代替client.get_role(),因为同一个ID的角色在不同服务器可能不存在,这样能确保拿到的是当前服务器的角色。
  • 异常处理:加了异常判断可以避免机器人因为权限不足或者其他意外情况崩溃,方便你排查问题。

内容的提问来源于stack exchange,提问作者Xx DragonLeon xX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:08:14