새롭게 설치한 파이썬 텔레그램 봇 라이브러리가 버전 20.1로 설치되면서, 이전 버전으로 작성된 텔레그램 봇 관련 프로그램이 아래의 오류를 출력하면서 실행이 되지 않았습니다.
RuntimeWarning: coroutine 'Bot.send_message' was never awaited
참고로 현재 설치된 파이썬 텔레그램 봇 라이브러리의 버전은 아래의 명령어로 확인 가능합니다.
pip3 list | grep -i telegram
오류를 검색해보니, 파이썬 텔레그램 봇 라이브러리가 버전 20 이상부터 코드 사용법이 달라진 것을 확인했습니다. 파이썬 텔레그램 봇 버전 20 이상에 맞춰서 코드도 새로 작성할겸, 오늘은 파이썬 텔레그램 봇을 이용한 텍스트, 이미지, HTML 파일을 전송하는 코드를 살펴보겠습니다.
파이썬 텔레그램 봇 v20 이상 기준 텍스트 전송하는 코드
코드를 설명하기 전에, 이 글을 보시는 분들은 이미 텔레그램 봇을 생성해두었고, 기존에 파이썬 텔레그램 봇 라이브러리를 사용한 경험이 있으신 분들이 보시는 것을 추천합니다. 파이썬 텔레그램 봇 라이브러리가 어떤 라이브러리이고, 이를 사용하기 위해 어떤 정보가 필요한지 먼저 살펴보면 도움이 됩니다.
파이썬 텔레그램 봇으로 텍스트를 전송하는 코드는 아래와 같습니다. 20 이전 버전으로 파이썬 텔레그램 봇을 다뤄보셨다면, 추가된 코드가 별로 없음을 아실 수 있습니다. 우선 asyncio 라이브러리는 async와 await 구문을 기반으로 동시성 코드를 작성할 때 사용되는 라이브러리입니다. 저도 이번에 코드를 작성하면서 처음 사용해본 라이브러리라서 공부를 더 해야할 것 같습니다. 파이썬의 asyncio 라이브러리에 대해서 더 알고 싶으신 분들은 인터넷에서 추가로 정보를 얻으시는 것을 추천드립니다.
async는 코드 내 main 함수를 정의할 때 선언되었고, await는 bot.send_message를 호출할 때 사용되었습니다. 저같은 경우에는 텔레그램 봇에게 전송할 텍스트 용량이 컸기 때문에, 4096 바이트씩 잘라서 텔레그램 봇에 전송하는 for loop을 사용했습니다.
import subprocess, sys, telegram,time
import asyncio
my_token = "텔레그램 봇을 통해 생성한 토큰 값"
mychat_id = "텔레그램 봇을 통해 생성한 chat id 값"
async def main():
bot = telegram.Bot(token=my_token)
with open(sys.argv[1], errors='ignore') as input_f:
lines = input_f.readlines()
lines = "".join(lines)
for x in range(0, len(lines), 4095):
await bot.send_message(mychat_id, lines[x:x+4095])
time.sleep(5)
asyncio.run(main())
파이썬 텔레그램 봇 v20 이상 기준 이미지 전송하는 코드
파이썬에서는 이미지 파일을 읽어올 때 바이너리 데이터로 읽어옵니다. 따라서, open 함수를 사용할 때, 'rb'를 사용해서 이미지 파일을 바이너리 데이터로 img_file 변수에 저장합니다. 혹시 파이썬으로 이미지 파일을 불러오는 방법을 모르시는 분들은 파이썬에 대한 youtube 강의, 온라인 강의, 책 등을 참조해서 쉽게 공부하실 수 있습니다.
파이썬 텔레그램 봇 라이브러리를 기준으로, 이미지를 전송하는 코드와 텍스트를 전송하는 코드의 차이점은 bot.send_photo를 사용하는데 있습니다. 메세지와 같은 텍스트를 전송할 때는 bot.send_message, 이미지를 전송할 때는 bot.send_photo를 사용합니다. 방금 전 바이너리 데이터를 저장했던 img_file 변수를 bot.send_photo 내 argument인 photo에 입력하면 됩니다.
import subprocess, sys, telegram,time
import asyncio
my_token = "텔레그램 봇을 통해 생성한 토큰 값"
mychat_id = "텔레그램 봇을 통해 생성한 chat id 값"
async def main():
bot = telegram.Bot(token=my_token)
fname = sys.argv[1]
img_file = open(fname, 'rb')
await bot.send_photo(mychat_id, photo=img_file)
asyncio.run(main())
파이썬 텔레그램 봇 v20 이상 기준 HTML 파일 전송하는 코드
아래 코드에서 사용했던 파일은 html 파일인데요, 이 경우에도 바이너리 데이터로 읽어온 정보를 html_file 변수에 저장합니다. 그리고 이번에는 bot.sendDocument를 사용하는데요, 이 함수는 첨부파일처럼 파일을 텔레그램 봇으로 전송하고 싶을 대 사용하는 함수입니다. HTML 이외의 다른 확장자 파일에 대해서는 확인해보지 않았으니, 미리 테스트하신 다음 사용해보시는 것을 추천드립니다.
import subprocess, sys, telegram,time
import mimetypes
my_token = "텔레그램 봇을 통해 생성한 토큰 값"
mychat_id = "텔레그램 봇을 통해 생성한 chat id 값"
async def main():
bot = telegram.Bot(token=my_token)
filename = sys.argv[1]
html_file = open(filename, 'rb')
await bot.sendDocument(chat_id=mychat_id, document=html_file)
time.sleep(2)
asyncio.run(main())
지금까지 파이썬 텔레그램 봇 버전 20 이상에 맞춰서, 텔레그램 봇으로 텍스트, 이미지, 파일을 전송하는 코드를 살펴보았습니다. 파이썬을 기반으로 작성된 코드이기 때문에, 프로그래밍 언어인 파이썬에 대해서 제대로 공부하고 싶으신 분들은 인터넷 강의, youtube, 도서 등을 통해서 공부해보시는 것을 추천드립니다.
'IT' 카테고리의 다른 글
우분투 (Ubuntu) 클라우드 서버에서 WebUI로 Stable Diffusion 기반 Text-to-Video 모델 사용 방법 (0) | 2023.03.25 |
---|---|
아마존 Lightsail 인스턴스에서 매직스플릿만 사용했을 때의 첫 결제 금액 확인 (0) | 2023.03.02 |
우분투 (Ubuntu) 클라우드 서버에서 WebUI로 Stable Diffusion 기반 Text-to-Image 모델 사용 방법 (0) | 2023.03.01 |
구글 드라이브에 Academic Torrents의 토렌트 파일 다운로드 받는 방법 feat. 구글 코랩 (Colab) (0) | 2022.12.31 |
키움증권에 USB에 저장된 타기관 공인인증서 PC에서 등록하는 방법 (0) | 2022.12.30 |
댓글