안 쓰던 블로그

[디스코드봇] 이모지를 누르면 봇이 반응하기 본문

언어/파이썬 디스코드봇

[디스코드봇] 이모지를 누르면 봇이 반응하기

proqk 2020. 9. 7. 17:08
반응형

봇이 이모지로 반응하기 foxtrotin.tistory.com/274

메시지를 이쁘게 출력하기 foxtrotin.tistory.com/276

 

이전 글에서 봇이 메시지에 반응해 주는 기능을 구현했다

이번엔 유저가 그 반응을 누르면 봇이 메시지를 보내보는 기능이다

 

import discord
import asyncio
from discord.ext import commands
from discord.ext.commands import Bot

client = discord.Client()

@client.event
async def on_message(message):
    if message.content.startswith('!shop'):
        embed = discord.Embed(title="SHOP BOT",description="SHOP 아이템 목록. 쇼핑을 합시다", color=0x00aaaa)
        embed.add_field(name="STEP🦶", value="빠르게 이동한다", inline=False)
        embed.add_field(name="STUN⚔️", value="스턴!", inline=False)
        msg = await message.channel.send(embed=embed)
        await msg.add_reaction("🦶") #step
        await msg.add_reaction("⚔️") #stun

@client.event
async def on_reaction_add(reaction, user):
    if user.bot == 1: #봇이면 패스
        return None
    if str(reaction.emoji) == "🦶":
        await reaction.message.channel.send(user.name + "님이 step 아이템을 구매")
    if str(reaction.emoji) == "⚔️":
        await reaction.message.channel.send(user.name + "님이 stun 아이템을 구매")

client.run('봇토큰입력')

 

on_reaction_add()는 리액션으로 반응이 왔을 때 할 행동을 적는다

매개변수로 무슨 리액션이 왔는지에 대한 내용인 reaction과, 리액션을 한 유저의 정보 user를 받았다

만약 리액션이 ~라면 ~행동을 한다라고 구현해 주면 된다

 

다만 이런 식으로 하면 다른 사람이 눌렀을 때도 반응하게 되는데

봇을 필터링 한 것처럼 리액션한 user가 메시지를 보낸 본인이 아니면 패스하는 식으로 걸러줄 수 있다

반응형
Comments