코딩/Python

[python] 텔레그램 봇으로 실시간으로 봇에게 온 메세지 포워딩하기

김 숨 2024. 3. 7. 16:28

이 글은 python-telegram-bot 패키지 v20.8 이후 버전으로 작성 했습니다.

검색해서 나온 예시가 v13.x 버전 위주 코드라 패키지 다운그레이드 해서 작성하니까 오류가 더 많이 터져서 공식 문서를 보고 작성했다.  

 

Updater - python-telegram-bot v21.0.1

Previous SimpleUpdateProcessor

docs.python-telegram-bot.org

import telegram
import gspread
import logging
from telegram import Update
from telegram.ext import MessageHandler, Application, filters
import os
from dotenv import load_dotenv
import asyncio

load_dotenv()
bot_token = os.getenv("BOT_TOKEN")

logging.basicConfig(
 format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO
)

async def handle_message(update, context):
    message = update.message
    text = message.text
    
    # 텔레그램 봇 생성
    bot = telegram.Bot(token=BOT_TOKEN)
    #봇에게 온 메세지 보내기
    await context.bot.send_message(chat_id="메세지를 전달받기 원하는 챗id", text=text)

if __name__ == '__main__' :
    #실시간으로 메세지 받아오기 
    #v20 이후 Updater가 아닌 Application메서드를 씀
    application = Application.builder().token(bot_token).build()
    #봇에게 개인텔로 온 대화만 메세지 전송
    application.add_handler(MessageHandler(filters.ChatType.PRIVATE,handle_message))
    application.run_polling(allowed_updates=Update.MESSAGE)

 

 

구글링 및 ChatGPT가 알려주는 코드 중 실시간 메세지를 처리 할 때 필요한 Updater 메서드가 계속 오류가 났다.

찾아보니까 v20.x 이후 부터 많이 바뀌었다고 한다.  그래서 쓰레드 대신 콜백, 비동기로 API랑 통신을 하거나, 실시간 이벤트를 핸들링 할 때 Application 메서드를 사용하는 등 처리를 해야한다.

 

 

 

Transition guide to Version 20.0

We have made you a wrapper you can't refuse. Contribute to python-telegram-bot/python-telegram-bot development by creating an account on GitHub.

github.com

 

---

await 이후 받아오는 값은 뭘까?

success 일 경우 reply로 전송 완료되었다. 답할 수 있도록 기능추가

봇이 메세지를 일정시간 전송하지 못할 경우 재전송하도록 구성

https://docs.python-telegram-bot.org/en/v21.0.1/telegram.bot.html#telegram.Bot.forward_message