AI로 LCK Discord 알림봇 만들기
퇴근길 지하철에서 e스포츠 뉴스를 뒤적거리다 보면 LCK 첫 세트가 이미 끝나 있는 경우가 많더라구요. 오늘은 AI 코딩 비서인 Claude Code를 활용해서 내가 지정한 채널로 실시간 알림을 쏴주는 LCK Discord 알림봇 만들기 과정을 시작해볼게요. 지난 글에서 해외 직구와 상품 분석 에이전트를 조립해봤으니, 이번엔 외부 데이터를 긁어와 실시간으로 반응하는 봇 시스템으로 확장해봅시다.
준비물은 Claude Code나 Codex 중 하나만 골라서 준비하시면 됩니다. 두 도구 중 어떤 것을 선택하셔도 무방하지만, 이 포스트에서는 터미널 제어와 파일 편집을 직관적으로 수행하는 Claude Code를 기준으로 안내할게요. 여기에 알림을 전달받을 Discord 서버와 웹훅 URL만 한 줄 복사해두면 바로 코딩에 들어갈 수 있습니다.
이 첫 단계에서는 디스코드로 메시지가 누락 없이 잘 도착하는지 먼저 확인하는 게 좋습니다. 처음부터 크롤링 로직까지 한 번에 섞어버리면 에러가 났을 때 어디서 막혔는지 원인 파악이 어렵거든요. 스크립트 생성이 완료되면 터미널에 `node index.js`를 입력해서 디스코드 채널에 알림이 띵동 하고 뜨는지 확인해봅니다.
LCK 공식 일정은 별도의 오픈 API가 없어서 브라우저를 켜고 화면을 직접 긁어와야 하거든요. AI에게 Playwright를 써달라고 구체적으로 지정해야 화면 로딩을 얌전히 기다리는 견고한 스크립트가 완성됩니다. 코드 생성이 끝나면 터미널 창에 오늘 예정된 팀 이름과 경기 시간이 제대로 추출되는지 로그로 체크해보시죠.
주기적 감시는 봇의 기본이지만, 1분마다 똑같은 알림을 난사하면 디스코드 채널이 금방 복잡해집니다. AI에게 이미 알림을 쏜 경기를 기억하는 로컬 캐싱 배열을 만들어 달라고 지시하는 한 줄이 핵심이죠. 이 코드가 들어가면 오늘 예정된 경기가 시작될 때 딱 한 번만 디스코드에 알림 카드가 멋지게 뿌려집니다.
여기서 막히면
현상: 디스코드 웹훅 전송 단계에서 `400 Bad Request` 에러 코드가 떨어지며 알림이 전달되지 않음
원인: 디스코드 웹훅이 원하는 JSON 데이터 포맷에 맞지 않게 임의의 텍스트만 보냈을 때 주로 터지는 문제입니다.
해결: axios 요청부에서 `data: { content: message }`와 같이 디스코드 규격에 맞는 content 키 값으로 메시지를 한 번 감싸서 POST를 전송하도록 Claude Code에게 수정을 지시하세요.
현상: 터미널을 돌려보면 경기 일정 정보가 아무것도 없는 빈 배열 `[]`만 찍힘
원인: 네이버 e스포츠 페이지의 일정이 자바스크립트로 늦게 생성되는데 크롤러가 너무 빨리 긁어가서 그렇습니다.
해결: Playwright 코드 내에서 e스포츠 경기 카드가 화면에 뜰 때까지 기다려주는 `page.waitForSelector('.event_card')` 같은 요소를 확실히 추가해주어야 해결돼요.
현상: 며칠 잘 돌아가던 봇 스크립트가 어느 날 아침에 멈춰 있음
원인: 메모리 부족이나 일시적인 크롬 브라우저 프로세스 누수로 인해 로컬 리소스가 바닥나서 뻗었을 확률이 높거든요.
해결: 에러 로그를 확인한 뒤 가벼운 라이브러리인 cheerio와 axios 기반으로 로직을 가볍게 다이어트하거나, 윈도우 작업 스케줄러를 활용해 매일 아침 자동으로 재부팅되도록 세팅해두면 무리 없이 굴러갑니다.
다음에 붙여볼 것
오늘 완성한 LCK Discord 알림봇 제품에 네이버 쇼핑이나 지마켓의 제휴 마케팅 API를 결합해서, 우리 팀이 승리하는 순간 어울리는 기념 굿즈 세일 정보를 채널에 함께 뿌리는 수익화 파이프라인을 엮어볼 수도 있습니다. 다음 글에서는 여러 웹사이트의 쇼핑 핫딜을 결합해 실시간으로 유통을 다루는 파이프라인으로 넘어가볼게요.
이런 글도 있어요
관련 검색어
- 🔍 Claude Code 사용법
- 🔍 Claude Code 비교
- 🔍 LCK 알림봇 사용법
- 🔍 LCK 알림봇 비교
- 🔍 Discord 봇 사용법
- 🔍 Discord 봇 비교