DEV Community

Cover image for [시니어 디스코드] 매니저 봇 #1 - 개발 배경
Senior's
Senior's

Posted on

[시니어 디스코드] 매니저 봇 #1 - 개발 배경

시니어 디스코드 운영 준비에 앞서 "매니저(Manager)" 봇 구현을 기획하게 되었다.
이후에 완성되는 봇들은 모두 VPS에서 24/7 운영할 예정이고 상황에 따라 대응할 수 있도록 RAM/CPU/HDD 모니터링 툴도 따로 준비하고 있다.

우선 매니저 봇의 역할은 크게 별 거 없다.

이미 부여된 역할에 따라서 닉네임 변경이 가능하고, 특정 채널에서는 세부적인 역할 부여까지 2가지 서비스를 제공해야 된다.

서브 역할 지급

서버 내 역할 채널에서는 클랜전/생존전/파티 랭크전/클랜 랭크전 등, 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)
Enter fullscreen mode Exit fullscreen mode

생각보다 구현은 어려운 게 없다.

Top comments (0)