-
디스코드 봇 만들기 (5) - 사용할 수 있는 이벤트 알아보기 (1)IT/파이썬 응용 프로그래밍 2021. 9. 23. 12:06728x90SMALL
앞의 1,2,3,4 편에서는 디스코드 봇을 세팅하고, 구동시켜봤다면 이번 편에서는 어떤 활용할만한 이벤트들이 있는지 알아볼 것이다.
1. 봇의 상태 설정하기
처음 봇을 활성화시키면 아래와 같이 봇이 온라인 상태로 되어있을 것이다. 이 봇의 상태를 바꿀 수 있는 이벤트가 있다.
@bot.event async def on_ready(): game = discord.Game("개발") await bot.change_presence(status=discord.Status.idle, activity=game)
on_ready() 이벤트는 봇이 처음 구동될 때 발생되는 이벤트이다. 이 때 활동 상태를 discord.Game()으로 설정해줄 수 있다. 임시로 "개발"이라는 활동 상태를 넣어보았다. 그 후 봇을 재시작해보면, 아래와 같이 상태가 변한다.
그런데, 자리비움 상태로 표시 되고 있다. 이 상태는 status가 idle로 설정되어 있기 때문에 이렇게 나오므로, status 부분을 바꿔주면 해결된다. 설정할 수 있는 status의 종류는 여러 개가 있다.
- discord.Status.idle : 자리비움
- discord.Status.online : 온라인
- discord.Status.offline : 오프라인
- discord.Status.dnd : 다른 용무 중
- discord.Status.do_not_disturb : 다른 용무 중
- discord.Status.invisible : 오프라인
설정하고 싶은 상태에 따라서 설정해주면 된다.
2. 입 / 퇴장 이벤트
멤버가 join하거나 서버를 나갔을 때는 on_member_join(), on_member_remove() 이벤트가 발생된다.
intents = discord.Intents.all() intents.members = True @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.event async def on_member_remove(member): msg = "안녕히가세요!" channel = bot.get_channel('Your Channel Id') await channel.send(msg)
그런데, 이걸 하기 전에 반드시 해줘야 하는 작업이 intents라는 거를 설정해주어야 한다. 실제로 discord api reference에도 on_member_join()과 on_member_remove()를 사용하기 전 Intents를 반드시 설정하라고 명시되어있다.
문서를 보고 싶다면 아래 링크를 참조하자.
(https://discordpy.readthedocs.io/en/stable/api.html#event-reference)
위의 코드에서 channel id만 바꿔서 넣어주면 멤버 입 퇴장시 알림을 보내는 것을 알 수 있다.
3. 채팅 창에 타이핑 이벤트
멤버가 디스코드 서버 채팅 창에 타이핑을 하면 발생되는 이벤트이다.
@bot.event async def on_typing(channel, user, when): print(channel) # 채널 이름 print(user) # 유저 닉네임 print(when) # 날짜 및 시간
실제로, 디스코드 채팅창에 채팅을 쳐보면 로그에 채널 이름, 유저 닉네임, 날짜 / 시간이 찍히는 것을 확인 할 수 있다.
4. 메시지가 삭제되었을 때 이벤트
메시지를 삭제하게 되면 발생되는 이벤트이다.
# 메시지 삭제 이벤트 @bot.event async def on_message_delete(message): print(message)
message 파라미터는 삭제된 메시지로, 어떤 메시지가 삭제되었는지 알 수 있다.
5. 메시지가 수정되었을 때 이벤트
메시지가 수정되면 발생하는 이벤트이다. before, after 변수로 수정되기 전, 후를 알 수 있다.
@bot.event async def on_message_edit(before, after): print(before) print(after)
한가지 재밌는 점은 메시지를 고정(pin)시키거나 고정을 해제했을 때도 해당 이벤트가 발생한다.
6. 리액션이 추가되었을 때 이벤트
메시지에 리액션이 추가되면 발생되는 이벤트이다.
@bot.event async def on_reaction_add(reaction, user): print(reaction) print(user)
어떤 유저가, 어떤 리액션을 추가했는지 알 수 있다.
7. 리액션이 제거되었을 때 이벤트
메시지에 리액션이 제거되었을 때 발생하는 이벤트이다.
@bot.event async def on_reaction_remove(reaction, user): print(reaction) print(user)
이 이벤트 역시 어떤 유저가 어떤 리액션을 제거했는지 알 수 있다.
8. 모든 리액션 제거 이벤트
메시지에서 모든 리액션이 제거됐을 때 발생하는 이벤트이다.
@bot.event async def on_reaction_clear(message, reactions): print(message) print(reactions)
9. 특정 이모지 제거 이벤트
특정 이모지가 제거 되었을 때 발생하는 이벤트이다.
@bot.event async def on_reaction_clear_emoji(reaction): print(reaction)
10. 프라이빗 채널 생성 이벤트
프라이빗 채널이 생성되었을 때 발생하는 이벤트이다.
@bot.event async def on_private_channel_create(channel): print(channel)
11. 프라이빗 채널 제거 이벤트
프라이빗 채널이 제거 되었을 때 발생하는 이벤트이다.
@bot.event async def on_private_channel_delete(channel): print(channel)
우선 최근에 실험해본 이벤트는 여기까지이다. 기타 다른 이벤트들은 다음 편에서 또 포스팅하도록 하겠다.
이 외에도 정말 다양한 이벤트들이 있다. 유저가 밴 되었을 때, 유저 정보가 업데이트 되었을 때 등등 여러가지 이벤트가 있다. 여기 포스팅된 이벤트를 보고 더 상세하게 알고싶은 점이 있다면 discord api reference를 참조하면된다.
(https://discordpy.readthedocs.io/en/stable/api.html#event-reference)
728x90LIST'IT > 파이썬 응용 프로그래밍' 카테고리의 다른 글
python으로 유튜브 댓글 수집해보기 (feat. 스우파) | openpyxl, selenium (0) 2021.10.27 디스코드 봇 만들기 (4) - 이벤트를 활용하여 인사 기능 만들어보기 (2) 2021.09.17 디스코드 봇 만들기 (3) - 커스텀 명령어 만들어보기 (0) 2021.09.16 디스코드 봇 만들기 (2) - 로컬 서버로 봇 활성화 시키기 (0) 2021.09.15 디스코드 봇 만들기 (1) - 봇 서버에 추가 (0) 2021.09.14