9. 메시지 다루기2

chaejm55·2021년 4월 5일
1

디스코드봇

목록 보기
11/18
post-thumbnail

0. 들어가기 전에

이번엔 메시지에 달리는 reaction을 관리하는 방법을 알아보겠다. 봇으로 메시지에 reaction을 달거나 제거하는 기능을 추가해볼 것이다.

1. emoji


add_reaction()에는 파라미터로 emoji가 필요하다. 채팅창에서 emoji를 전송할때는 :thumbs_up:형태로 전송이 가능하나 봇으로 사용하면 오류가 발생한다.
discord.Reaction에서 emoji를 보면 유니코드 혹은 커스텀 emoji 둘 중 하나여야하기 때문이다. 따라서 이를 유니코드 형식으로 바꿔 주어야하는데 앞에 \ 하나만 붙여서 채팅에 입력하면 유니코드 버전으로 출력된다.

(위가 일반이고 아래가 유니코드 버전이다)

따라서 봇에서는 이를 복붙하여 사용하면 된다.

참고링크 js 질문이지만 python에서도 동일하게 동작한다.

2. reaction 추가하기

@bot.command(name="따봉")
async def reaction(ctx):
    await ctx.message.add_reaction('👍')

메시지에 1따봉을 주었다.

3. 특정 reaction 제거하기

커맨드가 아닌 event로 처리한다.

@bot.event
async def on_raw_reaction_add(payload): // event로 reaction 추가 시 처리
    banned_emoji = "👎"  // 제거할 reaction 지정
    author = payload.user_id
    channel = await bot.fetch_channel(payload.channel_id)
    message = await channel.fetch_message(payload.message_id)
    if payload.emoji.name == banned_emoji and author != bot.user.id: // bot이 추가한 리액션은 무시
        await message.clear_reaction(banned_emoji)

예시로는 clear_reaction()만 들었지만 clear_reactions()로 반응 전체 제거, remove_reaction(emoji, member)로 특정 유저의 reaction을 지울 수 있다.

참고링크

4. 발생할 법할 오류

1) Unknown Emojis

유니코드가 아닌 emoji를 파라미터로 사용할 때 발생한다.

2) MissingPermissions

reaction 삭제 시 manage_mesages 권한이 없을 때 발생한다.

5. 마무리

이번엔 메시지에 반응을 달고 삭제하는 방법을 알아봤다. 커스텀 이모지 또한 비슷한 방법으로 사용이 가능하므로 시도해봐도 좋다.

github 전체 코드

time.sleep(259200)
profile
여러가지를 시도하는 학생입니다

0개의 댓글