자동 역할 부여 디스코드 봇 만들기

2026. 4. 20. 16:49·봇 개발 팁/Discord.py

새 멤버가 들어올 때 기본 역할을 자동으로 붙여 두면 운영이 훨씬 편해집니다.

공지 읽기 전용 역할, 기본 멤버 역할, 신규 유저 역할처럼 초반에 자주 쓰는 구조가 있습니다.

수동으로 역할을 주기 시작하면 인원이 조금만 늘어도 바로 번거로워집니다.

자동 역할 부여는 간단해 보이지만 실제로는 역할 순서와 권한 계층에서 자주 막힙니다.

1. 먼저 확인할 것

기본 역할 구조와 봇 권한 구조는 이미 정리돼 있어야 합니다.

역할 이름만 만들고 순서를 안 맞추면 코드가 맞아도 실패합니다.

아직 이 부분이 애매하다면 디스코드 역할 설정 완벽 가이드, 관리자 운영진 멤버 봇 역할을 처음부터 정리하는 법과 디스코드 봇 권한 설정법, 50013과 50001을 막는 기본 구조 정리을 먼저 봐야 합니다.

2. Members Intent와 Manage Roles 권한을 맞춘다

입장 이벤트를 받으려면 SERVER MEMBERS INTENT가 필요합니다.

역할을 붙이려면 봇 역할에 Manage Roles 권한도 있어야 합니다.

둘 중 하나라도 빠지면 아래 둘 중 하나로 끝나는 경우가 많습니다.

  • 이벤트가 아예 안 돈다
  • 이벤트는 도는데 역할 지급만 실패한다

3. 역할 순서가 더 중요하다

디스코드에서는 봇 역할이 대상 역할보다 위에 있어야 역할을 줄 수 있습니다.

이 부분을 놓치면 Missing Permissions(50013)이 바로 뜹니다.

예를 들면 아래처럼 둡니다.

운영진
봇
기본멤버
신규유저
@everyone


봇 역할보다 위에 있는 역할은 봇이 지급할 수 없습니다.
이건 코드로 우회되지 않습니다.

4. 실행 전 변수부터 묶는다

DISCORD_TOKEN=여기에_봇_토큰
AUTO_ROLE_ID=여기에_자동지급_역할_ID


역할 이름으로 찾는 방식도 가능하지만, 이름이 바뀌면 바로 깨집니다.
처음부터 역할 ID를 써야 합니다.

5. 입장 직후 역할을 붙이는 코드

import os

import discord
from dotenv import load_dotenv

load_dotenv()

TOKEN = os.getenv("DISCORD_TOKEN")
AUTO_ROLE_ID = int(os.getenv("AUTO_ROLE_ID"))

intents = discord.Intents.default()
intents.members = True
client = discord.Client(intents=intents)


@client.event
async def on_ready():
    print(f"로그인 성공: {client.user}")


@client.event
async def on_member_join(member: discord.Member):
    role = member.guild.get_role(AUTO_ROLE_ID)

    if role is None:
        print("자동 지급 역할을 찾지 못했습니다.")
        return

    try:
        await member.add_roles(role, reason="신규 멤버 자동 역할 지급")
        print(f"역할 지급 완료: {member} -> {role.name}")
    except discord.Forbidden:
        print("권한 부족으로 역할 지급에 실패했습니다.")
    except discord.HTTPException as error:
        print(f"역할 지급 중 HTTP 오류: {error}")


if not TOKEN:
    raise ValueError("DISCORD_TOKEN 값이 없습니다.")

client.run(TOKEN)


핵심은 `member.add_roles()` 한 줄이지만, 실제 성공 여부는 Portal 설정과 역할 계층에서 갈립니다.
그래서 코드보다 서버 안 역할 순서를 먼저 봐야 빠릅니다.

6. 역할 지급 흐름 확인하기

실행은 아래처럼 합니다.

python main.py


그다음 테스트 계정으로 서버에 다시 들어와 역할이 붙는지 확인합니다.
바로 안 붙으면 아래 순서로 보면 됩니다.

  • 봇 역할에 Manage Roles가 있는가
  • 봇 역할이 대상 역할보다 위에 있는가
  • AUTO_ROLE_ID가 맞는가
  • SERVER MEMBERS INTENT를 켰는가

7. 실제로 자주 엉키는 지점

  • Missing Permissions(50013)가 뜨는 경우 대부분 봇 역할 순서가 낮습니다.
  • 역할 ID를 못 찾는 경우 개발자 모드를 켜지 않았거나 다른 서버 역할 ID를 넣은 경우가 많습니다.
  • 특정 유저에게만 실패하는 경우 해당 유저가 이미 같은 역할을 갖고 있거나, 다른 인증 절차와 충돌할 수 있습니다.

권한은 있는데 왜 안 되지에서 가장 많이 막히는 지점이 역할 순서입니다.

8. 자동 역할은 한 개부터 시작해야 덜 꼬인다

처음부터 입장 역할, 지역 역할, 게임 역할까지 한 번에 붙이면 관리가 복잡해집니다.

초반에는 신규유저나 기본멤버처럼 한 개만 자동 지급하면 무난합니다.

그다음 선택형 역할은 반응 역할이나 버튼 역할로 분리해야 운영에 맞습니다.

9. 환영 메시지와 같이 쓰면 흐름이 좋아진다

입장 직후 환영 메시지와 기본 역할 지급이 같이 되면 온보딩이 훨씬 부드러워집니다.

새 유저 입장에서는 규칙 채널이 보이고, 기본 안내가 보이고, 권한도 바로 맞춰지는 흐름이 됩니다.

자동 환영 인사 디스코드 봇 만들기와 묶어 두면 입구 자동화가 거의 한 세트로 정리됩니다.

10. 자동 역할 다음에는 입구 문구를 같이 손본다

기본 역할 자동 지급까지 끝났다면 이제 유저가 직접 역할을 고르는 구조로 넘어갈 수 있습니다.

역할 체계를 먼저 다시 다듬고 싶다면 디스코드 역할이 지급되지 않을 때 해결법과 Missing Permissions(50013) 오류 해결법을 함께 점검해 둬야 안전합니다.

'봇 개발 팁 > Discord.py' 카테고리의 다른 글

자동 환영 인사 디스코드 봇 만들기  (0) 2026.04.19
디스코드 슬래시 명령어 권한 설정법  (0) 2026.03.31
슬래시 명령어 디스코드 봇 만드는 법, 파이썬 discord.py app_commands 입문  (0) 2026.03.28
파이썬 .env 환경변수로 디스코드 토큰 숨기기, 하드코딩 없이 안전하게 관리하는 법  (0) 2026.03.27
디스코드 봇 초대 링크 생성법, 권한이 꼬이지 않게 링크 만드는 방법  (0) 2026.03.26
'봇 개발 팁/Discord.py' 카테고리의 다른 글
  • 자동 환영 인사 디스코드 봇 만들기
  • 디스코드 슬래시 명령어 권한 설정법
  • 슬래시 명령어 디스코드 봇 만드는 법, 파이썬 discord.py app_commands 입문
  • 파이썬 .env 환경변수로 디스코드 토큰 숨기기, 하드코딩 없이 안전하게 관리하는 법
디스호스트
디스호스트
쉽고 안정적인 디스코드 봇 호스팅 서비스, 디스호스트의 기술 블로그입니다. 디스호스트는 24시간 구동되는 서버를 통해 디스코드 봇을 대신 구동시켜 드리는 서비스를 제공하고 있습니다.
  • 디스호스트
    디스호스트 기술 블로그
    디스호스트
  • 블로그 메뉴

    • 홈
    • 디스호스트 사용 가이드
    • 디스코드 봇 호스팅, 24시간 서버 구동
    • 분류 전체보기 (82) N
      • 디스코드 (9)
      • 디스호스트 가이드 (12)
      • 봇 개발 팁 (23) N
        • Discord.js (11)
        • Discord.py (11) N
      • DiscordJS 개발 튜토리얼 (15)
      • 디스코드 서버 운영 (15) N
      • 디스코드 봇 오류 해결 (7)
  • 링크

    • 디스호스트
  • hELLO· Designed By정상우.v4.10.3
디스호스트
자동 역할 부여 디스코드 봇 만들기
상단으로

티스토리툴바