[개발] discord 봇 만들기steemCreated with Sketch.

안녕하세요 @realmankwon 입니다.

discord 봇을 만들기 위해서 discord.js 를 설치하고 예제 코드를 실행하였더니 다음과 같이 에러가 발생하였습니다.

  return () => defaultValue ??= cb();
                            ^^^

SyntaxError: Unexpected token '??='
    at wrapSafe (internal/modules/cjs/loader.js:1001:16)
    at Module._compile (internal/modules/cjs/loader.js:1049:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    at Module.load (internal/modules/cjs/loader.js:950:32)
    at Function.Module._load (internal/modules/cjs/loader.js:790:12)
    at Module.require (internal/modules/cjs/loader.js:974:19)
    at require (internal/modules/cjs/helpers.js:93:18)
    at Object.<anonymous> (/Users/realman/Documents/project/4_blockarchivelabs/uncommonlab/node_modules/@discordjs/rest/dist/index.js:276:19)
    at Module._compile (internal/modules/cjs/loader.js:1085:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)

딱히 잘못된 부분을 찾기가 어려워서 설정 문제가 아닌가 생각했는데 찾아보니 node.js 버전이 16 이상이어야 한다는군요.

nvm 으로 16버전 설치 후 변경하였더니 다른 에러가 발생하였습니다.

    throw new DiscordjsRangeError(ErrorCodes.BitFieldInvalid, bit);
    ^

RangeError [BitFieldInvalid]: Invalid bitfield flag or number: GUILDS.
    at Function.resolve (/Users/realman/Documents/project/4_blockarchivelabs/uncommonlab/node_modules/discord.js/src/util/BitField.js:168:11)
    at /Users/realman/Documents/project/4_blockarchivelabs/uncommonlab/node_modules/discord.js/src/util/BitField.js:163:54
    at Array.map (<anonymous>)
    at Function.resolve (/Users/realman/Documents/project/4_blockarchivelabs/uncommonlab/node_modules/discord.js/src/util/BitField.js:163:40)
    at new BitField (/Users/realman/Documents/project/4_blockarchivelabs/uncommonlab/node_modules/discord.js/src/util/BitField.js:33:38)
    at new IntentsBitField (/Users/realman/Documents/project/4_blockarchivelabs/uncommonlab/node_modules/discord.js/src/util/IntentsBitField.js:9:1)
    at Client._validateOptions (/Users/realman/Documents/project/4_blockarchivelabs/uncommonlab/node_modules/discord.js/src/client/Client.js:491:25)
    at new Client (/Users/realman/Documents/project/4_blockarchivelabs/uncommonlab/node_modules/discord.js/src/client/Client.js:78:10)
    at Object.<anonymous> (/Users/realman/Documents/project/4_blockarchivelabs/uncommonlab/discord/bot.js:5:16)
    at Module._compile (node:internal/modules/cjs/loader:1165:14) {
  code: 'BitFieldInvalid'
}

기존 소스는 다음과 같습니다.

const Discord = require('discord.js');  // discord.js 라이브러리 호출
const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES"] })    // Client 객체 생성

// discord 봇이 실행될 때 딱 한 번 실행할 코드를 적는 부분
client.on('ready', () => {
    console.log(`Logged in as ${client.user.tag}!`);
  
  });
  
client.on('message', msg => {

      
    try { 
    // !ping 
        if (msg.content === '!ping') msg.channel.send(`pong!`); // 채팅에서 메세지가 들어왔을 때 실행할 콜백함수입니다.

        if (msg.content === '!avatar') msg.channel.send(msg.author.displayAvatarURL()); // 메세지를 보낸 유저의 프로필 사진을 받아옵니다.
        
         if(msg.content === '!help') {
        // 저희는 MessageEmbed 생성자로 embed를 생성할 수 있습니다.
        const embed = new Discord.MessageEmbed()
        .setTitle("이것은 blockchain service bot입니다!") // 1 - embed의 제목을 담당합니다.
        .setColor('0f4c81') // 2 - embed 사이드 바의 색을 정합니다.
        .setDescription('안녕하세요! 이곳은 추후에 설명할 공간입니다.'); // 3 - 실제로 설명을 담당하는 곳입니다.
        console.log(embed);

        msg.reply({ embeds: [embed] })
    }
        //console.log(msg.author); 사용자 정보가 발생합니다.
    }catch (e) {
        console.log(e);
    }
    
    });
  
// 봇과 서버를 연결해주는 부분
client.login(token);

구글링을 해보니 client 선언시 다음과 같이 해주면 된다고 하는군요.

const { Client, GatewayIntentBits } = require("discord.js"); // discord.js 라이브러리 호출
const client = new Client({
  intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages],
}); // Client 객체 생성

실행을 하니 에러는 발생하지 않았습니다.
하지만 메세지를 수신해도 아무런 동작을 하지 않는군요...ㅜㅜ
다시 열심히 검색을 해봐야겠습니다!!!

Sort:  

우오오! 디스코드봇! 저도 열심히 요즘 해보고 있습니다. 전문인이 아닌저에겐 너무나 힘든데 이래저래 도전중입니다!

디스코드 봇을 만들수가 있군요. 정보 감사합니다.

안피곤님이라면 하루만에 뚝딱 하실 겁니다 ㅎㅎㅎ

요즘은 뚝딱이 잘 안됩니다.ㅠ 리얼맨권님 블로그 보면서 열심히 배우겠습니다. 디스코드는 한번도 안써봤어용

Coin Marketplace

STEEM 0.20
TRX 0.19
JST 0.033
BTC 88885.90
ETH 3279.02
USDT 1.00
SBD 2.99