11주차 주간보고서
11주차 주간보고서
1. 개요 (Objective)
AonBot은 단순 텍스트 기반 명령어를 넘어 슬래시 명령어, 버튼, 셀렉트 메뉴, 모달(Modal) 등 디스코드의 현대적인 UI 컴포넌트를 적극 활용함. 본 주차에는 interactionCreate 이벤트를 기점으로 수많은 사용자 요청을 논리적으로 분기하고 처리하는 이벤트 기반 라우팅(Event-driven Routing) 구조를 분석함.
2. 주요 수행 내용 (Task Accomplishments)
가. 통합 인터랙션 핸들러(Unified Interaction Handler) 설계
- 진입점 최적화: index.js 내 단일 interactionCreate 리스너에서 모든 요청을 수신한 뒤, 인터랙션의 타입(Command, Button, SelectMenu, Modal)에 따라 즉시 분기하는 구조를 구축함.
- 비동기 처리(Async/Await): 각 인터랙션 처리 시 발생할 수 있는 DB I/O 지연이 봇 전체의 응답성에 영향을 주지 않도록 비동기 논리 구조를 적용함.


나. 컴포넌트별 라우팅 로직 (2D 다이어그램 참조)
- Slash Commands (isChatInputCommand): /제보, /설정 등 명령어의 이름을 키(Key)로 사용하여 미리 정의된 명령어 맵(Map)에서 해당 로직을 찾아 실행함.
- Message Components (isButton, isStringSelectMenu): 파티 모집 글의 [참가] 버튼이나 서버 선택 메뉴 등, 버튼의 customId를 파싱하여 특정 동작(예: join_party, select_server)을 수행함.
- Modal Submissions (isModalSubmit): 사용자가 입력 폼(Modal)을 통해 전달한 텍스트 데이터를 수집하여 보스 컷 시간 등을 정밀하게 갱신함.

(모달 방식 예시)
다. 예외 처리 및 사용자 피드백 메커니즘
- Ephemeral Responses: 명령어 실행 결과나 오류 메시지를 ‘나에게만 보이는 메시지’로 전송하여 채널의 가독성을 해치지 않으면서도 즉각적인 피드백을 제공함.
- Defer Reply: DB 연산이 길어질 경우 deferReply()를 호출하여 디스코드의 3초 응답 제한(Timeout) 문제를 기술적으로 해결함.
3. 기술적 성과 (Technical Achievements)
- 확장 가능한 코드 구조: 새로운 기능 추가 시 기존 코드를 대규모로 수정하지 않고 새로운 인터랙션 케이스만 추가하면 되는 유연한 라우팅 구조를 확립함.
- UX 접근성 향상: 텍스트 입력의 불편함을 모달과 셀렉트 메뉴로 대체하여 사용자의 입력 실수(Typo)를 원천 차단하고 데이터의 정확도를 높임.