[리원아빠] 파이썬 텔레그램봇 자동응답 프로그램

2022. 11. 21. 10:16Python

반응형

 


파이썬 텔레그램봇 자동응답 프로그램



2022.09.15 - [Python] - [리원아빠] 파이썬으로 텔레그램 메시지 보내기

 

[리원아빠] 파이썬으로 텔레그램 메시지 보내기

파이썬으로 텔레그램 메시지 보내기 2022.03.02 - [Python] - [리원아빠] 파이썬으로 카카오톡 메시지 나에게 보내기 [리원아빠] 파이썬으로 카카오톡 메시지 나에게 보내기 카카오톡 메시지 나에게

liwonfather.tistory.com

이전 포스팅에서 파이썬으로 텔레그램 메시지를 보내는 방법에 대해서 알아봤었다.

 

이번 포스팅은 이전 포스팅보다 한단계 더 나아가

 

파이썬과 텔레그램을 좀 더 활용하는 방법에 대해 알아보고자 한다.

 

 

간단하게 만들고자 하는 프로그램을 설명하자면

 

위의 이미지처럼 텔레그램봇에 특정 메시지를 입력했을 경우

 

그에 따른 동작을 수행하는 프로그램을 만들고자 한다.

 

위의 이미지는 /start라는 키워드가 입력됐을 경우

 

사용할 수 있는 명령어 리스트를 보여주고 있다.

 

 

이 방법만 안다면 자신의 원하는 키워드를 지정하고

 

그에 따른 봇의 응답형태를 자유자재로 구현할 수 있다.

 

작성자는 간단하게 디데이를 알려주는 봇을 만들어 보고자 한다.

 

 

최종적으로 구현된 텔레그램봇이다.

 

작성자가 텔레그램봇에게 디데이라는 키워드를 입력하면

 

텔레그램봇은 특정날짜를 기준으로 오늘까지의 일수를 계산해 응답해준다.

 

그럼 본격적으로 소스를 보며 살펴보도록 하자.

 

 

import telegram

telegram_token = "자신의 텔레그램 토큰"
telegram_chat_id = 봇과의 채팅 ID

def creBot():
    bot = telegram.Bot(token=telegram_token)
    return bot

def sendMsg(bot, text):
    bot.sendMessage(chat_id=telegram_chat_id, text=text)

이전 포스팅에서 해당 내용을 설명하였지만

 

텔레그램봇 자동응답 프로그램을 만들기 위해서는

 

텔레그램봇을 만들고 메시지를 보내는 코드가 필요하다.

 

자신의 텔레그램 토큰과, 봇과의 채팅 ID를 확인하는 방법은

 

상단에 명시한 이전 포스팅을 참조하도록 하자.

 

 

def init():
    global bot, updater
    bot = telegram_bot.creBot()
    updater = Updater(token=telegram_bot.telegram_token, use_context=True)
    dispatcher = updater.dispatcher
    updater.start_polling()
    telegram_bot.sendMsg(bot, "디데이 계산 봇 시작")
    return dispatcher

 

 

init 함수안에서는 텔레그램 봇을 초기화 하고

 

작성자가 보내는 메시지를 지속적으로 모니터링하는 폴링 작업을 시작한다.

 

폴링 작업까지 정상적으로 수행이 되면 준비가 되었다는 메시지를 작성자에게 보내준다.

 

폴링 작업이란 쉽게 말하면 쉬지 않고 계속해서 상태를 감지하는 작업 형태라고 보면 된다.

 

 

def handler(update, context):
    msg = update.message.text
    if msg == "디데이":
        telegram_bot.sendMsg(bot, getDays())

handler 함수는 작성자와 텔레그램봇이 어떤 약속을 할지 정하는 함수라 할 수 있다.

 

작성자의 경우 디데이라는 키워드가 입력되는 경우

 

텔레그램봇을 통해 작성자에게 다시 메시지를 보내도록 했고 

 

그 내용은 getDays라는 함수를 통해 가져오도록 했다.

 

 

def getDays():
    today = datetime.date.today()
    target_date = datetime.date(2018, 12, 20)
    d_day = today - target_date
    return(f"d-day: {d_day.days}")

getDays 함수는 특정일짜를 기준으로 오늘까지의

 

지나온 일수를 계산해 리턴하는 함수이다.

 

 

import datetime
import telegram_bot
from telegram.ext import Updater
from telegram.ext import MessageHandler, Filters


def init():
    global bot, updater
    bot = telegram_bot.creBot()
    updater = Updater(token=telegram_bot.telegram_token, use_context=True)
    dispatcher = updater.dispatcher
    updater.start_polling()
    telegram_bot.sendMsg(bot, "디데이 계산 봇 시작")
    return dispatcher


def getDays():
    today = datetime.date.today()
    target_date = datetime.date(2018, 12, 20)
    d_day = today - target_date
    return(f"d-day: {d_day.days}")


def handler(update, context):
    msg = update.message.text
    if msg == "디데이":
        telegram_bot.sendMsg(bot, getDays())


if __name__ == "__main__":
    dispatcher = init()
    echo_handler = MessageHandler(Filters.text, handler)
    dispatcher.add_handler(echo_handler)

전체 소스 코드이다.

 

메인 함수에서는 텔레그램봇을 초기화하고

 

작성자의 메시지를 확인하기 위한 작업을 수행한다.

 

그러면 해당 프로그램을 종료하기전까진

텔레그램봇은 계속해서 작성자의 메시지를 확인하고

 

지정된 키워드가 확인될 경우 getDay함수를 호출하여

해당 내용을 작성자에게 다시 보내준다.

 

즉, 가장 중요한 부분은 handler 함수라고 할 수 있는데

 

키워드를 지정하고 그 키워드에 반응할 액션을 지정할 수 있기때문이다.

 

작성자의 경우 간단하게 다시 텔레그램을 통해

 

작성자에게 메시지를 보내주는 프로그램이지만

 

좀 더 응용하면 주식매매를 하는 프로그램이나

 

자동포스팅 프로그램도 만들 수 있다.

 

그럼 끝.

반응형