본문 바로가기
Back-end/Python

[Telegram] 무작정 시작하기 (2) - CommandHandler

by 허도치 2020. 1. 30.

2020/01/30 - [Back-end/Python] - [Telegram] 무작정 시작하기 (1) - 설치 및 실행

 

 

  지난 포스트에서 텔레그램 봇을 생성하고 Message를 Push하는 예제를 다루어보았다. 이번 포스트에서는 명령어(Command)를 입력받고 그에 따른 이벤트를 실행하는 예제를 다루어 보려고 한다.

 

 

1. Command Handler 생성.

   1-1. 소스 작성.

         - cmd_handler_bot.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#cmd_handler_bot.py
from telegram.ext import Updater
from telegram.ext import CommandHandler
 
BOT_TOKEN='672768316:AAHXpYmnMzGp_eH0i-juikUFU6q9y78CBhA'
 
updater = Updater( token=BOT_TOKEN, use_context=True )
dispatcher = updater.dispatcher
 
def start(update, context):
    context.bot.send_message(chat_id=update.effective_chat.id, text="작업을 시작합니다.")
 
def stop(update, context):
    context.bot.send_message(chat_id=update.effective_chat.id, text="작업을 중단합니다.")
 
def zigbang(update, context):
    context.bot.send_message(chat_id=update.effective_chat.id, text="[{}] 주변 매물을 수집합니다.".format( context.args[0] ))
 
start_handler = CommandHandler('start', start)
stop_handler = CommandHandler('stop', stop)
zigbang_handler = CommandHandler('zigbang', zigbang)
 
dispatcher.add_handler(start_handler)
dispatcher.add_handler(stop_handler)
dispatcher.add_handler(zigbang_handler)
 
updater.start_polling()
updater.idle()
cs

         - 2 ln: 메시지를 감시하고 있다가 메시지가 입력되면 Queue에 쌓고, Dispatcher를 통해 이벤트를 실행하는 클래스.

         - 3 ln: Dispatcher가 수행할 이벤트를 정의하는 클래스.

         - 7 ln: 발급받은 Access Token으로 봇을 생성하고 메시지를 감시하는 객체를 생성.

           * [ use_context=True ]: callback 매개변수로 context를 사용할 수 있음.

         - 8 ln: Dispatcher 객체.

         - 10~17 ln: start, stop, zigbang 이벤트

            * 봇에서 Message를 Push함.

            * [ context.args ]: 명령어와 함께 입력된 파라미터.

         - 19~21 ln: 각 이벤트에 대한 Command Handler 생성.

           * CommandHandler("명령어", Callback)

         - 23~26 ln: 각 Handler를 Dispatcher에 추가.

         - 27 ln: Updater가 메시지를 계속 감시.

         - 28 ln: 신호 중 하나가 수신 될 때까지 차단하고 업데이터를 중지.

           * 이 기능을 사용하지 않으면 Keyboard Interrupt도 안먹힘.

 

   1-2. 실행.

         > python cmd_handler_bot.py

 

   1-3. 실행 결과.

         - 명령어는 반드시 '/'로 시작해야함.

         - 직접 실행해보면 알겠지만, 대부분 입력하자마자 바로 이벤트가 실행됨.

         - 예제 소스가 급하게 만든거라 /zigbang에서 파라미터를 넘겨주지 않으면 반응이 없음.

 

 

3. 마치며.

   - 지금까지 명령어를 입력받아서 이벤트를 처리하는 텔레그램 봇을 아주 간단하게 만들어 보았다. 이벤트로 크롤러를 실행시키면 스마트폰으로 언제 어디서나 자신이 만든 크롤러를 실행하고 결과를 받을 수 있다.

   - 다음 포스트에서는 명령어가 아닌 단순 Text를 입력받아 처리하는 기능을 만들어 보도록 하겠다.

댓글