/청소는 운영진에게 보이는데 일반 멤버는 안 보이거나, 반대로 보여서는 안 될 명령어가 아무에게나 열려 있으면 그 순간부터 권한 설계가 무너진 겁니다.
슬래시 명령어 권한 문제는 "명령어가 있냐 없냐"보다 "누구에게 보여 주고 누가 실행할 수 있느냐"를 분리해서 봐야 빨리 잡힙니다.
이 글은 슬래시 명령어가 이미 등록된 상태에서, 노출 대상과 실행 대상을 어떻게 통제할지 정리하는 글입니다.
기본 슬래시 명령어 봇부터 먼저 맞춰 두었다면 슬래시 명령어 디스코드 봇 만드는 법, 파이썬 discord.py app_commands 입문 흐름 위에서 바로 정리하면 됩니다.
봇 역할 구조 자체가 불안하면 디스코드 봇 권한 설정법, 50013과 50001을 막는 기본 구조 정리와 디스코드 역할 설정 완벽 가이드, 관리자 운영진 멤버 봇 역할을 처음부터 정리하는 법을 같이 봐야 합니다.
1. 보이는데 누구는 되고 누구는 안 되는 이유부터 가른다
메시지 명령어는 채널에서 입력만 되면 비교적 단순합니다.
슬래시 명령어는 등록 상태, 노출 범위, 실행 권한을 따로 신경 써야 합니다.
특히 아래 네 가지가 같이 작동합니다.
- 명령어가 서버에 정상 등록되었는가
applications.commands스코프로 초대되었는가- 봇과 유저가 해당 채널에서 필요한 권한을 갖는가
- 명령어에 별도 권한 제한을 걸어 두지 않았는가
2. 초대 링크부터 다시 확인한다
슬래시 명령어는 초대 링크에 applications.commands가 빠지면 아예 출발부터 어긋납니다.
봇은 서버에 들어와 있는데 명령어가 안 뜨는 경우가 여기서 많이 나옵니다.
초대 링크 체크 조합은 보통 아래처럼 둡니다.
bot
applications.commands
이 부분이 익숙하지 않다면 [디스코드 봇 초대 링크 생성법, 권한이 꼬이지 않게 링크 만드는 방법](https://blog.dishost.kr/59)을 먼저 맞춰 두면 빠릅니다.
3. 관리자만 쓰게 할 명령어는 코드에서 막는다
예를 들어 /청소, /밴, /역할지급 같은 명령어는 아무나 쓰면 안 됩니다.
이럴 때는 코드 쪽에서 권한 조건을 넣습니다.
discord.py 예시는 아래처럼 둘 수 있습니다.
import discord
from discord import app_commands
@app_commands.default_permissions(manage_messages=True)
@tree.command(name="청소", description="최근 메시지를 정리합니다.")
async def clear(interaction: discord.Interaction):
await interaction.response.send_message("권한 확인 완료", ephemeral=True)
`default_permissions`는 이 명령어를 기본적으로 어떤 권한 보유자에게 노출할지 정하는 용도입니다.
메시지 관리 기능이면 `manage_messages=True`처럼 실제 목적에 맞는 권한을 거는 방식이 자연스럽습니다.
4. 채널 권한과 역할 순서는 별개로 본다
명령어가 보여도 실행이 실패할 수 있습니다.
예를 들어 /청소가 보여도 봇에게 Manage Messages가 없거나 채널에서 메시지 관리가 막혀 있으면 동작하지 않습니다.
역할 지급 계열은 더 자주 막힙니다.
봇 역할이 대상 역할보다 아래에 있으면 슬래시 명령어가 떠도 실제 지급은 실패합니다.
5. 서버 전체 공개보다 채널별 운영이 더 중요할 때가 있다
일반 정보 조회 명령어는 대부분 공개해도 괜찮습니다.
반대로 관리 명령어는 운영 채널이나 관리자 채널에서만 쓰게 둬야 합니다.
이때는 채널 권한을 같이 씁니다.
예를 들어 봇 명령어 채널에서는 일반 명령어를 열고, 관리자 채널에서는 /청소, /경고, /역할지급을 테스트하는 구조가 깔끔합니다.
6. 관리자 권한으로 전부 덮는 방식은 오래 못 간다
처음에는 귀찮아서 봇에도 Administrator, 운영진에게도 Administrator를 주는 경우가 많습니다.
당장은 편하지만 어디가 실제로 막힌 것인지 추적이 어려워집니다.
슬래시 명령어 권한 문제는 최소 권한 구조에서 확인해야 빠릅니다.
필요 기능만 정확히 열어 두면 나중에 문제를 좁히기 쉽습니다.
7. 빠르게 점검하는 체크 포인트
아래 항목을 순서대로 보면 대부분 정리됩니다.
1. 초대 링크에 applications.commands가 들어갔는가
2. tree.sync() 또는 명령어 등록이 정상 완료됐는가
3. 명령어 자체에 default_permissions 제한이 걸려 있는가
4. 유저에게 해당 권한이 실제로 있는가
5. 봇이 채널에서 필요한 작업 권한을 갖는가
6. 역할 지급 계열이면 봇 역할이 더 위에 있는가
이 순서를 건너뛰면 자꾸 코드만 다시 보게 됩니다.
8. 이런 명령어는 애초에 분리해 둔다
일반 유저용 명령어와 운영진용 명령어를 한 파일에 뒤섞으면 관리가 어려워집니다.
초기부터라도 조회형, 운영형, 관리자형 정도로 나눠 두면 권한 설계가 훨씬 깔끔해집니다.
슬래시 명령어는 UI가 깔끔한 대신, 어떤 사람에게 어떤 명령어를 보여 줄지 설계가 더 중요합니다.
9. 권한 문제는 등록 구조와 역할표를 같이 봐야 풀린다
명령어가 특정 사람에게만 안 보인다면 이 글처럼 권한 노출 설계를 계속 보면 됩니다.
명령어 등록 구조, 권한표, 역할 순서는 슬래시 명령어 디스코드 봇 만드는 법, 파이썬 discord.py app_commands 입문, 디스코드 봇 권한 설정법, 50013과 50001을 막는 기본 구조 정리, 디스코드 역할 설정 완벽 가이드, 관리자 운영진 멤버 봇 역할을 처음부터 정리하는 법을 차례로 보면 한 번에 정리됩니다.
'봇 개발 팁 > Discord.py' 카테고리의 다른 글
| 슬래시 명령어 디스코드 봇 만드는 법, 파이썬 discord.py app_commands 입문 (0) | 2026.03.28 |
|---|---|
| 파이썬 .env 환경변수로 디스코드 토큰 숨기기, 하드코딩 없이 안전하게 관리하는 법 (0) | 2026.03.27 |
| 디스코드 봇 초대 링크 생성법, 권한이 꼬이지 않게 링크 만드는 방법 (0) | 2026.03.26 |
| Message Content Intent 설정법, 디스코드 봇이 명령어를 읽지 못할 때 먼저 볼 것 (0) | 2026.03.23 |
| 파이썬 디스코드 봇 만들기 처음부터 끝까지, discord.py 입문 가이드 (0) | 2026.03.20 |