(python) telegram bot 3. command 받아 처리하기

2019-09-07

텔레그램 봇을 만들어 보고, 업비트의 코인 가격을 가져와 메시지로 전송하는 방법을 알아보았습니다.

이번에는 봇이 일방적으로 메시지를 보내는 것이 아닌, 봇에게 Command/arg를 넘겨 처리하는 예제를 알아보겠습니다.

1. 개발환경

2. updater에 CommandHandler 추가

CommandHandler는 ‘이 command를 요청하면 이 function을 실행해 줘’를 처리합니다.

def start(bot: Bot, update: Update):
    logging.info('>>> start')


def stop(bot, update: Update):
    logging.info('>>> stop')


TELEGRAM_BOT_TOKEN = accounts.TELEGRAM_DEV_DEMO_BOT # 생성한 bot token으로 변경해주세요
updater = Updater(TELEGRAM_BOT_TOKEN)
updater.dispatcher.add_handler(CommandHandler('start', start)) # start command를 요청하면 start function 실행
updater.dispatcher.add_handler(CommandHandler('stop', stop))
updater.start_polling() # command 입력받을때 까지 대기 시작
updater.idle()

3. command + arg 처리

command뿐만 아니라 사용자가 인자를 전달하고 싶은 경우가 있습니다.

예) ‘search’ command에 keyword전달

CommandHandler에 pass_args를 True로 주시면 args를 전달할 수 있습니다.

args 는 list로 전달됩니다.

def search(bot, update: Update, args):
    logging.info('>>> search')

updater.dispatcher.add_handler(CommandHandler('send', send, pass_args=True))

4. command에 대한 응답으로 메시지를 보내기

callback으로 전달된 bot, update를 가지고 응답 메시지를 보낼 수 있습니다.

def start(bot: Bot, update: Update):
    logging.info('>>> start')
    bot.send_message(chat_id=update.message.chat_id, text='welcome...')


def stop(bot, update: Update):
    logging.info('>>> start')
    bot.send_message(chat_id=update.message.chat_id, text='bye...')


def search(bot, update: Update, args):
    logging.info('>>> search')
    keywords = 'keywords:'
    for arg in args:
        keywords += '\n - {}'.format(arg)
    bot.send_message(chat_id=update.message.chat_id, text=keywords)

5. 실행 결과

지금 핫한 인물인 조국과 윤석렬을 검색해보았습니다.

screenshot

코드

전체 코드는 https://github.com/apt-info/samples/ 에서 확인하실 수 있습니다.