부트캠프 종료 후 이력서를 기다리기 전 나름의 역량을 쌓기 위함과 동시에 내가 해보고 싶은 것을 하나 만들기로 결심했다.

모 스트리머 지인이 발로란트라는 게임에서 시청자 참여 컨텐츠를 진행하는 중에 대기 멤버 관리가 어렵다고 호소하였다.

image.png

시청자를 모집하는 게시글을 작성하고 멤버를 뽑는 시스템을 수동으로 진행시켜 이정도는 디스코드 봇으로 자율화를 시킬 수 있을 것 같다고 생각했다.

하지만 기존에 부트캠프에서 진행했던 요소와 개인으로 진행하는 프로젝트 요소의 차이점과 문제가 존재

  1. 부트캠프에서는 DB서버를 제공해 주었지만 지금 개인 프로젝트에서는 DB서버를 직접 구축 or 클라우드 방식을 사용해야 한다는 문제가 있다.
  2. 디스코드 봇의 경우에도 24시간 실행시킬 수 있는 클라우드 서버를 가지고 있어야 하지만 현재 본인은 구글 클라우드 무료 티어를 이용중이라 구글 서버는 사용할 수 없음
  3. 오늘은 월요일 / 실제 가동은 금요일날부터 정식적으로 시행할 예정이다. 빠른 개발 속도가 필요하나 discord.js 나 discord.py 에 대한 지식이 얕은 상태이다.

기본적인 지식에 있어서는 Gemini 에게 물어보면서 시작을 하기로 했다.

<aside> 💡

디스코드로 발로란트 내전 관리 봇을 만들고 싶음

내가 원하는 대략적인 기능은

  1. 플레이어의 정보 저장 예시 ) 최고 티어/현재 티어/인게임 닉네임/치지직 닉네임
  2. 봇이 사진과 같은 느낌으로 참가자를 받음 (내전 참여 등의 버튼을 통해)
  1. 관리자는 멤버 공개등의 버튼을 통해 등록된 플레이어 중 먼저 등록된 플레이어 10명을 리스트에서 출력
  1. 관리자가 내전 종료 버튼을 누르면 리스트에 있던 멤버 10명을 제거하고 그 뒤에 저장되어 있던 내전 대기 명단에 있던 사람들의 우선순위를 상단으로 올림 (꼭 신청을 먼저 한 사람을 우선으로 해야 함)

대충 이런식으로 만들려고 함

</aside>

에 대해 Gemini 는

안녕하세요! 디스코드로 발로란트 내전 관리 봇을 만드는 방법에 대한 아이디어를 정리해 드릴게요. 요청하신 기능들을 구현하기 위한 구체적인 방법과 명령어 예시를 함께 제시해 드립니다.

디스코드 봇 개발 개요

봇을 개발하기 위해서는 Python의 discord.py 라이브러리나 JavaScript의 discord.js 라이브러리를 사용하는 것이 일반적입니다. 데이터베이스는 간단하게 시작한다면 SQLite를 사용하거나, 추후 확장을 고려한다면 PostgreSQL, MongoDB 등을 사용할 수 있습니다.
아래 설명은 discord.py를 기준으로 작성되었지만, 주요 개념은 다른 라이브러리에도 동일하게 적용됩니다.

1. 플레이어 정보 저장 기능

플레이어의 정보를 데이터베이스에 저장하고 관리하는 기능입니다.
명령어 예시: /정보등록
작동 방식:
사용자가 /정보등록 명령어를 입력하면, 봇은 사용자에게 최고 티어, 현재 티어, 인게임 닉네임, 치지직 닉네임을 입력받는 폼(Modal)을 띄워줍니다.
사용자가 정보를 모두 입력하고 제출하면, 봇은 이 정보를 디스코드 유저 ID와 함께 데이터베이스에 저장하거나 업데이트합니다.
구현 아이디어:
데이터베이스 구조:
user_id (Discord 고유 ID, 기본 키)
valorant_nickname (인게임 닉네임)
chzzk_nickname (치지직 닉네임)
highest_tier (최고 티어)
current_tier (현재 티어)
슬래시 커맨드 (/) 와 모달(Modal) 활용:
discord.py의 @bot.tree.command() 데코레이터를 사용하여 슬래시 명령어를 만듭니다.
명령어 실행 시, discord.ui.Modal을 사용하여 사용자에게 정보를 입력받는 팝업창을 생성합니다.
(예시)

Python

# /정보등록 명령어 예시 (의사 코드)
@bot.tree.command(name="정보등록", description="발로란트 내전 정보를 등록합니다.")
async def register(interaction: discord.Interaction):
    # 정보 입력을 위한 Modal 생성
    modal = PlayerInfoModal()
    await interaction.response.send_modal(modal)

2. 내전 참가자 모집 기능

이미지와 같이 특정 메시지에 버튼을 추가하여 참가자를 모집합니다.
작동 방식:
관리자가 /내전모집과 같은 명령어를 사용하면, 봇은 이미지와 비슷한 형태의 임베드(Embed) 메시지와 함께 "내전 참여" 버튼을 생성합니다.
사용자가 "내전 참여" 버튼을 클릭합니다.
정보가 있는 경우: "내전 신청이 완료되었습니다."와 같은 응답을 보내고, 해당 유저를 내전 대기열에 추가합니다. 이미 대기열에 있다면 "이미 신청하셨습니다."라고 알립니다.
정보가 없는 경우: "플레이어 정보를 먼저 등록해주세요. /정보등록 명령어를 사용하세요." 와 같은 안내 메시지를 보냅니다.
구현 아이디어:
discord.ui.View 와 discord.ui.Button 활용:
버튼이 포함된 메시지를 만들기 위해 View를 사용합니다.
버튼 클릭 이벤트를 처리하는 콜백 함수를 작성하여, 데이터베이스에서 플레이어 정보 유무를 확인하고 대기열에 추가하는 로직을 구현합니다.
내전 대기열 관리:
별도의 데이터베이스 테이블이나 리스트 형태로 신청자 목록을 관리합니다.
신청 시각을 함께 기록하여 선착순을 보장합니다.
(예시)
(사용자가 제공한 이미지와 유사한 형태의 버튼을 의미합니다)

3. 관리자의 멤버 관리 및 알림 기능

관리자가 참가자 명단을 확인하고, 수정하며, 최종 확정된 인원에게 알림을 보냅니다.
명령어 예시: /멤버공개, /멤버수정, /내전시작
작동 방식:
/멤버공개:
관리자가 명령어를 실행하면, 봇은 내전 대기열에서 가장 먼저 신청한 10명의 정보를 임베드 메시지로 출력합니다.
출력 형식: 신청 순번 / 디스코드 멘션 / 최고 티어 / 현재 티어 / 인게임 닉네임 / 치지직 닉네임
/멤버수정 [신청 순번]:
관리자가 특정 멤버를 제외해야 할 경우, 이 명령어를 사용하여 해당 번호의 멤버를 대기열에서 제거합니다.
제거 후, 자동으로 대기열의 다음 순번 플레이어(예: 11번째 신청자)를 10명 리스트에 포함시켜 /멤버공개를 다시 실행한 것과 같은 결과를 보여줍니다.
/내전시작:
관리자가 이 명령어를 실행하면, 현재 확정된 10명의 멤버에게 개인 DM으로 "내전 추첨이 완료되었습니다. 지정된 음성 채널로 입장해 주세요."와 같은 알림 메시지를 발송합니다.
구현 아이디어:
관리자 전용 명령어 설정:
명령어에 has_permissions 와 같은 체크를 추가하여 특정 역할(예: '관리자')을 가진 사람만 사용할 수 있도록 제한합니다.
대기열 데이터 처리:
데이터베이스에서 ORDER BY 절을 사용하여 신청 시각 순으로 데이터를 정렬하고, LIMIT 10을 사용하여 상위 10명을 가져옵니다.
/멤버수정 시에는 지정된 유저를 대기열에서 삭제하거나 '제외' 상태로 표시하고, 다시 상위 10명을 불러오는 로직을 구현합니다.
DM 발송:
member.send() 함수를 사용하여 각 멤버에게 비공개 메시지를 보냅니다.

4. 내전 종료 및 대기열 관리 기능

내전이 종료된 후, 다음 내전을 위해 대기열을 정리합니다.
명령어 예시: /내전종료
작동 방식:
관리자가 /내전종료 명령어를 실행합니다.
봇은 현재 내전에 참여했던 10명의 멤버를 대기열에서 제거합니다.
기존 대기열에 남아있던 사람들(예: 11번째 신청자부터)의 순서를 앞으로 당깁니다. 즉, 11번째 신청자가 1순위가 됩니다.
"내전이 종료되었습니다. 다음 내전 신청이 가능합니다."와 같은 안내 메시지를 채널에 보낼 수 있습니다.
구현 아이디어:
데이터베이스 업데이트:
내전 참여가 확정된 10명의 데이터를 대기열 테이블에서 삭제하는 쿼리를 실행합니다.
이 작업은 매우 간단하며, 데이터베이스의 DELETE 문을 사용하여 구현할 수 있습니다.

개발 순서 제안

봇 기본 설정: 디스코드 개발자 포털에서 봇을 생성하고 토큰을 발급받습니다.
데이터베이스 설계: 플레이어 정보와 내전 대기열을 저장할 테이블을 설계합니다.
1단계 (정보 관리): /정보등록 및 정보 수정/삭제 관련 명령어를 먼저 구현합니다.
2단계 (참가 신청): /내전모집 명령어로 버튼을 생성하고, 버튼 클릭 시 대기열에 추가하는 로직을 구현합니다.
3단계 (관리 기능): /멤버공개, /멤버수정, /내전시작 등 관리자용 명령어를 구현합니다.
4단계 (종료 기능): /내전종료 명령어로 대기열을 정리하는 기능을 추가합니다.
테스트 및 배포: 실제 디스코드 서버에서 충분한 테스트를 거친 후 봇을 운영합니다.
이러한 단계와 기능들을 참고하여 봇 개발을 시작하시면 원하시는 기능을 갖춘 유용한 발로란트 내전 관리 봇을 만드실 수 있을 것입니다. 만약 개발 중에 특정 부분에서 막히신다면, 관련 라이브러리의 공식 문서나 커뮤니티를 참고하시면 많은 도움을 얻으실 수 있습니다.

이런식의 답변을 제시하였다.