지난 시간에는 Discord.js 봇 개발을 위한 기본적인 환경 설정부터 프로젝트 생성, 그리고 아주 간단한 "핑퐁" 봇을 실행하는 것까지 함께 해봤습니다. TypeScript로 프로젝트를 설정하고, 봇 토큰을 안전하게 관리하는 방법도 살짝 맛봤죠. 아직은 우리 봇이 조금 심심해 보일 수 있습니다. 그래서 이번 시간에는 지난번에 만들었던 코드를 다시 한번 살펴보고, 우리 봇에게 개성을 더해줄 수 있는 '상태 메시지'를 설정하는 방법을 알아보겠습니다.
봇에게 생명을 불어넣는 '상태 메시지'
디스코드에서 친구 목록이나 서버 멤버 목록을 보면, 각 사용자 이름 아래에 "온라인", "자리 비움" 같은 상태와 함께 "OOO 하는 중", "XXX 듣는 중" 같은 문구를 본 적이 있을 겁니다. 이게 바로 '상태 메시지' 또는 '활동(Activity)'이라고 불리는 기능입니다. 우리 봇도 이런 상태 메시지를 가질 수 있습니다. 이걸 설정해주면 봇이 좀 더 살아있는 것처럼 보이고, 봇이 어떤 역할을 하는지 간략하게 알려줄 수도 있죠.
상태 메시지는 봇이 성공적으로 로그인하고 준비가 완료되었을 때, 즉 client.once(Events.ClientReady, ...)
이벤트 핸들러 안에서 설정하는 것이 일반적입니다.
setActivity
함수 사용법
Discord.js에서 봇의 상태 메시지를 설정하는 데 사용하는 함수는 client.user.setActivity()
입니다. 이 함수는 두 개의 인자를 받을 수 있습니다.
name
(필수): 표시될 활동의 이름입니다. 예를 들어 "게임 플레이 중"이라면 게임 이름이 되겠죠.options
(선택): 활동의 유형(type
)이나 스트리밍 URL 등을 설정하는 객체입니다.
가장 중요한 options.type
에는 다음과 같은 값들이 들어갈 수 있습니다. (Discord.js v14 기준, ActivityType
enum을 사용하는 것이 좋습니다.)
ActivityType.Playing
: "~을(를) 하는 중" (예:Playing '리그 오브 레전드'
) - 기본값입니다.ActivityType.Streaming
: "~을(를) 방송 중" (예:Streaming '개발 방송'
) - 이 경우options.url
에 방송 주소(Twitch 또는 YouTube)를 지정해야 제대로 표시됩니다.ActivityType.Listening
: "~을(를) 듣는 중" (예:Listening to 'Spotify'
)ActivityType.Watching
: "~을(를) 시청 중" (예:Watching 'YouTube'
)ActivityType.Competing
: "~에서 경쟁 중" (예:Competing in '코딩 대회'
)
다양한 상태 메시지 예시
이제 실제로 코드를 작성해봅시다. client.once(Events.ClientReady, ...)
블록 안에 아래와 같이 setActivity
를 추가합니다.
// src/index.ts
// ... (import 구문 및 토큰, 클라이언트 설정은 동일) ...
client.once(Events.ClientReady, (readyClient) => {
console.log(\`로그인 성공! \${readyClient.user.tag} (으)로 접속 완료!\`);
console.log('봇이 준비되었습니다. 달려봅시다!');
// 예시 1: "명령어 입력 대기 중"을 플레이하는 것으로 설정
// readyClient.user.setActivity('명령어 입력 대기 중'); // type을 지정하지 않으면 기본값은 Playing
// 예시 2: "유튜브 시청 중"으로 설정
// readyClient.user.setActivity('유튜브', { type: ActivityType.Watching });
// 예시 3: "음악 감상 중"으로 설정
// readyClient.user.setActivity('좋아하는 노래', { type: ActivityType.Listening });
// 예시 4: "개발 방송 중" (Twitch 링크와 함께)
// readyClient.user.setActivity('코딩 라이브', {
// type: ActivityType.Streaming,
// url: 'https://www.twitch.tv/yourchannel' // 실제 트위치 채널 URL로 변경해주세요
// });
// 예시 5: "서버 관리 중" 경쟁 상태로 설정
readyClient.user.setActivity('서버 관리', { type: ActivityType.Competing });
console.log(\`상태 메시지가 "\${readyClient.user.presence.activities[0]?.name || '없음'}\" (으)로 설정되었습니다.\`);
});
// ... (messageCreate 이벤트 핸들러 및 client.login은 동일) ...
위 코드에서 ActivityType
을 사용하기 위해 discord.js
import 구문에 ActivityType
을 추가해야 합니다.
import { Client, Events, GatewayIntentBits, ActivityType } from "discord.js";
여러 예시를 주석으로 남겨두었으니, 원하는 상태 메시지로 바꿔보세요. 마지막 줄의 console.log
는 실제로 어떤 상태 메시지가 설정되었는지 확인하기 위한 용도입니다.
실행하고 확인하기
코드를 수정했다면, 터미널에서 다시 봇을 실행합니다.
npx ts-node src/index.ts
봇이 성공적으로 로그인하고 나면, 디스코드 클라이언트에서 봇의 프로필을 확인해보세요. 방금 설정한 상태 메시지가 예쁘게 표시될 겁니다!
마무리
이번 시간에는 봇의 상태 메시지를 설정하는 방법을 알아봤습니다. 아주 간단한 변경이지만, 봇에게 개성을 부여하고 사용자들에게 봇의 현재 상태나 역할을 알려주는 데 꽤 유용합니다. 여러 가지 ActivityType
을 시도해보면서 여러분의 봇에게 가장 어울리는 상태 메시지를 찾아보세요.
다음 시간에는 드디어 봇의 핵심 기능이라고 할 수 있는 '명령어'를 좀 더 체계적으로 만들고 관리하는 방법에 대해 깊이 파고들어 보겠습니다. 기대하셔도 좋습니다!
'DiscordJS 개발 튜토리얼' 카테고리의 다른 글
[DiscordJS 봇 개발 튜토리얼] 2. 명령어 구조 만들기: 슬래시 명령어를 위한 첫걸음 (1) | 2025.06.03 |
---|---|
[DiscordJS 봇 개발 튜토리얼] 0. 프로젝트, 봇 생성하기 (3) | 2025.06.01 |