-
디스코드 봇 만들기 (4) - 이벤트를 활용하여 인사 기능 만들어보기IT/파이썬 응용 프로그래밍 2021. 9. 17. 12:16728x90SMALLSMALL
디스코드 개발자 포털에서 사용할 수 있는 이벤트들을 모아놓은 도큐먼트가 있다. 이 링크를 보면 사용할 수 있는 이벤트가 어떤 것들이 있는지 알 수 있다.
https://discordpy.readthedocs.io/en/stable/api.html#event-reference
그런데, 이 많은 이벤트들을 어떻게 다 알 수 있는지도 미지수다. 스크롤을 내려도 끝도 없고 영어로 되어있기 때문에 검색도 어떻게 해야할 지 감이 안잡힌다. 그래서 사용해본 것들 위주로 정리를 좀 해보려고 한다.
우선 이벤트 활용을 어떻게할지 감을 잡기 위해서, 가장 기본 적인 on_member_join 이벤트로 인사 기능을 먼저 만들어보자.
import discord from discord.ext import commands token = 'Your Token' intents = discord.Intents.all() intents.members = True bot = commands.Bot(command_prefix=strings.PREFIX, intents=intents) # 인사 @bot.event async def on_member_join(member): msg = "안녕하세요!" await member.send(msg)
위의 API reference를 참고해보면, on_member_join이라는 이벤트를 제공하는 것을 알 수 있다. on_member_join 이벤트는 멤버가 디스코드 서버에 입장했을 때 발생되는 이벤트다. 파라미터로 member를 반드시 넣어줘야한다. (API reference 안에 있는 요구사항)
이 때, 주의해야할 점이 있다. 4~5번째 줄에 intents 관련 코드를 반드시 넣어줘야 한다. 필자도 이것 때문에 거의 한 두시간은 삽질했는데, discord 1.5이상을 사용하는 유저는 intents 라는 것을 통해 봇에게 권한을 반드시 줘야한다고 한다. API reference 안에도 on_member_join() 이벤트를 정상적으로 처리하려면, intents.members를 반드시 True로 줘야한다고 쓰여있다.
정리하자면, on_member_join() 이벤트 처리를 위해 반드시 들어가야할 조건은 두가지다.
1. intents.members = True일 것
2. member를 파라미터로 받을 것
이 두가지를 만족시켜서 작성한 코드가 위에 있는 코드이다. 위에 있는 코드를 실행하게 되면 실제로 유저가 디스코드 서버에 입장했을 때 member.send() 메소드가 호출되면서 개인 DM으로 메시지가 "안녕하세요!"라는 메시지가 전송된다.
개인 DM말고 채널에 입장 알림을 하는 방법은 없을까? 당연히 있다.
import discord from discord.ext import commands token = 'Your Token' intents = discord.Intents.all() intents.members = True bot = commands.Bot(command_prefix=strings.PREFIX, intents=intents) # 인사 @bot.event async def on_member_join(member): msg = "안녕하세요!" await member.send(msg) # 개인 DM으로 보내기 channel = bot.get_channel('Your Channel Id') await channel.send(msg) # channel에 보내기
bot 변수에서 get_channel 메소드에 채널 id를 파라미터 값으로 넣어주면 channel 변수를 얻을 수 있는데, 이 channel 변수에서 send 메소드를 호출하면 채널에도 메시지를 보낼 수 있다.
channel id 값을 얻어오는 방법은 다음 절차대로 할 수 있다.
1. 디스코드 좌측 하단의 톱니바퀴 버튼을 누른다. (개인 설정 부분)
2. 좌측에서 고급 탭을 클릭 후, 개발자 모드를 ON해준다.
3. 채널을 우클릭 후, ID 복사하기를 눌러준다.
이렇게 하면, 채널 id가 클립보드에 복사된다, 이걸 사용하면 서버에 멤버가 조인했을 때, 자동으로 인사할 수 있다.
API reference를 참고하면 다양한 이벤트들을 활용해서, 봇을 만들 수 있다. 5편에서는 다른 다양한 이벤트들을 알아볼 것이다.
728x90LIST'IT > 파이썬 응용 프로그래밍' 카테고리의 다른 글
python으로 유튜브 댓글 수집해보기 (feat. 스우파) | openpyxl, selenium (0) 2021.10.27 디스코드 봇 만들기 (5) - 사용할 수 있는 이벤트 알아보기 (1) (0) 2021.09.23 디스코드 봇 만들기 (3) - 커스텀 명령어 만들어보기 (0) 2021.09.16 디스코드 봇 만들기 (2) - 로컬 서버로 봇 활성화 시키기 (0) 2021.09.15 디스코드 봇 만들기 (1) - 봇 서버에 추가 (0) 2021.09.14