부트캠프 종료 후 이력서를 기다리기 전 나름의 역량을 쌓기 위함과 동시에 내가 해보고 싶은 것을 하나 만들기로 결심했다.
모 스트리머 지인이 발로란트라는 게임에서 시청자 참여 컨텐츠를 진행하는 중에 대기 멤버 관리가 어렵다고 호소하였다.
시청자를 모집하는 게시글을 작성하고 멤버를 뽑는 시스템을 수동으로 진행시켜 이정도는 디스코드 봇으로 자율화를 시킬 수 있을 것 같다고 생각했다.
하지만 기존에 부트캠프에서 진행했던 요소와 개인으로 진행하는 프로젝트 요소의 차이점과 문제가 존재
기본적인 지식에 있어서는 Gemini 에게 물어보면서 시작을 하기로 했다.
<aside> 💡
디스코드로 발로란트 내전 관리 봇을 만들고 싶음
내가 원하는 대략적인 기능은
대충 이런식으로 만들려고 함
</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단계 (종료 기능): /내전종료 명령어로 대기열을 정리하는 기능을 추가합니다.
테스트 및 배포: 실제 디스코드 서버에서 충분한 테스트를 거친 후 봇을 운영합니다.
이러한 단계와 기능들을 참고하여 봇 개발을 시작하시면 원하시는 기능을 갖춘 유용한 발로란트 내전 관리 봇을 만드실 수 있을 것입니다. 만약 개발 중에 특정 부분에서 막히신다면, 관련 라이브러리의 공식 문서나 커뮤니티를 참고하시면 많은 도움을 얻으실 수 있습니다.
이런식의 답변을 제시하였다.