[시니어 디스코드] 매니저 봇 #1 - 개발 배경
Source: Dev.to
매니저 봇 개요
시니어 디스코드 운영을 준비하면서 “매니저(Manager)” 봇을 구현하기로 기획했다.
매니저 봇의 주요 역할은 다음 두 가지이다.
- 이미 부여된 역할에 따라 닉네임을 변경할 수 있게 한다.
- 특정 채널에서는 세부 역할을 부여해, 플레이 카테고리에서 보여지는 채널을 제한한다.
서버 내 역할 채널에서는 클랜전, 생존전, 파티 랭크전, 클랜 랭크전 등 4가지 서브 역할을 별도로 부여받을 수 있다. 해당 서브 역할에 따라 플레이 카테고리에서 표시되는 채널이 달라지므로, 보이스 채널이 많아지는 상황에서도 필요한 채널만 보기 편리하게 된다.
온라인 게임 커뮤니티에서는 소속감과 서로를 알아볼 수 있는 닉네임 양식이 중요하다. 인게임에서는 자유롭게 닉네임을 설정할 수 있지만, 디스코드에서는 다음과 같은 규칙을 적용한다.
- 닉네임 앞에
시니어를 붙여 소속감을 표시할 수 있다. - 용병이 인입될 경우, 닉네임 뒤에 **년(연도)**와 용병 주인을 추가한다.
닉네임 및 역할 변경 규칙
| 명령어 사용 채널 | 적용 대상 | 조건 |
|---|---|---|
| 모든 채널 | 자기 닉네임 및 타인 닉네임 | 동일 역할 또는 자신보다 낮은 역할만 |
| 챗봇, 게스트 | 자기 닉네임 및 타인 닉네임 | 본인 또는 자신보다 낮은 역할만 |
| 게스트 | 자기 닉네임 | 본인만 |
| 클랜원 | 타 클랜원 닉네임 | 변경 불가 |
| 용병 및 게스트 | 타인 닉네임 | 변경 불가 (본인 제외) |
위 규칙을 구현하려면 명령어 사용 가능 채널과 역할 등급을 동시에 체크해야 한다. 핵심 로직은 on_message 이벤트에서 message.channel.name과 message.author.roles를 확인하고, 조건에 부합하지 않을 경우 무반응 및 메시지 삭제 처리를 수행한다.
구현 포인트
- 무반응: 해당 채널에서 명령어 사용이 불가함을 안내하고, 불필요한 채팅이 쌓이는 것을 방지한다.
- 메시지 삭제: “여기서는 사용할 수가 없구나”라는 점을 명확히 인식시켜 주는 친절한 방법이다.
코드 예시
# 무반응 + 메시지 삭제
if message.channel.name not in allowed_channels:
try:
await message.delete()
except:
pass
return
# 여기서부터는 허용된 채널에서만 닉네임 변경 로직 실행
await handle_nickname_change(message)
채널 검증을 먼저 수행하고, 허용된 경우에만 handle_nickname_change 함수를 호출해 닉네임 변경 로직을 진행한다. 구현 자체는 복잡하지 않으며, 역할과 채널 검증만 정확히 처리하면 된다.