유저의 활동에 따라 포인트를 부여하는 시스템은 봇의 재미와 참여도를 높여줍니다. 간단한 구조로 시작해볼 수 있습니다. 여기서는 메시지 활동에 따라 포인트를 올려주는 기본적인 예시를 다룹니다.
기본 구조
- 메시지를 보낼 때마다 포인트를 1씩 올려줍니다.
- 데이터베이스(SQLite 등)에 유저별 포인트를 저장합니다.
!포인트
명령어로 자신의 점수를 확인할 수 있게 합니다.
예제 코드
아래는 Prisma를 사용해 포인트를 저장하고 불러오는 함수 예시입니다. 데이터베이스 연결 및 Prisma 설정 방법은 디스코드 봇에 SQLite 연동하기 - Prisma로 쉽게 시작하기를 참고하세요.
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
export async function addPoint(userId) {
await prisma.user.upsert({
where: { id: userId },
update: { points: { increment: 1 } },
create: { id: userId, points: 1 }
});
}
export async function getPoint(userId) {
const user = await prisma.user.findUnique({ where: { id: userId } });
return user ? user.points : 0;
}
디스코드 봇 이벤트에서 사용하는 예시:
client.on('messageCreate', async msg => {
if (msg.author.bot) return;
await addPoint(msg.author.id);
if (msg.content === '!포인트') {
const points = await getPoint(msg.author.id);
msg.reply(`${msg.author.username}님의 포인트: ${points}`);
}
});
코드 리뷰 및 설명
- addPoint 함수: 메시지를 보낼 때마다 해당 유저의 포인트를 1 증가시킵니다.
- getPoint 함수: 유저의 현재 포인트를 데이터베이스에서 불러옵니다.
- 봇 메시지 무시: 봇끼리 포인트를 올리지 않도록 반드시 체크해야 합니다.
- 명령어 구조:
!포인트
외에도 다양한 명령어로 확장할 수 있습니다.
확장 아이디어
- 포인트 랭킹, 일일 미션, 보상 시스템 등 다양한 기능으로 발전시킬 수 있습니다.
- 포인트 감소, 초기화, 관리자 명령어 등도 추가 가능합니다.
- 데이터베이스를 MySQL, MongoDB 등으로 교체해 대규모로 확장할 수 있습니다.
마무리
포인트 시스템은 봇의 기본 기능 중 하나로, 유저들의 참여를 유도하는 데 큰 역할을 합니다. 기본 구조를 익힌 뒤, 다양한 아이디어로 발전시켜보세요.
'봇 개발 팁 > Discord.js' 카테고리의 다른 글
디스코드 봇 명령어, 길드 커맨드와 글로벌 커맨드 차이점, 사용 방법 (0) | 2025.05.31 |
---|---|
Sharding이란? 대규모 봇에서의 필수 구조 이해 (0) | 2025.05.23 |
디스코드 봇에 SQLite 연동하기 - Prisma로 쉽게 시작하기 (2) | 2025.05.21 |
디스코드 봇 + OpenAI 연동하기 (ChatGPT API) (1) | 2025.05.20 |
환경변수와 .env 파일로 토큰 안전하게 관리하기 (0) | 2025.05.18 |