이번엔 메시지에 달리는 reaction을 관리하는 방법을 알아보겠다. 봇으로 메시지에 reaction을 달거나 제거하는 기능을 추가해볼 것이다.
add_reaction()에는 파라미터로 emoji가 필요하다. 채팅창에서 emoji를 전송할때는 :thumbs_up:형태로 전송이 가능하나 봇으로 사용하면 오류가 발생한다.
discord.Reaction에서 emoji를 보면 유니코드 혹은 커스텀 emoji 둘 중 하나여야하기 때문이다. 따라서 이를 유니코드 형식으로 바꿔 주어야하는데 앞에 \ 하나만 붙여서 채팅에 입력하면 유니코드 버전으로 출력된다.
따라서 봇에서는 이를 복붙하여 사용하면 된다.
참고링크 js 질문이지만 python에서도 동일하게 동작한다.
@bot.command(name="따봉")
async def reaction(ctx):
await ctx.message.add_reaction('👍')
메시지에 1따봉을 주었다.
커맨드가 아닌 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을 지울 수 있다.
유니코드가 아닌 emoji를 파라미터로 사용할 때 발생한다.
reaction 삭제 시 manage_mesages 권한이 없을 때 발생한다.
이번엔 메시지에 반응을 달고 삭제하는 방법을 알아봤다. 커스텀 이모지 또한 비슷한 방법으로 사용이 가능하므로 시도해봐도 좋다.
time.sleep(259200)