본문 바로가기

프로그래밍/디코봇 만들기

Node.js 디스코드 봇 만들기 # 음성봇

- 이 강좌는 Node.js와 npm이 컴퓨터에 깔려있다는 전제 하에 작성되었습니다.

전에 썼던 디스코드 챗봇 만들기에 이어서 이번에는 자바스크립트를 이용해 음성을 출력할수 있는 봇을 만들어보려 합니다. discord.js의 사용법을 모르는 분들은 여기를 먼저 읽으시면 됩니다.



모듈 설치하기

음성 기능을 이용하기 위해서는 음성관련 처리를 해주는 새로운 모듈이 필요한데요, node-opus 입니다. node-opus 말고 opusscript라는 모듈을 대신 사용할 수 있지만, 처리 효율성으로 봤을때 node-opus가 훨씬 좋습니다.

package.json의 dependencies에 추가한 뒤 cmd를 켜서 npm install이라고 명령하거나, npm install node-opus를 쳐 주시면 됩니다. 다만 이 모듈의 경우에는 c로 작성되어 있어서 node-gyp 모듈이 필요합니다.

npm install node-opus

설치할때 화면에 로그가 엄청나게 많이 표시될겁니다. 그게 정상이에요.

음성봇 만들기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
const Discord = require("discord.js");
 
const client = new Discord.Client();
 
client.on('message', message => {
 
  //(개인 1:1 채팅인 경우 보이스채널개념이 없음) => 제외
  if (!message.guild) return;
 
  if (message.content === "/재생") {
    if (message.member.voiceChannel) {
      message.member.voiceChannel.join()
        .then(connection => {
          message.reply("재생한다!");
          connection.playFile("파일명.mp3");
        })
        .catch(console.log);
    } else {
      message.reply("널 따라갈건데 너가 보이스채널에 없어.");
    }
  }
});
 
client.login("비밀키");
cs

음성봇도 사용은 단순합니다. 먼저 1:1 채팅인 경우에는 채널이라는 개념이 없기 때문에 특정 채널에 들어가는것이 불가능합니다. 그러므로 개인채팅에서는 사용할 수 없게 return을 합니다.

만약에 개인채팅이 아니라면 /재생 이라고 입력했는지 비교하고, 입력했다면 메시지를 보낸 사람이 보이스채널에 들어가있는지 체크합니다. 만약 들어가있다면 봇은 그 보이스채널에 join()을 해서 들어갑니다. 그리고 보이스채널에 성공적으로 연결되면 특정 파일을 재생합니다.

물론 코드가 있는 폴더에 mp3 파일이 있어야 됩니다.

이제 [node 파일명] 을 해서 실행하세요.



유저가 먼저 보이스채널에 들어간뒤, /재생 을 치면 재생이 됩니다. 지금은 이렇게 단순하지만, discord.js에서 이용할 수 있는 보이스 기능은 이것보다 더 방대합니다. 다른 모듈, 스트림과 함께 사용하면 youtube 영상을 플레이할수도 있습니다. 이런 추가적인 기능들은 나중에 써보도록 하겠습니다.


그럼 전 이만.