HK

python

파이썬 디스코드봇 개발 #2 시간을 출력하는 명령어 만들기

DevRuby 18 일 전 조회 수 99 추천 수 0

안녕하세요, 거의 한달만에 다시 써보는 디코봇 강좌입니다...ㅋㅋ 요즘에 개학도 하고 일이 많아 작성을 못했네요.

저번에 제가 올린 강좌가 이해가 안되거나, 어려웠던 분들이 많을거라고 생각되네요 (방금 다시 읽어봤는데 설명이 너무 부족함)

ㄷ..다시 처음부터 설명을 해보겠습니다.


우선 기초지식, discord는 편의상 모듈이라고 할 것이며 모듈은 파이썬 스크립트와 동일하다고 생각하셔도 무방합니다.

1
2
3
4
5
6
7
import discord
token = ""
 
client = discord.Client()
@client.event
async def on_message(message):
    print(message)
 client.run(token)
cs

일단 이런느낌으로 간단한 예제를 만들어봅시다.

코드설명

import discord - discord 모듈(스크립트)를 가져와 현재 스크립트에서 쓸 수 있게 한다.

client = discord.Client() - discord 모듈(스크립트) 안의 Client 클래스를 가져온다.
@client.event - 이건 좀 복잡한데, 여기에 잘 설명되어있으니 한번씩 보고오는걸 추천. 이해가 안된다고 해도 중요한 내용은 아니니 몰라도 됩니다

async def on_message(message): - 이 함수는 봇이 접속해있는 서버에 메세지가 올 때 마다 매번 호출되는 함수입니다. 메세지 하나당 계속해서 호출되고, message라는 변수를 가지고 있습니다. message 변수의 타입은 discord 모듈 내의 메세지 클래스입니다.
print(message) - 이건 알겠지
client.run(token) - 위 token = "" 의 쌍따옴표 안에 자신의 봇의 토큰을 넣어주세요. client.run 함수는 봇에 접속하는 함수입니다.


자... 이제 간단하게 예제를 만들어 봤으니 실행해보죠

실행하고 메세지를 보내봤더니...

8102bdf1abb9706e806daced777e2775.PNG

어? 분명 메세지를 출력하기만 했는데 무슨 이상한것들이 많습니다. 저는 단지 75efc6f02b3e1c1d9a2152ca2eb60674.PNG라고 보냈는데 말이죠...

왜 이상한것들이 출력된걸까요?


그 이유는 아까 제가 말했듯이, message 변수는 메세지의 내용이 아닌, 메세지 클래스기 때문입니다!(이게 뭔 개소ㄹ)

그래서 우리가 메세지의 내용을 알고싶다면, message 변수 내의 content라는걸 사용해 message.content 로 메세지의 내용을 볼 수 있습니다! 이거 개귀찮음... ㄹㅇ

흠흠...어쨋든 message.content를 이용해서 코드를 다시 짜보죠


1
2
3
4
5
6
7
import discord
 
client = discord.Client()
@client.event
async def on_message(message):
    print(message.content)
 
보죠cs

아까랑 많이 달라지진 않았지만, 이걸 다시 실행시켜보면

ed174a385ccc11ff1cf6e5bc5f44cf8b.PNG

메세지의 내용이 제대로 나오는것을 확인하실 수 있습니다!

와! 이제 그래서 이걸로 무엇을 할꺼냐! 시간을 출력할겁니다!(뜬금)

시간을 출력하는거라 간단하다고 생각하실 수 있는데, 시간을 구하는것 자체는 어렵지 않지만,  출력하는 과정이 꽤나 복잡할 수 있으니 잘 읽어주세요.

시작하기 앞서서 시간을 출력할때 필요한 datetime 모듈을 다운받아보겠습니다. 여기에서 자세한 정보를 찾아볼 수 있습니다.

링크에서 본 명령어를 이용해 명령 프롬프트에 python -m pip install datetime 를 쳐줍니다. 뭐라뭐라 나올텐데 조금만 기다리시면 설치가 됩니다.


1
2
3
4
5
6
7
8
9
10
import discord
import datetime
token = ""
 
client = discord.Client()
@client.event
async def on_message(message):
    if(message.content == "!시간"):
        await message.channel.send(embed=discord.Embed(title="Time", timestamp=datetime.datetime.utcnow()))
client.run(token)
cs

예제 코드입니다.

코드설명

import discord - 아까 설명함

import datetime - discord 모듈과 비슷하게 datetime 모듈을 스크립트 내에서 쓸 수 있게 해줍니다.

client = discord.Client() - 아까 설명

if(message.content == "!시간"): - 메세지의 내용이 !시간 이라면 밑에있는 명령어를 실행합니다.

await message.channel.send(embed=discord.Embed(title="Time", timestamp=datetime.datetime.utcnow())) - 저번시간에 잠깐 설명했던 임베드입니다. 제가 설명하는것보단 결과 사진을 보시면 어떤건지 감이 오실겁니다.

3aaf5e6b72ea01b8c12efd99b58f0ef7.PNG

이렇게 생긴걸 임베드라고 합니다. 임베드는 다음 강좌에서(아마도) 임베드만 딱 설명할거같습니다.

일단 결과를 봤을때, !시간이라고 메세지를 보내면 봇이 저런 메세지를 보내줍니다.

긴 글 읽어주셔서 감사합니다. 다음 강좌때 뵙겠습니다^^


2개의 댓글

DevRuby
18 일 전

지금알았는데 datetime은 내장모듈이므로 pip 안써도 됩니ㄷ..

제목 글쓴이 조회 수 날짜 추천 수
[프리미엄] [2] [HK] 마인크래프트 개발 디스코드 - 컨텐츠를 만들고 서버 어드민이 되어보자! 5 DC 434 4 일 전 0
[채널공지] 고퀄리티 서버 만들기 안내 DC 82 4 일 전 0
[python] 파이썬 디스코드봇 개발 #2 시간을 출력하는 명령어 만들기 2 DevRuby 99 18 일 전 0
[마크소식] Minecraft Bedrock - Beta 1.16.0.61 DC 46 18 일 전 0
[Java] [Java기초]1-2강, JavaVRMachine? AshBluebird 56 18 일 전 0
[마크소식] Minecraft Java Edition - Snapshot 20w20b 1 DC 112 19 일 전 0
[플러그인 제작] config.yml 만들기 2 브루스 99 22 일 전 1
[서버관리 기술] [네트워크 - DNS] 8.8.8.8 와 같은 DNS서버를 구축하기 보라색구미호 82 22 일 전 0
[커맨드 제작] 엔티티 구별은 태그를 붙여서 해주세요! /tag 7 허두 74 22 일 전 0
[Java] [Java기초]1강, OOP! Java를 자바서 JVM! 7 AshBluebird 62 23 일 전 0
[고퀄공모전] 마인크래프트 1.12.2 룰렛 스크립트 3 마크충 149 27 일 전 0
[스킨제작] 마인크래프트 하이큐 오이카와 토오루 스킨 배포 륜온 66 27 일 전 0
[JavaScript] [ JavaScript 기초강좌 ] 4강 함수 1 lukekeum 111 29 일 전 0
[플러그인 제작] [Paper 1.15 플러그인 만들기] 4.명령어 제작하기 1 choigun08 178 29 일 전 0
[서버관리 기술] [클라우드] 클라우드 서비스 의 정의 보라색구미호 58 2020.05.03 0
[스크립트 기초] 마인크래프트 스크립트 - 아이템 이름 얻는 법! 1 브금소리BGMSound 115 2020.05.02 0
[서버관리 기술] [클라우드] 클라우드 서비스 의 정의 보라색구미호 28 2020.05.02 0
[서버관리 기술] [클라우드] 클라우드 서비스 의 정의 보라색구미호 25 2020.05.02 0
[서버관리 기술] [통합] 시작하기 보라색구미호 46 2020.05.02 0
[데이터팩 제작] [tag 1편]아이템을 구분하는 tag를 추가하기! 2 WintChoco 82 2020.05.02 0
마인크래프트 플러그인 검색하는 노하우! 브루스 97 2020.05.01 0
[마크소식] Minecraft (Bedrock) - Beta 1.16.0.59 DC 84 2020.05.01 0




개발자 최신글
사진이 없습니다.

자유

와;; 화면비 안맞는거 이제 봤네;; 1

ys7

2020-06-02

0

https://www.koreaminecraft.net/files/thumbnails/435/766/001/262x150.crop.jpg
저택같은 기숙사(서버) 2

zoom5699

2020-06-02

1