[Telegram bot] 텔레그램 봇 만들기(2) + RuntimeWarning: coroutine '' was never awaited

2025. 1. 14. 16:41카테고리 없음

728x90
반응형

RuntimeWarning: coroutine 'Bot.send_message' was never awaited

 

1. python-telegram-bot 다운그레이드해 13.15 버전 사용

2. asyncio 모듈 추가

 

 

 

 

1.  python-telegram-bot 다운그레이드해 13.15 버전 사용

python-telegram-bot 20 버전부터는 async 및 await를 사용한 비동기 프로그래밍이 사용됐다.

asyncio 쓰기 어려우면 다운그레이드하면 작동한다.

13.15 이하버전으로 사용하면 편하다.

pip uninstall python-telegram-bot
pip install python-telegram-bot=3.15

 

2. asyncio 모듈 추가

pip로 asyncio 모듈 설치

pip install asyncio

 

기존 코드

import telegram
import asyncio

token = '텔레그램 봇 API 토큰'
chat_id = 숫자

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

 

수정 코드

import telegram
import asyncio

token = '텔레그램 봇 API 토큰'
chat_id = 숫자

bot = telegram.Bot(token=token)
asyncio.run(bot.send_message(chat_id,'보낼메세지'))
import telegram
import asyncio

token = '텔레그램 봇 API 토큰'
chat_id = 숫자

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

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

`

 asyncio는 비동기 프로그래밍을 위한 모듈로 CPU 작업과 I/O (Input & Output)을 병렬로 처리하는 기능을 제공한다. 

 

 def 앞에 async를 붙인 async def 비동기 함수를 코루틴 (coroutine)이라고 한며, 비동기 함수는 'await'와 쓰는 것이 특징이다. 이는 객체가 종료될 때까지 대기한 후 결과를 반환한다.

 

비동기 함수를 호출하기 위해서는 이벤트 루프에 등록해야 하고, run함수로 실행시켜야 한다.

 

반응형