Elipair
← 프로젝트 목록

플래닝

2024.11 – 2025.01 · Python · Oracle Cloud

로스트아크 정보를 제공하는 Discord 봇

Python · Oracle Cloud

배경

로스트아크 레이드 일정을 정하고 보스 공략을 찾아보는 일을 디스코드 안에서 할 수 있게 만든 봇 "플래닝"입니다. 날짜 투표, 보스 관문별 공략 이미지, Gemini AI 질의응답, 매주 공지사항 링크 전송 기능을 넣었습니다. Python과 discord.py로 혼자 만들었고, Oracle Cloud 서버에서 구동했습니다.

맡은 역할

  • 1인 개발 — 기능 구현, 공략 데이터 관리, Oracle Cloud 서버 구동

과정

큰 파일 하나로 시작했습니다. 첫 커밋에는 1,400줄이 넘는 main.py 하나에 일정 투표, 보스 공략, Gemini 챗봇이 모두 들어 있었습니다. 같은 날 공략 코드의 변수 이름을 phase에서 gate(관문)로 통일했습니다.

쓰면서 기능을 붙였습니다. 12월에는 매주 수요일 오전 10시 5분 공지사항 링크 자동 전송과 보스 난이도 이모지 선택을 더했습니다. 봇 이름 "플래닝"과 README, 이용약관·개인정보처리방침 링크도 붙였고, 쓰지 않게 된 로스트아크 API 설정은 지웠습니다.

게임 업데이트를 따라갔습니다. 2025년 1월 신규 보스 모르둠을 추가하면서, 같은 날 보스 공략 코드 구조를 정리했습니다.

마지막에는 파일을 역할별로 나눴습니다. main.py 하나(약 1,100줄)에 명령어, 기능 클래스, 투표 화면이 섞여 있어 찾고 고치기 어려웠습니다. 기능마다 파일 하나(cogs/), 투표 화면(ui/), 날짜 처리(utils/), 봇 생성과 스케줄러(bot/)로 나누자 main.py는 실행만 하는 35줄이 됐습니다. README에 구조와 이유도 정리했습니다.

기술적 결정

보스별 함수 대신 데이터 파일 하나로

  • 상황보스 13종마다 비슷한 명령 함수가 반복돼, 모르둠을 넣으려면 같은 함수를 하나 더 써야 했습니다.
  • 결정보스 정보와 관문별 이미지 경로를 boss_data.json으로 옮기고, 보스별 명령은 공통 처리 함수를 부르게 바꿨습니다.
  • 결과main.py가 1,478줄에서 1,091줄로 줄었고, 이후 파일을 역할별로 나누면서 35줄이 됐습니다.

난이도는 다시 입력하는 대신 이모지 반응으로

  • 상황보스마다 노말과 하드 공략이 따로 있습니다. 그런데 난이도 없이 /보스 발탄만 입력하면 "/보스 발탄 노말처럼 다시 입력하라"는 안내만 보여 줬습니다.
  • 결정안내 메시지에 🇳·🇭 반응을 달아, 명령어를 입력한 사람이 10초 안에 누르면 그 난이도의 공략을 바로 보여 주게 했습니다.
  • 결과난이도를 함께 입력하는 기존 방식도 그대로 쓸 수 있습니다.

결과

  • 군단장·에픽·어비스·카제로스 레이드 보스 13종의 관문별 공략을 제공합니다.
  • 2025년 1월 신규 보스 모르둠까지 공략 데이터를 갱신했습니다.
  • 1,478줄이던 main.py를 35줄 진입점으로 줄이고, 기능을 cogs/·ui/·utils/·bot/으로 나눴습니다.