인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

milly1987님의 프로필 이미지
milly1987

작성한 질문수

크롤링으로 웹, 텔레그램봇, REST API, 모바일 앱 만들기

텔레그램 봇 명령어 오류 질문드립니다.

작성

·

13K

0

이 질문글 바로 이전과 비슷한 증상을 겪고 있는데요.

텔레그램 봇 명령어가 안먹힙니다.

 

sendMessage 명령어 입력해서 실행하면

RuntimeWarning: coroutine 'Bot.send_message' was never awaited

RuntimeWarning: Enable tracemalloc to get the object allocation traceback

이런 오류 메세지가 뜨는데요. Type으로 봇 명령어들 감싸보면 coroutine 타입이라고 나와요.

찾아보니 코루틴 타입 이란게 비동기화여서 async 라이브러리를 이용해 부차적인 조치를 더 해줘야 이 명령어들이 작동할 수 있는거 같아요.

python-telegram-bot 라이브러리 버전은 20.0 사용하고 있습니다.

개인 세팅의 문제인지 아니면 봇 버전에 따라 변경된점이 있는지 혼자 해결이 안되네요.

도와주세요

답변 4

5

milly1987님의 프로필 이미지
milly1987
질문자

이 질문글 작성자입니다.

조회수를 보니 저와 같은 문제로 검색을 하시는 분이 많은거 같습니다.

답을 기다렸지만 강의는 죽은 듯 하여 강사의 답을 기대하긴 어렵네요.

결국 다른 경로로 해결을 했고, 제가 해결한 방법을 공유합니다.

 

유튜브나 기타 강의 영상은 텔레그램 봇을 만들고, 작동하기 위해 아래와 같은 코드를 썼습니다.

import telegram

token = '텔레그램 봇 API'
bot = telegram.Bot(token=token)
bot.send_message(chat_id,'보낼메세지')

현재는 텔레그램봇 라이브러리가 업데이트 되어서 과거 코드로는 작동이 안됩니다.

봇이 비동기화(coroutine) 타입이어서, 작동 신호를 넣어줘야 합니다.

아래와 같이 봇 명령어를 함수로 만들고, 그 함수를 실행해주는 코드가 추가로 넣어주세요.


import asyncio

async def main(): #실행시킬 함수명 임의지정
    token = "텔레그램 봇 API" 
    bot = telegram.Bot(token = token)
    await bot.send_message(chat_id,'보낼메세지')

asyncio.run(main()) #봇 실행하는 코드

도움이 되길 바랍니다.

 

1

안녕하세요,

도움이 될진 모르겠지만 어찌저찌 다른 방법을 찾아서 굳이 회원가입해서 답글 답니다.

제가 찾은 방법은 모듈 다운그레이드 입니다

https://sc.norwinlab.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%AA%A8%EB%93%88-%EB%8B%A4%EC%9A%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C-%ED%95%98%EB%8A%94-%EB%B2%95

 

여기 참고해서 버전 부분을 '==13.14' 이렇게 바꾸니까 설치되고 잘 작동하네요

참고로 저는 uninstall하고 설치 했습니다.

 

0

pip install -U python-telegram-bot --pre

milly1987님의 프로필 이미지
milly1987

작성한 질문수

질문하기