정구리의 우주정복

Python Project 03. 디스코드 봇 만들기 (3) - A minimal bot 본문

PYTHON/PROJECT

Python Project 03. 디스코드 봇 만들기 (3) - A minimal bot

Jungry_ 2020. 6. 5. 22:38
반응형

https://discordpy.readthedocs.io/en/latest/quickstart.html

 

Quickstart — discord.py 1.4.0a documentation

Quickstart This page gives a brief introduction to the library. It assumes you have the library installed, if you don’t check the Installing portion. A Minimal Bot Let’s make a bot that replies to a specific message and walk you through it. It looks so

discordpy.readthedocs.io

 

여기에 있는 간단한 코드를 실행을 해보고 소스분석을 해볼거다 

 

import discord

client = discord.Client()

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('$hello'):
        await message.channel.send('Hello!')

client.run('your token here')

client.run() 에는 내 봇의 token 을 넣어주자 (이전 게시글 참고)

그리고 분석을 해보자 ! 

 


Let’s name this file example_bot.py. Make sure not to name it discord.py as that’ll conflict with the library.

There’s a lot going on here, so let’s walk you through it step by step.

  1. The first line just imports the library, if this raises a ModuleNotFoundError or ImportError then head on over to Installing section to properly install.

  2. Next, we create an instance of a Client. This client is our connection to Discord.

  3. We then use the Client.event() decorator to register an event. This library has many events. Since this library is asynchronous, we do things in a “callback” style manner.

    A callback is essentially a function that is called when something happens. In our case, the on_ready() event is called when the bot has finished logging in and setting things up and the on_message() event is called when the bot has received a message.

  4. Since the on_message() event triggers for every message received, we have to make sure that we ignore messages from ourselves. We do this by checking if the Message.author is the same as the Client.user.

  5. Afterwards, we check if the Message.content starts with '$hello'. If it is, then we reply in the channel it was used in with 'Hello!'.

  6. Finally, we run the bot with our login token. If you need help getting your token or creating a bot, look in the Creating a Bot Account section.


 

(영어를 잘 못해서 틀릴수도있음)

이 파일의 이름을 example_bot.py 라고 하자 . discord.py 라는 이름은 라이브러리와 겹치기 때문에 사용하면 안된다 . 차근차근 알아가보자 

 

1. 첫번째 줄은 그냥 라이브러리를 import 해주는거다 만약 ModuleNotFoundError 나 ImportError 이 나오면 설치가 안된거니까 링크를 눌러서 설치를 해라 !

 

2. 다음은 클라이언트를 생성하는거다 이것은 discord 랑 연결을 해주는거다 

 

3. Client.event() 를 이용해서 event 를 등록해준다. 이 라이브러리에는 많은 이벤트가 있따 .이거는 비동기식이라서 '콜백' 스타일을 사용해야한다 

 

콜백이란 '무언가 일어났을때' 불러지는 함수이다. 우리의 경우에는 (이 소스코드의 경우엔) on_ready() 는 봇이 logging 과 setting 을 끝냈을때 불러온다 그리고 on_message() 는 봇이 메세지를 받으면 실행된다 

 

4. on_message() 이벤트는 모든 메세지를 받을때 트리거가 된다 , 우리는 우리스스로 메세지를 무시해야한다(?) (아마 걸러야한다 이런건듯). 우리는 이것을 Message.author 과 Client.User 이 동일한지 체크해야한다

 

(Message.author : 메세지를 보낸 사람 ? Client.User : 클라이언트에 연결된 사람 만약 없으면 None)  **이부분 좀 헷갈림

 

 

5. 우리는 Message.content 가 '$hello' 로 시작하는지 확인해야한다 .만약 그렇다면 우리는 그 체널에 'Hello!' 를 보내줘야한다 

 

6. 마지막으로 우리는 봇을 로그인토큰을 이용해서 실행해야한다 만약 토큰 받아오기나 봇 만드는거에 도움이 필요하면 이 링크에 들어가세용 ~

 

 

 

잘 실행을 시키고 다른 채팅에는 반응하지 않지만 $hello 에는 봇이 Hello! 를 반환해주는걸 확인할 수 있다 !!

 

 


잘 모르는것 

 

  • async def 가 무엇인가 ????

=> 비동기 프로그래밍을 위한 모듈 

     동기처리 : 특정작업이 끝나면 다음 작업을 처리하는 순차처리 방식 (아마 우리가 맨날쓰는방식)

     비동기 처리 : 여러작업을 처리하도록 예약한 뒤 작업이 끝나면 결과를 받는 방식

 

사용법 : async def functionName():

 

async def 로 만든 코루틴은 네이티브 코루틴 이라고 한다 

 

await 로 네이티브 코루틴 실행하기 

await 뒤에 코루틴 객체 , 퓨처객체 , 테스크객체(중하나) 를 지정해주면 해당 객체가 끝날때까지 기다린다음에 결과를 반환한다

await 는 네이티브 코루틴 안에서만 실행가능

 

 

이정도로만 이해를 해보겠다

 

  • @  는 파이썬에서 어떤 역할을 하는가 ?

이벤트 데코레이터가 들어오는 곳 

 

중간에 if message.author == . . . . 부분은 봇이 봇의 메세지에는 반응하지 않게끔 하는 ? 그런거인것같다 

 

아직 client 가 뭔지 등등 누가누군지 헷갈려서 더 많이 봐봐야겠다 

반응형
Comments