ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 디스코드 NFT 인증 기능 만들기 / bot 와 OAuth2 사용
    프로그래밍/강좌 2022. 4. 12. 23:01
    728x90
    반응형

    일단 개요부터

     

    https://www.youtube.com/watch?v=Usfl1kldOSY 

     

     

     

     

    2번째 영상입니다.

    디스코드 인증 페이지 -> 인증코드 얻기 -> 유저 정보 얻기 입니다.

    https://www.youtube.com/watch?v=U1KjkhDZGyY 

    드디어 node 버전을 16으로 올렸습니다.

    설치가 빠르네요.

     

     

     

    3번째 영상입니다.

    카이카스로 지갑 인증을 하는 부분입니다.

    웹작업을 어떻게 하는지 모르겠다는 의견이 있어서

    각종 실패 상황을 편집없이 넣어서 내용이 매우 길어졌습니다.

    https://www.youtube.com/watch?v=2QEZlt5bcfk 

     

     

    4번째영상

    https://www.youtube.com/watch?v=01mXs_j_JGQ 

    드디어 디스코드봇을 코딩합니다.

    아주 오래 걸랬습니다.

    디코봇에 코드는 https://github.com/GoToTheMetaverse/klay-tutorial-v2/blob/main/klaytn-07-3/bot.js

    여기 링크를 보시면 되구요

     

    모듈 설치가 필요하구요

    npm install discord.js 

     

    맴버에게 역활 주는 코드

    member.roles.add(role);

     

    맴버에게 역활 뺏는 코드

    member.roles.remove(role);

     

    채널에 채팅 보내는 코드

    channel.send("bot start");

     

    말대꾸 해주는 코드

    msg.reply("b");

     

    메시지 받아서 다시 돌려줘야하는데

    디코봇이 말한 내용도 들어오기때문에 이부분 잘못처리하면 무한 채팅이될 수 있으니 주의

    if (msg.author.bot) return;

    요런 코드가 필요합니다.

     

     

     

    5번째영상입니다.

    https://www.youtube.com/watch?v=fsE9dq95jt4 

     

    이 영상에서는 MessageEmbed 를 이용해 버튼과 URL 링크를 붙입니다.

     

    디코봇이 실행될때 예전 메세지를 지우는 코드도 들어가있습니다.

      const ch_verify = guild.channels.cache.get(Verify.channel_id);
      const old_msg = await ch_verify.messages.fetch();
      ch_verify.bulkDelete(old_msg);

     

     

    버튼을 누르면 리액션 이 콜백으로 오는데요 이때 message 의 user 와 두번재인자값으로 오는 user 가 다르니 주의하세요

    message 의 user 는 디코봇이 오구요

    user 는 리액션을 한 유저가 오게 됩니다.

    리액션에 역활 주려고 했는데 동작이 안되서 한참 해맸습니다.

    // reaction.message.member 는 디코봇이구요
    // user 는 리액션을 사람입니다. 둘은 서로 다르니 주의 하세요
    client.on("messageReactionAdd", async (reaction, user) => {
      if (user.bot) return;
      if (reaction.message.partial) await reaction.message.fetch();
      if (reaction.partial) await reaction.fetch();
      if (!reaction.message.guild) return;
    
      if (reaction.message.channelId == Verify.channel_id) {
        Verify.reaction(reaction, user);
      } else {
        console.error("messageReactionAdd no ch");
      }
    });

     

     

    다음 영상에서는 최종 동작을 구현하고 더 심오한 문제를 다룰려고 합니다.

    영상마지막에 코멘트 남겼으니 봐주세요

    반응형
Designed by Tistory.