파이썬 텔레그램 봇 에러 해결 - RuntimeWarning: coroutine 'Bot.send_message' was never awaited
저는 참고로 전문적인 소프트웨어 엔지니어가 아닙니다. 코딩에 코도 모르는 코린이입니다. 그냥 예전에 혼자서 파이썬을 아주 잠깐 혼자서 공부한 적만 있습니다. 뭐 만들고 싶은 프로그램이 있어서 진짜 살짝만 공부를 해봤습니다. 특정 웹페이지를 크롤링해서 텔레그램으로 메시지를 보내주는 프로그램이었습니다. 딱 이 정도만 해보고 다른 것은 전혀 하지 못합니다. 그렇기 때문에 이 글이 전문적이지도 않고 완벽한 해결이 아니라는 점 염두에 두시고 보시길 바랍니다. 단순히 제가 에러를 해결 한 후기정도로 생각해 주시면 감사하겠습니다.
파이썬 텔레그램 많은 예제들
위 사진처럼 파이썬에서 텔레그램 봇을 사용하는 예제는 구글에 엄청 많습니다. 그렇기 때문에 별도로 제가 설명하지 않아도 될 것 같습니다. 아마도 이 글을 보고 계시는 분들은 저런 예제들로 시도를 해보시다가 저처럼 에러가 나서 찾다가 제 글을 보고 계시지 않을까 예상됩니다.
저는 과거에도 텔레그램 봇을 이용해 봤고 예제도 많은 것을 알고 있었기 때문에 크게 어렵게 생각하지 않고 접근을 했습니다. 그래서 저도 구글에서 파이선 텔레그램을 예제를 사용하는 방법을 다시 보면서 진행을 했습니다.
텔레그램 봇 생성, API 키 확인, Chat ID 확인, 파인썬 텔레그램 봇 패키지 설치, 코드 작성 등의 절차를 거치며 진행을 했지만 결국은 코드가 정상적으로 동작하지 않는 것을 확인했습니다. 그래서 이 문제를 해결하기 위해서 많은 것을 찾아보았습니다.
파이썬 텔레그램 봇 에러
저는 일단 위와 같은 코드에서 위와 같은 에러가 발생했습니다. 이 때는 getUpdates가 잘못됐나 싶어서 해당 부분은 주석처리하고 다시 진행했습니다.
위 와 같이 코드를 단순하게 작성을 하고 진행을 했지만 RuntimeWarning이 뜨면서 코드가 정상동작하지 않는 것을 확인했습니다. 수많은 파이썬 텔레그램 예제들을 보면 모두 다 위와 같은 예제로 동작시키는 것을 확인했고 저 또한 과거에 위 코드로 텔레그램 봇으로 메시지를 보냈었는데 이 코드가 동작하지 않았습니다.
에러 메지시는 위와 같았았습니다. 아래에 글자로도 적어 놓겠습니다.
RuntimeWarning: coroutine 'Bot.send_message' was never awaited
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
저는 코린이이기 때문에 위 RuntimeWarning가 무엇을 뜻하는지 모릅니다. 하지만 모든 답은 구글에 있다고 생각하기 때문에 구글에서 찾아보았으나 검색능력이 부족한지 찾을 수가 없었습니다.
그러던 중 최근에 python-telegram-bot 패키지가 대규모 업데이트가 새로운 버전인 20.0 버전이 되었다는 것을 확인을 했고 많은 부분이 변경되다는 댓들을 발견하게 되었습니다.
그래서 이전 버전(13.xx)의 python-telegram-bot 패키지를 사용하면 되지 않을까 라는 생각을 했습니다. 그래서 이전 버전의 python-telegram-bot 패키지를 설치해 보니 코드가 정상적으로 동작하는 것을 확인할 수 있었습니다.
위 사진에서 정상적을 동작하는 것을 확인할 수 있었습니다.
최신 버전의 python-telegram-bot 패키지를 사용하면 좋겠지만 저 같은 코린이 들은 구글 있는 많은 예제들을 참고해서 코드를 작성해야 하는데 많은 예제들은 대부분 이전버전을 기반으로 하는 코드들이 많습니다. 그렇기 이전버전의 python-telegram-bot 패키지를 사용하는 것이 더 생산적일 것 같아 이전버전을 사용하기로 결정했습니다.
좀 더 코딩공부를 열심히 해서 실력이 쌓이고 많은 선배님들이 새로운 버전의 예제들을 만들어 주시면 새로운 버전으로 시도를 해보겠습니다. ^^
그럼 이전 버전의 python-telegram-bot 패키지를 설치하는 방법에 대해서 설명해 보도록 하겠습니다.
이전 버전 python-telegram-bot 패키지 설치 - 다운그레이드
우선 파이썬 커맨드 창을 실행해서 본인의 가상환경을 활성화하고 "pip list"라고 입력을 합니다. 참고로 저는 아나콘다를 사용하기 때문에 아나콘다 프롬프트를 실행했습니다. "pip list"는 해당 가상환경에 설치된 패키지의 리스트를 확인하는 명령어입니다.
python-telegram-bot의 최신버전인 20.0 버전이 설치된 것을 확인할 수 있었습니다. 이제 이 버전을 삭제하고 이전버전을 설치해 보겠습니다.
위 사진과 같이 패키지 삭제 명령어를 입력해 줍니다. 삭제 명령어는 "pip uninstall python-telegram-bot"입니다. 해당 명령어를 입력하고 엔터키를 누릅니다.
위 사진과 같이 삭제가 된 것을 확인할 수 있습니다.
다시 "pip list"를 입력해서 python-telegram-bot 패키지가 삭제된 것을 확인합니다. 이제 이전 버전의 python-telegram-bot 패키지를 설치하면 됩니다.
이전 버전을 설치하는 명령어는 "pip install python-telegram-bot==13.15"입니다. 이 명령어를 입력하면 13.15 버전의 python-telegram-bot 패키지가 설치가 됩니다. 저는 13.xx버전대의 마지막 버전인 13.15 버전을 설치했습니다. 버전에 대한 정보는 python-telegram-bot의 github에서 확인을 했습니다.
위 사진과 같이 설치가 진행이 되고 완료가 됩니다.
다시 "pip list"명령어를 입력해서 설치된 버전을 확인합니다. 버전이 13.15로 확인이 되고 정상적으로 다운그레이드가 된 것을 볼 수 있습니다.
그래서 아래 코드를 다시 실행해 보았습니다.
import telegram
TELEGRAM_TOKEN = '본인의 API 토큰'
bot = telegram.Bot(token=TELEGRAM_TOKEN)
bot.sendMessage(chat_id = 본인의 Chat ID, text='Hello')
그러니 위 사진과 같이 정상적으로 텔레그램으로 메시지를 보내는 것을 확인할 수 있었습니다.
그래서 코드를 좀 다듬어고 몇 가지 추가를 해보고 실행해 보았습니다. 역시 정상동작을 하는 것을 확인했습니다.
위 코드에서는 테레그램 봇 패키지의 버전과 Chat ID를 터미널창에 프린트 줍니다.
위 사진과 같이 보여주고 정상적으로 텔레그램 봇으로 메시지를 보내는 것을 확인할 수 있었습니다. 코드는 아래에 공유하겠습니다.
import telegram
print('Telegram Version :', telegram.__version__)
TELEGRAM_TOKEN = '본인의 API 토큰'
bot = telegram.Bot(token=TELEGRAM_TOKEN)
updates = bot.getUpdates()
for update in updates:
# print(update.message)
chat_id = update.message['chat']['id']
print("Chat ID: {}".format(chat_id))
bot.sendMessage(chat_id = chat_id, text='Hello')
혹시 저와 비슷한 문제점을 겪고 계신다면 패키지 버전을 다운그레이드해서 임시로 문제로 해결하시기를 바랍니다.
저 같은 코린이는 최신버전인 20.0의 예제가 많이 없어서 해결할 수 없었기 때문에 파이썬 패키지를 다운그레이드해서 이전 패키지를 사용하는 것으로 해결했지만 곧 능력자 선배님들이 새로운 버전에 맞는 많은 예제들을 만들어 주실 거라고 생각됩니다.
'IT' 카테고리의 다른 글
재분석 지점 버퍼에 있는 태그가 올바르지 않습니다 (0) | 2023.01.25 |
---|---|
파이썬으로 구글 애널리틱스 데이터 가져오기 (0) | 2023.01.18 |
라즈베리 파이에 Awtrix 호스트 구축하는 방법 (0) | 2023.01.12 |
라즈베리 파이에 OS를 설치해 봅시다 (0) | 2023.01.11 |
Awtrix 초기 설정 방법 - 유튜브 카운터, 매트릭스 시계 기능 (0) | 2023.01.09 |