Epic Games 무료게임 Discord 알림봇은 매주 무료로 풀린 게임 제목, 종료 시간, 받으러 가는 링크를 Discord 채널에 바로 던져주는 작은 봇이다. 지난 편에서 가격 비교 에이전트를 만들었다면 이번엔 아예 공짜 뜨는 순간을 먼저 챙겨보자. 완성되면 채널에 이번 주 무료게임 몇 개가 떴는지 한 번에 보여서, 친구들 있는 서버에 붙여두면 은근 자주 보게 된다.
Epic Games Store 공식 페이지도 무료 게임이 매주 나온다고 적고 있더라구요. 그래서 이 주제는 보여주기용이 아니라 진짜 쓴다 쪽에 가깝다. 무료 끝나는 시간 놓치면 좀 아깝거든요.
준비물은 하나만
Claude 쓰는 분은 새 폴더 열고 아래 프롬프트를 그대로 넣으면 되고, Codex 쓰는 분도 거의 똑같다. 오늘 예시는 Codex로 갈게요. 공식 문서에서 확인한 것도 이번엔 두 개만 쓴다. 현재 폴더의 `AGENTS.md`를 읽는 것, 그리고 터미널에서 프롬프트 한 번으로 파일을 만드는 것. 몰라도 괜찮아 그냥 붙여넣어.
여기서부터 손으로 바로
1
말투부터 못 박기
AI에게 보낸 프롬프트
이 폴더용 `AGENTS.md`를 만들어줘. 프로젝트는 Epic Games 무료게임 Discord 알림봇이야. 규칙은 네 가지야. 알림 문구는 한국어로 짧게, 이모지 금지, 무료 종료 시간은 꼭 넣기, 제목 과장 금지. 초보자가 바로 실행할 수 있게 설명도 짧게.
왜 이렇게 시켰나: 이거 안 넣으면 AI가 갑자기 광고 문구처럼 길게 쓴다. 알림봇은 짧아야 계속 본다.
이렇게 나오면 OK: 폴더에 `AGENTS.md`가 생기고, 금지어와 문구 규칙이 4줄 안팎으로 적혀 있으면 된다.
⚠여기서 이렇게 하면 안 돼요: 규칙을 너무 많이 적으면 첫 결과가 느려진다. 이번엔 말투랑 종료 시간 정도만 잡자.
2
첫 알림이 뜨는 뼈대 만들기
AI에게 보낸 프롬프트
Node.js로 Epic Games Store 이번 주 무료게임을 읽어와 Discord 웹훅으로 보내는 아주 작은 봇을 만들어줘. 파일은 `package.json`, `app.js`, `.env.example` 세 개만 만들어줘. 환경변수는 `WEBHOOK_URL` 하나만 쓰고, 처음 실행하면 콘솔에 미리보기 한 번 찍고 Discord에도 보내줘. 무료 게임이 없으면 없다고 말해줘.
왜 이렇게 시켰나: 첫 프롬프트는 뼈대만 있어야 금방 끝난다. 파일도 세 개만 두면 어디를 건드려야 하는지 안 헷갈린다.
이렇게 나오면 OK: `npm install` 뒤 `node app.js` 했을 때 콘솔에 게임 제목과 종료 시간이 보이고, Discord 테스트 채널에도 같은 내용이 도착하면 된다. 여기서 첫 결과가 보통 제일 재밌다. 이게 된다고 싶을 거다.
⚠여기서 이렇게 하면 안 돼요: 스케줄, 중복 방지, 예쁜 카드 메시지까지 한 번에 넣지 마. 그러면 첫 결과가 늦어지고 어디서 꼬였는지 찾기 어려워진다.
3
같은 알림 반복만 막자
AI에게 보낸 프롬프트
방금 만든 Epic Games 무료게임 Discord 알림봇에 중복 방지만 추가해줘. 이미 보낸 게임 id를 `sent.json`에 저장하고, 같은 게임이면 다시 보내지 않게 해줘. 파일 구조는 유지하고 설명은 바뀐 부분만 짧게 적어줘.
왜 이렇게 시켰나: 무료게임 알림은 한 번만 와야 기분이 좋다. 같은 메시지가 매번 오면 바로 꺼버리게 된다.
이렇게 나오면 OK: 첫 실행 때는 Discord로 알림이 가고, 두 번째 실행 때는 이미 보낸 게임이라며 건너뛰면 된다. 여기까지 했으면 반은 끝난 거다.
⚠여기서 이렇게 하면 안 돼요: 날짜 전체를 저장해서 비교하게 시키면 나중에 형식이 바뀔 때 더 잘 깨진다. 게임 id나 slug처럼 덜 흔들리는 값으로 막는 쪽이 편하다.
4
채널에서 보기 좋게 다듬기
AI에게 보낸 프롬프트
방금 만든 봇을 읽고 Discord 모바일에서 한 화면에 들어오게 문구를 3줄 안으로 줄여줘. 게임 제목, 종료 시간, 받으러 가는 링크는 남기고 나머지는 빼줘. 큰 리팩토링 말고 필요한 줄만 수정해줘.
왜 이렇게 시켰나: PC에서는 괜찮아 보여도 모바일 채널에서는 긴 문구가 바로 묻힌다. 알림은 예쁜 것보다 빨리 읽히는 게 낫다.
이렇게 나오면 OK: 채널에 제목 한 줄, 종료 시간 한 줄, 링크 한 줄 정도로 떨어지면 된다. Codex 쓰는 분은 마지막 30초에 `/review` 한 번만 눌러도 꽤 잘 잡아준다.
⚠여기서 이렇게 하면 안 돼요: 이 단계에서 embed 색상, 버튼, 여러 채널 분기까지 붙이지 말자. 지금은 짧게 읽히는지만 보면 된다.
여기서 막히면
알림이 안 오고 콘솔만 찍힌다. 현상은 간단하다. `node app.js`를 돌리면 게임 제목은 보이는데 Discord 채널은 조용하다. 원인은 대부분 `WEBHOOK_URL` 앞뒤 공백이거나 다른 채널 웹훅을 넣은 경우다. `.env` 값을 다시 복사해서 넣고, 브라우저에서 열었을 때 웹훅 주소 끝이 잘리지 않았는지 먼저 확인해보자.
무료게임이 0개로 나온다. 현상은 봇이 정상 종료되는데 게임이 없다고만 말하는 식이다. 원인은 읽어온 데이터 안에서 현재 무료 항목만 고르는 조건이 너무 빡빡하거나, 지역 값 때문에 다른 목록을 보고 있을 때가 많다. 이럴 땐 Codex에게 응답 원본을 `sample.json`으로 한 번 저장하게 시키고, 무료 여부와 종료 시간 필드 이름이 지금 뭐로 들어오는지 먼저 보자.
같은 메시지가 또 온다. 현상은 첫날엔 잘 되는데 둘째 날에도 똑같은 게임이 한 번 더 오는 식이다. 원인은 `sent.json`이 실행 폴더가 아니라 다른 위치에 저장됐거나, 저장은 했는데 비교 키가 제목이라 살짝 바뀐 문자열을 새 게임으로 보는 경우다. `sent.json` 파일이 실제로 생겼는지 확인하고, 비교 값은 제목 대신 게임 id나 상품 slug로 바꿔달라고 다시 짚어주면 금방 잡힌다.
다음에 붙여볼 것
한 걸음 더
여기서 한 가지만 더 붙이면 좋다. 목요일 저녁에만 자동 실행되게 작업 스케줄러를 붙이거나, Discord 말고 Telegram에도 같이 보내게 만드는 거다. Epic Games 무료게임 Discord 알림봇을 여기까지 만들면 공짜 게임 뜨는 날이 조금 덜 지나가버린다.